언어 자료구조 알고리즘/Escort C++

[C++] namespace

언제나휴일 2016. 4. 15. 12:20
반응형

- namespace

 

 C++언어는 1988년에 만들어진 이후에 계속해서 새로운 문법이 추가되고 있습니다. 이렇게 추가된 문법 중의 하나가 namespace인데 이를 이용하면 같은 이름의 형식이나 개체 등이 정의된 여러 라이브러리 중에 원하는 부분을 선별적으로 사용할 수 있습니다. 가령, ALib BLib Stack Queue라는 사용자 형식을 제공하고 있는데 ALib에 있는 Stack Queue를 사용한다고 가정해 봅시다. 만약 namespace로 구분되어 있지 않다면 ALib를 추가하고 BLib를 추가를 하면 같은 이름이 사용자 형식이 정의되어 있어 컴파일 오류가 발생합니다. 이러한 문제점을 위해 C++에서는 namespace문법이 추가되었습니다.

 

이에 대해 살펴보기 위해 다음의 예를 들어보기로 하겠습니다.

 

namespace를 이용하는 예1

namespace ALib

{

    class Stack

    {

        //...중략...

    };

    class Queue

    {

        //...중략...

    };

};

 

namespace BLib

{

    class Stack

    {

        //...중략...

    };

    class Queue

    {

        //...중략...

    };

};

 

using namespace ALib;

void main()

{

     Stack stack1;

     BLib::Stack stack2;

}

 

 

 예제 코드를 보면 namespace ALib 내부에 Stack Queue가 정의되어 있고 namesapce BLib 내부에 Stack Queue가 정의되어 있습니다. 이 같은 경우에 Stack Queue namespace내에 정의되어 있어 이름 충돌이 나지 않습니다. 이 때 특정 namespace 내에 있는 이름을 사용하고자 한다면 using namespace ALib; 와 같이 명시할 수 있습니다. 이 경우에는 Stack stack1; 처럼 ALib를 명시하지 않아도 ALib내부에 있는 Stack을 사용하게 됩니다. 그리고 BLib::Stack처럼 namespace 이름과 스코프 연산자(::)를 사용하여 이름 충돌을 막을 수도 있습니다.

 

그런데 만약 ALib StackBLib Queue를 간편하게 사용하려면 어떻게 해야 할까요? 다음의 예를 살펴보시기 바랍니다.

 

namespace를 이용하는 예2

namespace ALib

{

    class Stack

    {

        //...중략...

    };

    class Queue

    {

        //...중략...

    };

}; 

namespace BLib

{

    class Stack

    {

        //...중략...

    };

    class Queue

    {

        //...중략...

    };

}; 

using ALib::Stack;

using BLib::Queu; 

void main()

{

     Stack stack;

     Queue queue;

}

 

1장 C++ 들어가면서 동영상 보기

(모든 동영상 강의는 무료입니다.)

반응형