여러 명이 함께 개발에 참여할 때, UML을 작성하는 등 체계적으로 접근해서 시작부터 프로젝트를 잘 모듈화해서 구성한다면

함수나 변수, 클래스 이름이 충돌 날 가능성이 적지만 보통 일단 시작부터 하고 보기 때문에 이름이 충돌하는 경우가 있다.


네임스페이스는 이름을 묶어주는 그룹이라고 생각하면 된다.

user1과 user2가 모두 `` funcA``를 정의했을 때, 각각이 다른 namespace에 속한다면 namespace를 명시하는 것으로 둘을 구분할 수 있기 때문에 그대로 `` funcA``를 사용할 수 있는 것이다.


naming convention

```cpp

CompanyName.TechnologyName[.Feature][.Design]

```

대소문자도 위처럼 쓰면 된다.


c++에서의 namespace

```cpp

#include <iostream>


namespace user1{

    void funcA(void){

        std::cout<< "user1" <<std::endl;

    }

}

// 이런 식으로 먼저 선언해놓고 정의는 아래에서 해도 된다.

namespace user2{

    void funcA(void);

}


int main(void){

    user1::funcA();

    user2::funcA();

    return 0;

}


namespace user2{

    void funcA(void){

        std::cout<< "user2" <<std::endl;

    }

}

```


`` std``도 namespace다.

매번 네임스페이스를 적어주는 것이 불편하기 때문에 ``cpp using``을 사용해 생략할 수 있다.

```cpp

#include <iostream>


using std::cout;

using std::cin;

using std::endl;

// using std로 한 번에 모두 추가하는 것 보다 사용할 것만 추가해야 충돌을 막을 수 있다.


int gval = 100;

int main(void){

    gval = 5;

    cout<< "using" << " test" <<endl;

    ::gval += 1;

    return 0;

}

```

전역변수 접근은 namespace를 명시하지 않으면 된다. ``cpp ::gval``


namespace가 길어서 적는게 귀찮다면

```cpp
namespace fs = std::filesystem;

fs::directory_entry f;
```


'Languages & Frameworks > C C++' 카테고리의 다른 글

[C] the end of the address space check  (0) 2017.07.27
malloc/calloc tip, wrapper  (0) 2017.07.12
exec 계열 함수  (0) 2017.05.01
fork - exec / wait +clone  (0) 2017.05.01
Assembly  (0) 2016.11.18