글
namespace
Programming/C++ Language
2010. 3. 19. 13:35
큰 프로젝트를 진행하다 보면, 함수나 변수의 이름의 충돌이 일어나는 경우가 많다. 경우에 따라서 prefix를 추가하여 충돌이 발생하지 않는 노력을 할 수는 있지만, 확실하게 방지할 수는 없다. 그래서 namespace 를 사용하여 명칭의 충돌을 막는다.
위와 같이 사용을 하면 한 namespace 안에서 같은 이름의 변수가 있더라도, 각 영역의 변수를 가져와서 사용을 해서 중복을 막 을 수 있다.
namespace 의 규칙
1. 네임 스페이스는 반드시 전역 영역에 선언해야 한다. 함수안에 선언할 수 없다는 뜻이며 다음과 같은 지역 네임 스페이스는 허가되지 않는다.
2. 네임 스페이스끼리 중첩 가능하다.
3. 네임 스페이스는 항상 개방되어 있다. 그래서 같은 네임 스페이스를 여러 번 나누어 명칭을 선언할 수 있다. 꼭 한꺼번에 몰아서 네임 스페이스내의 모든 명칭을 일괄 선언해야 하는 것은 아니다.
using 지시자
- namespace에 있는 변수나 함수를 ㅁ사용 할 때, 매번 namespace 를 쓰고, 변수나 함수이름을 써야되서 번거로움이 있는데, using 지시자를 써서 이를 생략 할 수 있다.
- using 지시자가 영향을 미치는 범위는 이 지시자가 있는 영역에 국한된다. 특정 함수나 블록 안에 using 지시자를 사용하면 이 블록에서만 지정한 명칭을 바로 사용할 수 있으며 그외의 영역에서는 여전히 소속 지정이 필요하다. 다음 코드를 보자.
#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 |