namespace

Programming/C++ Language 2010. 3. 19. 13:35
큰 프로젝트를 진행하다 보면, 함수나 변수의 이름의 충돌이 일어나는 경우가 많다. 경우에 따라서 prefix를 추가하여 충돌이 발생하지 않는 노력을 할 수는 있지만, 확실하게 방지할 수는 없다. 그래서 namespace 를 사용하여 명칭의 충돌을 막는다.

#include <Turboc.h>

 int i;                  // 전역 네임 스페이스 소속

namespace A {
     int i;             // A 소속
}

 

void func()
{
     int i;
     i=1;              // 지역변수 i
     ::i=2;            // 전역 네임 스페이스의 i
     A::i=3;          // A 네임 스페이스의 i

}

void main()
{
     func();
}


위와 같이 사용을 하면 한 namespace 안에서 같은 이름의 변수가 있더라도, 각 영역의 변수를 가져와서 사용을 해서 중복을 막 을 수 있다.

namespace 의 규칙
1. 네임 스페이스는 반드시 전역 영역에 선언해야 한다. 함수안에 선언할 수 없다는 뜻이며 다음과 같은 지역 네임 스페이스는 허가되지 않는다.
2. 네임 스페이스끼리 중첩 가능하다.
3. 네임 스페이스는 항상 개방되어 있다. 그래서 같은 네임 스페이스를 여러 번 나누어 명칭을 선언할 수 있다. 꼭 한꺼번에 몰아서 네임 스페이스내의 모든 명칭을 일괄 선언해야 하는 것은 아니다.

 namespace A {
     double i;
}

namespace B {
     int i;
}

namespace A {
     char name[32];
}

4. 여러 개의 모듈로 나누어진 프로젝트를 개발할 때는 보통 헤더 파일과 구현 파일을 따로 작성한다. 네임 스페이스안에 함수를 정의할 때 헤더 파일에 원형만 선언하고 구현 파일에 함수의 본체를 작성한다.


using 지시자
- namespace에 있는 변수나 함수를 ㅁ사용 할 때, 매번 namespace 를 쓰고, 변수나 함수이름을 써야되서 번거로움이 있는데, using 지시자를 써서 이를 생략 할 수 있다.
- using 지시자가 영향을 미치는 범위는 이 지시자가 있는 영역에 국한된다. 특정 함수나 블록 안에 using 지시자를 사용하면 이 블록에서만 지정한 명칭을 바로 사용할 수 있으며 그외의 영역에서는 여전히 소속 지정이 필요하다. 다음 코드를 보자.

'Programming > C++ Language' 카테고리의 다른 글

[C++] 다양한 생성자 초기화 방법  (0) 2010.03.19
static 클래스 멤버  (0) 2010.03.19
연산자 오버로딩  (0) 2009.09.30
순수 가상 함수  (0) 2009.09.26
가상 함수의 활용  (0) 2009.09.25

설정

트랙백

댓글