[C++] namespace
Language/C++- namespace란?
namespace란 이름을 지니는 공간이라는 뜻으로 특정 영역에 이름을 붙여주기 위한 기법이다.
프로젝트가 대형화 되면서 여러 모듈의 함수이름이 겹쳐 충돌현상이 발생할 수 있는데, namespace를 이용하여 이러한 문제를 해결할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <iostream> namespace A { void func() { std::cout << "Space A" << std::endl; } } namespace B { void func() { std::cout << "Space B" << std::endl; } } int main() { A::func(); B::func(); return 0; } |
위와 같이 func라는 같은 함수명을 A와 B영역으로 나누어서 사용할 수 있다.
- 범위 지정 연산자 (scope resolution operator)
위 예제에서 namespace에 접근하기 위해서 :: 연산자를 사용하는데, 이를 범위 지정 연산자라고 한다.
즉 A::func() 는 A라는 이름공간안에 있는 func를 참조하겠다는 의미로 사용된다.
- using
C++ 입출력 방식에서 cin, cout, endl도 std라는 공간안에 정의되어 있으므로 참조할 때마다 std:: 를 앞에다 붙여주어야 한다.
이는 using 키워드를 이용하여 선언해두면 std:: 를 매번 앞에 붙이지 않아도 된다.
1 2 3 | using std::cin; using std::cout; using std::endl; |
위와 같이 선언해 두면 cin, cout, endl을 참조할때 자동으로 std 공간안에서 찾게된다.
1 | using namespace std; |
위 방법은 std 공간안에 있는 모든 이름을 범위 지정 연산자없이 참조할 수 있는 선언으로 더욱 짧고 편리하지만, std 공간안의 모든 선언을 참조하게 되므로 이름충돌이 일어날 확률은 높아지게 된다.
'Language > C++' 카테고리의 다른 글
[C++] 동적할당. new와 delete (0) | 2015.11.30 |
---|---|
[C++] Reference (0) | 2015.11.29 |
[C++] 인라인 함수 (Inline Function) (0) | 2015.11.28 |
[C++] 디폴트 매개 변수 (Default Parameter) (0) | 2015.11.28 |
[C++] 함수 오버로딩 (Function Overloading) (0) | 2015.11.28 |