(구) 자료/C
[1-5] namespace란?
뜐뜐뜐
2018. 8. 27. 17:20
1. namespace란?
- 정확히 말하면 '이름을 붙여놓은 공간'이다.
- 즉, 특정 영역에 이름을 붙여주기 위한 문법적 요소.
- 아주 쉬운 예로, 아파트 입구에서 '도랑아 놀자!' 하면 그 아파트 사는 도랑이들이 죄다 창 밖을 쳐다보겠지.
- 하지만, 301호 사는 도랑아 나와! 하면 친구 한 명만 밖을 쳐다보고 나오게 될 것이다.
* 이해가 잘 안된다. 코드를 보여달라!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include<iostream> using namespace std; void myFunc(void) { cout << "도랑이 코드" << endl; } void myFunc(void) { cout << "식혜의 코드" << endl; } int main() { return 0; } | cs |
- 위처럼 만들면, myFunc를 호출했을 때 충돌이 발생하게 된다.
- 그래서 다음과 같이 namespace를 이용해서 도랑이와 식혜의 영역을 나눠주면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include<iostream> using namespace std; namespace 도랑 { void myFunc(void) { cout << "도랑이 코드" << endl; } } namespace 식혜 { void myFunc(void) { cout << "식혜의 코드" << endl; } } int main() { 도랑::myFunc(); 식혜::myFunc(); return 0; } | cs |
- 정상적으로 출력되는 모습을 볼 수 있을 것이다.
- 여기서 '::'는 '범위지정 연산자'라고 하는데, 이름공간을 지정할 때 사용하는 연산자이다.
- 왜 쓰냐? 동일한 namespace에 정의된 함수를 호출하는 것은 상관 없지만, 다른 공간에서 정의된 함수를 호출할 때는 명시 해줘야 함.
2. using의 의미
- using namespace std
- 그대로 번역하면 std라는 namespace를 사용하겠다.
- 즉, std라는 namespace에 정의된 모든 함수들은 '범위지정 연산자'를 이용 하지 않고, 바로 호출하겠다는 것을 명시하는 것.
3. namespace의 중첩?
- namespace가 중첩되어, 굉장히 코드가 더러워질 때가 있다. 바로 아래처럼 말이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include<iostream> #include<stack> using namespace std; namespace AA { namespace BB { namespace CC { int num = 10; } } } int main() { cout << AA::BB::CC::num << endl; } | cs |
- 이럴땐 별명을 만들어서 사용할 수 있다. 아래처럼.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include<iostream> #include<stack> using namespace std; namespace AA { namespace BB { namespace CC { int num = 10; } } } int main() { cout << AA::BB::CC::num << endl; namespace temp = AA::BB::CC; cout << temp::num << endl; return 0; } | cs |