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
728x90
반응형