[C++] #3 이름공간 (NameSpace) & 범위 지정 연산자 ::

    반응형

    [목차]

    #1 이름공간(NameSpace)이란?

    #2 이름공간 선언 - namespace

    #3 범위지정 연산자 ::

    #4 이름공간 명시 - using

     

    * 개인적인 C++ 공부 내용을 정리하는 용도로 작성된 글 이기에 잘못된 내용이 있을 수 있습니다.


    #1 이름공간(NameSpace)이란?

    "이름공간"이란 이름 충돌문제 발생을 방지하기 위해서 특정 영역에 이름을 붙여주기 위한 문법이다.

    예를들어 협업중인 A회사와 B회사가 다음과 같은 함수를 정의 했다고 가정해 보자.

    //A회사
    void MyFunc(){
    	std::cout << "A Company Function" << endl;
    }
    
    //B회사
    void MyFunc(){
    	std::cout << "B Company Function" << endl;
    }

     

    함수 이름과 매개변수도 모두 동일하기에, 이름 충돌이 발생하고 만다. 따라서 위와 같은 상황을 해결하기 위해선는 한 회사가 양보해 함수의 이름을 변경 해야 할 것이다.

    하지만, 이름공간 문법을 이용하면 함수의 이름을 변경하지 않고 이런 상황을 해결할 수 있다.


    #2 이름공간 선언 - namespace

    이름공간은 namespace 키워드를 이용해 선언한다. 아래는 A회사의 이름공간 CompanyA 와 B회사의 이름공간 CompanyB를 선언해 위에서 발생한 이름 충돌을 막은 예제이다.

    //A회사
    namespace CompanyA
    {
    void MyFunc(){
    	std::cout << "A Company Function" << endl;
    }
    }
    
    //B회사
    namespace CompanyB
    {
    void MyFunc(){
    	std::cout << "B Company Function" << endl;
    }
    }

    #3 범위지정 연산자 ::

    범위 지정 연산자란, 이름공간을 지정할 때 사용하는 연산자이다. 예를 들어 CompanyA 이름공간에 존재하는 MyFunc() 함수를 사용하고 싶다면, CompanyA::MyFuncCompanyB 이름공간에 존재하는 MyFunc() 함수를 사용하고 싶다면, CompanyB::MyFunc와 같이 사용하면 된다.

    .. 생략
    int main()
    {
    	CompanyA::MyFunc();
    	CompanyB::MyFunc();
    	return 0;
    }
    [출력결과]
    A Company Function
    B Company Function

    #4 이름공간 명시 - using

    using 키워드를 사용하면 별도의 이름공간명과 범위지정 연산자 :: 를 사용하지 않고 함수를 호출할 수 있다.

    지금까지 cin , cout , endl 을 호출할 때 std::cin , std::cout , std::endl 와 같은 형태로 호출 해왔다. (범위지정 연산자가 사용된 것을 보아 cin 이름공간에 정의된 함수들 이라는 것을 추측할 수 있다.) 하지만 코드 상단부에 using 키워드를 이용해 미리 std 이름공간을 명시해 주면, 앞의 std:: 없이 바로 cin , cout , endl 함수를 사용할 수 있다.

    #include <iostream>
    using namespace std; // std 이름공간 선언
    
    int main()
    {
        int val1;
        // std:: 생략
        cout << "INPUT VALUE : ";
        cin >> val1;
        cout << "VAL1 IS " << val1 << endl;
    }
    [출력결과]
    INPUT VALUE : 10
    VAL1 IS 10

    반응형

    댓글

    Designed by JB FACTORY