Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 네임스페이스(namespace) 개념과 사용법 총정리

이 글에서는 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()는 이름은 같지만 서로 다른 네임스페이스에 속해 있기 때문에 충돌 없이 각각 독립적으로 실행됩니다. 이처럼 네임스페이스를 활용하면 대규모 프로젝트나 외부 라이브러리와의 이름 충돌 문제를 깔끔하게 해결할 수 있습니다.