본문 바로가기

Programming/C++

이름공간

이름공간 (namespace) 말 그대로 이름공간 입니다. ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ ??뭐지 이 ㅂ...ㅅ 은?


이름공간은 공부하면서 느꼈는데 정말 필요하다고 생각되는 부분입니다. C++을 공부하면서 포스팅을 하지만 나중에 더 좋은게 있다고 생각되면 제 생각이 틀렸다고 느끼겠죠.


하지만 지금 상태에서는 이름공간은 정말 좋은 기능이라고 생각됩니다.



이름공간이 어떻게 사용되냐면, A, B, C 사람이 같은 프로젝트를 한다고 가정합니다.

그러면 각자 변수를 사용하고 자신만의 코딩스타일로 소스를 작성할 겁니다.


그리고 나서 소스 파일을 합쳐서 빌드를 하려고 하니 같은 변수를 사용하고 있다면 이름을 전부다 바꿔야 하는 상황이 발생합니다.

소스 10줄 20줄 하는 거면 그냥 바꾸는게 정신건강에 좋을텐데.....  100줄 1000줄 넘어가면 정말 핵노답입니다.


그래서 생겨난 것이 namespace 입니다.







소스를 보시면 namespae 공간이 다른것을 알 수 있습니다. 하지만 이름공간 안의 함수 Func()는 같죠.


만약 A라는 사람과 B라는 사람이 같은 이름의 함수를 사용했다면 둘 중 한사람은 이름을 바꿔야 합니다.

(디폴트 값에 의해서 전달해주는 값의 개수가 다르면 가능은 하겠죠.)


:: 의 정체


지금까지 출력하고 입력하는데 ::를 사용했습니다. 이름은 범위 지정 연산자라고 합니다.


메인 함수의 A::Func()를 해석하자면 A라는 곳의 Func()를 호출하라는 겁니다. 마찬가지로 B라는 곳의 Func()를 호출하라는 의미입니다.


출력과 입력을 할때도 사용되는데, std::cout , std::cin 이것도 마찬가지로 std의 cout를 호출하고 std의 cin을 호출하라는 의미가 됩니다.




선언과 호출 방법





이름공간을 맨위 선언부에 두고, 실제 사용하는 함수는 밑에 정의부에 둡니다.  소스를 보면 이해하시기 편할 겁니다.




같은 이름공간에서 호출시에 이름공간을 명시하지 않는다.




void A::Func() 함수에서 x의 값을 호출하고, Func2()를 호출합니다. 같은 이름공간이기 때문에 A::를 적지 않습니다.


void V::Func() 함수에서는 A::Func()를 호출 하고 있습니다. 다른 이름공간이기 때문에 A::를 적게 됩니다.


namepase A라는 것을 2번사용했는데 이렇게 나눠서도 가능합니다.



이름공간의 중첩


for 중첩, while 중첩 처럼 namespace도 중첩이 가능합니다. 이때 바로 범위지정 연산자를 사용하게 됩니다.




A라는 이름공간 안에 또 AA라는 이름공간이 있습니다.


호출할때에는 A::AA::Func() 를 하게 됩니다.


름공간이 계속해서 중첩이 된다면 계속해서 범위지정 연산자를 사용해주면 됩니다.




이름공간의 별칭


이름공간이 중첩적으로 계속 사용된다면 하염없이 계쏙 범위지정 연산자를 이용해서 써줘야 할까요?

정말 언어들을 배우면 편리하게 해주는 기능들이 많이 있습니다.





namespace를 중첩되게 사용할 경우 또 다른 이름으로 정할 수 있습니다. 



'Programming > C++' 카테고리의 다른 글

자료형 bool  (0) 2015.03.19
using  (0) 2015.03.19
인라인 함수  (0) 2015.03.18
Default Value  (0) 2015.03.16
함수 오버로딩  (0) 2015.03.13