C , C++

[c/c++] namespace란?

kimphoby 2022. 11. 3. 22:49

c++을 하면서 기계처럼 사용하던 'using namespace std ;' 항상 사용은 하지만 의미를 몰랐기에 찝찝했다. 

 

namespace는 '이름을 붙여놓은 공간'이라고 설명된다. 말 그대로 특정 영역에 이름을 붙여주기 위한 문법적 요소이다. 프로그램이 대형화 되어가면서 대두된 문제가 바로 '함수나 변수 이름의 충돌 문제'이다. 여러 회사가 개발에 참여한다고 했을때 각 회사에서 다른 기능의 함수나 변수에 대하여 같은 이름의 함수나 변수를 사용하는 문제가 대두된 것이다. 이에 대한 근본적인 해결책이 'namespace'라는 문법이다.

 

예를 들어서, 아래 코드를 통해 이름이 같은 함수 funct에 대하여, 다른 이름 공간을 지정해 줌으로써 각각 다른 함수로 구분 될 수 있게 된다. 여기서 '::'는  '범위지정 연산자(scope resolution operator)'이라고 하며, 그 이름이 의미하듯이 이름공간을 지정할 때 사용하는 연산자이다. 

#include <iostream>
namespace company1
{
    void funct(){
        std::cout<<"company 1이 정의한 함수"<<std::endl;
    }
}
namespace company2
{
    void funct(){
        std::cout<<"company 2가 정의한 함수"<<std::endl;
    }
}
namespace company3
{
    void funct(){
        std::cout<<"company 3이 정의한 함수"<<std::endl;
    }
}
int main()
{
    company1::funct();
    company2::funct();
    company3::funct();

}

따라서 using namespace std; 는 std(standard)라는 이름 공간에 소속된 함수나 변수들을 사용하겠다는 의미가 된다.