이 글에서는 C++ 코드에서 네임스페이스(namespace)를 사용하는 방법에 대해 알아보겠습니다.
네임스페이스가 필요한 이유
먼저 일상적인 예시를 들어보겠습니다. 같은 반에 '자라(Zara)'라는 이름을 가진 학생이 두 명 있다고 가정해 봅시다. 이 두 사람을 구분하려면 이름 외에 추가 정보가 반드시 필요합니다. 예를 들어 사는 지역이 다르다면 지역명으로, 아니라면 부모님의 성함 등으로 구분할 수 있겠죠.
C++ 프로그래밍에서도 똑같은 상황이 발생할 수 있습니다. 예를 들어 여러분이 작성하는 코드에 xyz()라는 함수가 있는데, 사용하려는 외부 라이브러리에도 동일한 이름의 xyz() 함수가 포함되어 있다면 어떻게 될까요? 컴파일러는 코드 내에서 호출된 xyz()가 어느 쪽 함수인지 판단할 방법이 없습니다.
바로 이런 문제를 해결하기 위해 네임스페이스가 도입되었습니다. 네임스페이스는 서로 다른 라이브러리에서 동일한 이름으로 존재할 수 있는 함수, 클래스, 변수 등을 구분하기 위한 추가 정보 역할을 합니다. 네임스페이스를 사용하면 이름이 정의되는 맥락(context)을 지정할 수 있으며, 본질적으로 네임스페이스는 하나의 범위(scope)를 정의한다고 볼 수 있습니다.
네임스페이스 정의하기
네임스페이스는 namespace 키워드로 시작하며, 그 뒤에 네임스페이스 이름을 붙여 정의합니다.
namespace namespace_name {
// 코드 선언부
}네임스페이스에 속한 함수나 변수를 호출하려면 범위 지정 연산자인 ::(더블 콜론) 앞에 네임스페이스 이름을 붙이면 됩니다.
name::code; // code에는 변수 또는 함수가 올 수 있습니다.
예제 코드
아래 예제는 서로 다른 두 네임스페이스에 같은 이름의 함수 func()를 정의하고, 각각 호출하는 방법을 보여줍니다.
#include <iostream>
using namespace std;
// 첫 번째 네임스페이스
namespace first_space {
void func() {
cout << "Inside first_space" << endl;
}
}
// 두 번째 네임스페이스
namespace second_space {
void func() {
cout << "Inside second_space" << endl;
}
}
int main () {
// first_space 네임스페이스의 함수 호출
first_space::func();
// second_space 네임스페이스의 함수 호출
second_space::func();
return 0;
}실행 결과
Inside first_space Inside second_space
위 출력에서 확인할 수 있듯이, first_space::func()와 second_space::func()는 이름은 같지만 서로 다른 네임스페이스에 속해 있기 때문에 충돌 없이 각각 독립적으로 실행됩니다. 이처럼 네임스페이스를 활용하면 대규모 프로젝트나 외부 라이브러리와의 이름 충돌 문제를 깔끔하게 해결할 수 있습니다.