C 언어 개열/C++

이름공간(Namespace)

본클라쓰 2010. 8. 19. 07:57


 이름공간은 프로그램 소스 코드에 이름을 부여하는 방법이다.  아래와 같이 함수명이 같은 함수가 복수로 있다면 컴파일러 오류가 발생한다.

#include <iostream>

int fun() {
    return 10;
}

int fun() {
    return 20;
}

int main() {

    std::cout << fun() << std::endl;
    return 0;

}


 같은 이름의 함수를 사용했기 때문에 컴파일러 오류를 발생한다. 컴파일러는 어떤 함수를 호출해야 하는지 구분할 수 없다. 함수 오버로딩도 아니고, 그냥 함수명이 중복이 되었기 때문이다. 하지만 이름 공간을 사용하면 컴파일러 오류가 발생하지 않는다. 이름공간은 컴파일러가 공간안을 해석하여 공간을 통해 접근하기 때문이다. 아래의 코드는 이름 공간(namespace)를 사용하여 같은 함수명을 작성한 예제이다.


#include <iostream>

namespace a {
    int fun(){
        return 10;
    }
}

namespace b {
    int fun(){
        return 20;
    }
}

int main() {

    std::cout << a::fun() << ", " << b::fun() << std::endl;
    return 0;

}


 a 라는 이름 공간에 fun() 이라는 함수를 정의하고 사용할 때는 a::fun() 처럼 접근할 수 있다. std::cout 도 이름 공간(namespace)를 활용한 것이다.