wellcome_공부일기

01.09. C++ | std :: 명칭공간(Name Space)이란? 본문

프로그래밍/C++

01.09. C++ | std :: 명칭공간(Name Space)이란?

ma_heroine 2020. 4. 28. 21:45

<목차>

1. 명칭공간(Name Space)이란?

2. 명칭공간(Name Space) 활용하기 

         - 같은 이름을 가진 함수 분리

         - 명칭공간(Name Space) 선언하여 사용하기 

         - 명칭공간(Name Space) 안에 명칭공간(Name Space) 만들기 

 

 

 

 

명칭공간(Name Space)이란?

명칭공간(Name Space)은 C과 달리 C++에 추가된 특징이다. 명칭공간 (Name Space)은 선언 범위로, 그 안에 식별자(타입, 함수, 변수 etc.) 이름들에게 범위를 제공한다.  여러 명칭공간 (Name Space) 블락(block) 안에서는 같은 이름이 허용된다. 이러한 모든 블럭 안에서 모든 선언은 명명된 범위에서 선언된다. 

 

예를 들어, C++에서 만약 같은 이름이지만 다른 업무를 하는 2개의 함수, xyz()가 있다고 해보자.

두 함수 중에 하나의 함수를 부를 때 모호성을 방지하기 위해서는, 우리는 두 함수를 다른 두개의 분리된 명칭공간 안에 선언해야 한다.  

두 함수 중에 하나가 명칭공간 name1에 선언되고, 다른 하나는 name2에 선언된다고 생각해보자. 

그러면 우리는 두 함수를 name1::xyz() 그리고 name2::xyz()로 부를 수 있다. 

 

C++은 std라고 불리는 standard namespace를 사용하는데, std에서 모든 내장된 클래스와 함수들이 선언되어 있다.

그래서 우리는 C++ 프로그램 시작부분에서 명칭공간인 std에서 선언된 멤버를 사용하기 위해서 'using namespace std;'라는 명령문으로 사용한다.

 

명칭공간의 :: 뜻 알아보기 

 

 

- 같은 이름의 함수 2개일 경우

#include <iostream>

int doSomething(int a, int b)
{
        return a + b;
}


int doSomething(int a, int b)
{
        return a * b;
}

int main() {
    std::cout << doSomething(3,5) << std::endl;
    std::cout << doSomething(3,5) << std::endl;
    return 0;
}

 

 

- 한 개의 명칭공간(Name Space)를 이용하여 분리

#include <iostream>

namespace MySpace1 
{
    int doSomething(int a, int b) 
    {
        return a + b;
    }
}

int doSomething(int a, int b)
{
        return a * b;
}

int main() {
    std::cout << MySpace1 :: doSomething(3,5) << std::endl;
    std::cout << doSomething(3,5) << std::endl;
    return 0;
}

 

 

- 두 개의 명칭공간(Name Space)을 이용하여 분리

#include <iostream>

namespace MySpace1
{
    int doSomething(int a, int b)
    {
        return a + b;
    }
}

namespace MySpace2
{
    int doSomething(int a, int b)
    {
        return a * b;
    }
}

int main() {
    std::cout << MySpace1 :: doSomething(3,5) << std::endl;
    std::cout << MySpace2 :: doSomething(3,5) << std::endl;
    
    return 0;
}

 

 

- 명칭공간(Name Space) 선언하여 사용하기 

#include <iostream>

namespace MySpace
{
    int doSomething1(int a, int b)
    {
        return a + b;
    }

    int doSomething2(int a, int b)
    {
        return a * b;
    }
}

using namespace std;

int main() {
    using namespace MySpace;

    cout << doSomething1(3,5) << endl;
    cout << doSomething2(3,5) << endl;

    return 0;
}

 

 

- 명칭공간(Name Space) 안에 명칭공간(Name Space) 만들기 

  main()에 ' MySpace :: InnerSpace :: my_function(); ' 만  넣어서 실행시킬수도 있다. 

#include <iostream>
using namespace std;

namespace MySpace
{
    namespace  InnerSpace
    {
        void my_function()
        {
            cout << "Hello, World!" << endl;
        }

    }

}

int main() {
    
    using namespace MySpace :: InnerSpace;

    my_function();
    return 0;
}

 

 

 

 

 

 

 

*해당글은 홍정모님의 따라 배우는 C++을 공부한 토대로 작성되었습니다.

Comments