[C++] Namespace 네임스페이스
여러 명이 함께 개발에 참여할 때, UML을 작성하는 등 체계적으로 접근해서 시작부터 프로젝트를 잘 모듈화해서 구성한다면
함수나 변수, 클래스 이름이 충돌 날 가능성이 적지만 보통 일단 시작부터 하고 보기 때문에 이름이 충돌하는 경우가 있다.
네임스페이스는 이름을 묶어주는 그룹이라고 생각하면 된다.
user1과 user2가 모두 `` funcA``를 정의했을 때, 각각이 다른 namespace에 속한다면 namespace를 명시하는 것으로 둘을 구분할 수 있기 때문에 그대로 `` funcA``를 사용할 수 있는 것이다.
naming convention
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가 길어서 적는게 귀찮다면
'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 |