Program Languege/C/C++

네임스페이스

Frozen0113 2013. 2. 15. 00:21

네임스페이스

 

 말그대로 이름 공간. 어떤 지역에 이름을 붙이고 그안에 있는 것들을 소속시키는 것이다.

 

옛 속담에 서울가서 김서방 찾기라는 말이 있다. 서울에 무수히 많은 김서방중에 자신이 찾는 김서방이 누구인지 정확하게 명시해줄 수 있는 것이 이 네임스페이스이다. 서울에서도 어느 구 어느 동 몇번지에 사는 김서방. 이렇게 찾는다면 어떤 김서방인지 정확히 알 수 있다.

 

Ex>

namespace 이름

{

선언 내용;

}

 

이름은 변수 이름 정의 형식과 같다. 위치는 메인함수 내부가 아닌 파일 선언부에서 사용해야한다.

 

-소스 코드 예시

 

namespace seoul

{

int kim = 0;

}

 

int main(void)

{

int kim = 1;

 

std::cout << kim << std::endl;

}

 

 

일단 값의 출력은 0이 나왔다. 이 말은 메인함수 안에 있는 kim이 사용 되었다는 것을 알 수 있다.

그렇다면 저 seoul에 있는 kim을 사용하려면 어떻게 해야할까? 이때 범위 연산자(::)을 사용해주면 쓸 수 있다. 그렇다면 잠시 출력부분을 보자. std::cout 이부분에서도 범위 연산자가 보이지 않는가? 이것 또한 std라는 이름공간 안에 있는 cout을 불러 사용하는 것이다. 그리고 이 호출을 using namespace std; 와 같이 선언해주면 std 이름공간을 사용할 예정인데 별 말 없이 써놓으면 std에 있는 내용으로 알아들으라는 뜻이다.

 

그럼 seoul에 있는 kim을 출력해보자.

 

std::cout << kim << std::endl;  부분을   std::cout << seoul::kim << std::endl;   로 고치면

 

 

위와 같이 seoul에 있는 kim을 사용하였기때문에 출력 값이 1이 된다.

 

그렇다면 seoul 이외에 한가지 더 추가하고 위에서 배운 using을 써보자

 

 

-소스 코드 예시

 

 

namespace seoul

{

int kim = 0;

}

 

namespace incheon

{

int kim = 1;

}

 

int main(void)

{

using namespace seoul;

using namespace incheon;

 

std::cout << kim << std::endl;

}

 

 

모호한 기호라고 하면서 오류가 생겼다. using을 두가지를 써주면서 동일한 이름의 변수가 있는 상황이 발생하였고 따로 명시해주지 않았기 때문에 seoul에 있는 kim인지 incheon에 있는 kim인지 알 수가 없기 때문이다. using namespace를 쓰면 좀 더 간편하게 사용을 할 수 있지만 위와 같은 충돌이 생길 수 있으므로 항상 조심해서 사용해야한다.

 

 

 

 

- 출처 : 열혈강의 C++ 언어본색

※ 책을 보고 공부한 내용을 정리하였기때문에 내용이 책과 다를 수 있습니다.