변수나 함수, 구조체 등에 사용되는 이름은 해당 요소를 지정하는 identifier이다.
Identifier의 역할을 수행하려면 각 이름은 unique 해야 하는데..
프로그램의 규모가 커 많은 함수가 포함될수록, 또 많은 library를 포함할수록 개발자가 사용하려는 이름이 이미 선언된 identifier와 충돌할 가능성이 높아진다.
C 언어에서는 어쩔 수 없이 최대한 unique 한 identifier를 개발자가 쥐어짜 내어야 하지만 C++은 namespace 문법을 도입하여 이러한 이름 충돌 문제를 해결하였다.
namespace foo
{
void init(void) { } // ①
}
namespace goo
{
void init(void) { } // ②
}
void init(void) { } // ③
C++에서는 위의 코드와 같이 init
이란 동일 이름의 함수를 여러 개 선언할 수 있다.
단, 각자 다른 논리적 공간 (=namespace) 안에서 존재한다는 가정하에서이다.
init |
||
① | ② | ③ |
foo namespace의 함수 |
goo namespace의 함수 |
global namespace의 함수 |
이 3개의 함수는 모두 동일한 이름을 갖지만, 각기 전혀 다른 동작을 수행할 수 있다.
그렇기 때문에 개발자의 의도대로 프로그램이 수행되려면 3개의 함수 중 원하는 init
함수가 호출되도록 코드를 작성해야 한다.
원하는 특정 namespace 내 identifer의 호출에는 범위 확인 연산자가 사용된다.
이에 대한 설명은 다음 글에서 이어가도록 하겠다.
'C · C++' 카테고리의 다른 글
[C(++)] Header Guard (헤더 가드) Coding (0) | 2022.02.05 |
---|---|
[C] printf 함수 (0) | 2021.12.21 |
[C] const type qualifier (0) | 2021.12.21 |
[C++] namespace 사용 및 특징 (0) | 2021.12.18 |
[C++] 범위 확인 연산자 (::) (0) | 2021.12.15 |