Notice
Recent Posts
Recent Comments
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

SYDev

C++ Chapter 01-5 : 이름공간(namespace) (2) 본문

Programming Lang/C++

C++ Chapter 01-5 : 이름공간(namespace) (2)

시데브 2023. 7. 5. 16:05

Using을 활용한 이름공간의 명시

 이름공간 내부에 함수를 호출할 때마다 매번 "이름공간::"을 입력하기에는 효율성이 떨어진다. 이때 추가적인 선언을 하나 더해주면 문제가 해결된다.

 

 다음 예제를 살펴보자.

#include <iostream>

namespace MySpace1
{
    void MyFunc(void)
    {
        std::cout<<"It's my function!"<<std::endl;
        std::cout<<"In namespace MySpace1!"<<std::endl;
    }
}

int main(void)
{
    using MySpace1::MyFunc;
    MyFunc();

    return 0;
}
It's my function!
In namespace MySpace1!

 위 예제와 같이 특정 함수 내부에서 using을 선언한다면 그 효력은 선언한 함수 내부에서만 발휘된다. 전역에서 사용하고 싶다면 전역범수를 선언할 때와 같이 위치시켜주면 된다.

 

 다음 예제를 살펴보자. 

#include <iostream>

using std::cout;
using std::cin;
using std::endl;

int main(void)
{
    int MyNum;
    cout<<"Hello World!"<<endl;
    cout<<"Enter Your Num : ";
    cin>>MyNum;
    cout<<"MyNum is "<<MyNum<<endl;

    return 0;
}
Hello World!
Enter Your Num : 3
MyNum is 3

 위 예제처럼 std 내부의 함수를 일일이 using으로 선언하는 것이 불편할 수 있다. 그럴 때는 std에 선언된 모든 것에 대해서 이름공간 지정을 생략할 수 있다.

 

 다음 예제를 살펴보자.

#include <iostream>

using namespace std;

int main(void)
{
    int MyNum;
    cout<<"Hello World!"<<endl;
    cout<<"Enter Your Num : ";
    cin>>MyNum;
    cout<<"MyNum is "<<MyNum<<endl;

    return 0;
}
Hello World!
Enter Your Num : 3
MyNum is 3

 위 예제의 방식을 사용하면 사용자가 좀 더 편해지긴 하지만 그만큼 이름충돌 발생 확률이 올라가기 때문에 적절하게 혼용해야 할 필요가 있다.

 

이름공간의 별칭 지정

 이름공간이 과도하게 중첩되었을 때 별칭을 지정해서 접근할 수 있다.

 

 다음 예제를 살펴보자.

#include <iostream>
using namespace std;

namespace AAA
{
    namespace BBB
    {
        namespace CCC
        {
            int num1;
            int num2;
        }
    }
}

int main(void)
{
    AAA::BBB::CCC::num1=1;
    AAA::BBB::CCC::num2=2;

    namespace ABC=AAA::BBB::CCC;
    cout<<ABC::num1<<endl;
    cout<<ABC::num2<<endl;

    return 0;
}
1
2

 

+범위지정 연산자의 또 다른 기능

 지역변수와 전역변수의 이름이 같은 경우에 지역변수가 선언된 함수 내부에서 전역변수는 지역변수에 의해서 가려진다. 이때 전역변수에 접근하려면 변수 이름 앞에 범위지정 연산자를 붙이면 된다.

 

 아래 예제를 살펴보자.

#include <iostream>
using namespace std;

int val=20;

int main(void)
{
    int val=1;
    cout<<"지역변수 : "<<val<<endl;
    cout<<"전역변수 : "<<::val<<endl;

    return 0;
}
지역변수 : 1
전역변수 : 20

 


출처 : 윤성우, <윤성우의 열혈 C++ 프로그래밍>, 오렌지미디어, 2010.05.12