Namespace
같은 반의 같은 이름을 가진 두 사람이 같은 반의상황을 생각해 보자. 우리가 그들을 확실하게 구별해야 할 때마다 우리는 그들이 다른 지역에 살거나 그들의어머니의 이름, 아버지의 이름 등과 같은 그들의 이름과 함께 몇 가지 추가 정보를 사용해야 할 것이다.
C++ 응용프로그램에서도 동일한 상황이 발생할 수 있다. 예를 들어, a() 함수가 있는 코드를 작성하고 동일한 함수를 가진다른 라이브러리가 있을 수 있다. 이제 컴파일러는 코드 내에서 어떤 버전의 a() 함수를 참조하는지 알 수 있는 방법이 없다.
네임스페이스는 이러한 어려움을 극복하도록 설계되었으며유사한 기능, 클래스, 변수 등을 다른 라이브러리에서 사용할수 있는 동일한 이름으로 구별하기 위한 추가 정보로 사용된다. 네임스페이스를 사용하여 이름이 정의되는컨텍스트를 정의할 수 있다. 본질적으로 네임스페이스는 범위를 정의한다.
[정의]
1 2 3 | namespace namespace_name { //code } | cs |
네임 스페이스의 변수와 함수 사용
[namespace_name]::[변수 혹은 함수]
[예제1]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <iostream> using namespace std; //A namespace namespace spaceA { int a; void output() { cout << "SPACE A!" << endl; } } //B namespace namespace spaceB { int a; void output() { cout << "SPACE B!" << endl; } } void main() { spaceA::output(); //spaceA의 output() spaceB::output(); //spcaeB의 output() } | cs |
<Using 지시어>
Using을 사용하면 네임 스페이스의 이름을 명시하지 않고도 네임 스페이스의 모든 이름을사용할 수 있다.
[예제2]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include <iostream> using namespace std; //A namespace namespace spaceA { int a; void output() { cout << "SPACE A!" << endl; } } //B namespace namespace spaceB { int a; void output() { cout << "SPACE B!" << endl; } } using namespace spaceB; //namespaceB 사용 void main() { output(); //spcaeB의 output() } | cs |