뚜둔뚜둔✩

판다의 개발일지

C · C++

[C++] namespace

2021. 12. 15. 20:52

변수나 함수, 구조체 등에 사용되는 이름은 해당 요소를 지정하는 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++] 범위 확인 연산자 (::)

Scope Resolution Operator 범위 확인 연산자 :: 은 특정 namespace에 포함되는 identifer 접근에 사용된다. namespace foo { void init(void) { } // ① } namespace goo { void init(void) { } // ② } void ini..

pandas-are-bears.tistory.com

'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