네임스페이스
네임스페이스
말그대로 이름 공간. 어떤 지역에 이름을 붙이고 그안에 있는 것들을 소속시키는 것이다.
옛 속담에 서울가서 김서방 찾기라는 말이 있다. 서울에 무수히 많은 김서방중에 자신이 찾는 김서방이 누구인지 정확하게 명시해줄 수 있는 것이 이 네임스페이스이다. 서울에서도 어느 구 어느 동 몇번지에 사는 김서방. 이렇게 찾는다면 어떤 김서방인지 정확히 알 수 있다.
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++ 언어본색
※ 책을 보고 공부한 내용을 정리하였기때문에 내용이 책과 다를 수 있습니다.