이름공간 (namespace)


이름공간은 말 그대로 특정 영역에 이름을 붙여주기 위한 문법적 요소이다.


예제를 통해 namespace를 이해하도록 하자.


  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. namespace bestcom {  
  5.     void simplefunc(void) {  
  6.         cout << "bestcom func" << endl;  
  7.     }  
  8. }  
  9.   
  10. namespace progcom {  
  11.     void simplefunc(void) {  
  12.         cout << "progcom func" << endl;  
  13.     }  
  14. }  
  15.   
  16. int main() {  
  17.     bestcom::simplefunc();  
  18.     progcom::simplefunc();  
  19.       
  20.     return 0;  
  21. }  


  • 4 ~ 8행  : bestcom이라는 이름의 공간을 마련하였다. 그리고 그 안에 simplefunc( )을 정의하였다.
  • 10 ~ 14행 : progcom이라는 이름의 공간을 마련하였다. 그리고 그 안에 simplefunc( )을 정의하였다.
  • 21행 : 이름공간 bestcom 내에 정의된 함수 bestcom :: simplefunc( ) 호출
  • 22행 : 이름공간 progcom 내에 정의된 함수 progcom :: simplefunc( ) 호출


[ 결과 ]




위 예제에서 사용된  :: 연산자를 가리켜 범위지정 연산자 라 하며 이름 공간을 지정할 때 사용하는 연산자이다.


콘솔 입출력을 진행할 때 원형은 std :: cout , std :: cin, std :: endl 과 같이 사용하였다.


이는 <iostream> 헤더에 선언되어 있는 cout, cin, endl은 namespace std에 선언되어 있다는 것을 알 수 있다.

이름 충돌을 막기 위해 C++표준에서 제공하는 다양한 요소들은 이름공간 std에 선언 되어 있다.


using을 이용한 이름공간의 명시


이 예제를 통해 using namespace 를 선언하는 이유를 살펴보자.


  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. namespace hybrid {  
  5.     void hbridfunc() {  
  6.         cout << "So simple function" << endl;  
  7.         cout << "in namespace hybrid" << endl;  
  8.     }  
  9. }  
  10.   
  11. int main() {  
  12.     using namespace hybrid;  
  13.     hbridfunc();  
  14.   
  15.     return 0;  
  16. }  



[ 결과 ]



  • 13행 : 키워드 using을 이용해서 이름공간에 정의된 hbridfunc( )을 호출할 때에는 namespace를 지정하지 않고 호출한다는 것을 명시 (선언) 하고 있다.
  • 14행의 using 선언을 통해서 이름공간의 지정 없이 hbridfunc( )함수를 호출하고 있다.

using namespace hybrid ;

다음의 선언은 'hbridfunc( ) 를 namespace hybrid에서 찾으라는 일종의 선언이다.


using namespace std ;

마찬가지로 다음의 선언은 <iostream> 내에 있는 함수들을 namespace std에서 찾으라는 선언이다.


이제는 using namespace std ; 선언하는 이유를 알았으니 앞으로도 계속 사용할 것이다.



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


지역변수의 이름이 전역변수의 이름과 같을 경우, 전역변수는 지역변수에 의해 가려진다는 특징이 있다.


다음의 예제를 통해 살펴보자.


  1. #include <iostream>  
  2.   
  3. int val = 100;  
  4.   
  5. int simfunc(void) {  
  6.     int val = 20;  
  7.     val += 3;  
  8. }  


위의 코드에서 보이듯이 simfunc( ) 내에서 전역변수와 동일한 이름의 지역 변수 val이 선언되었기 때문에 이어서 등장하는 문장에서는 지역변수 val의 값을 3 증가시킨다. 그렇다면 simfunc( )에서 전역변수 val에 접근하려면 어떻게 하면 좋을까? 이 때에도 범위지정연산자를 사용하면 된다.


  1. int val=100;  
  2.   
  3. int simpfunc(){  
  4.     int val=20;  
  5.     val+=3 // 지역변수 val의 값 3 증가  
  6.     ::val+=7; // 전역변수 val의 값 7 증가   
  7. }  



'Language > C++' 카테고리의 다른 글

6. C++ 기본(6)  (0) 2016.12.13
5. C++ 기본(5) - OOP 단계별 프로젝트 01  (0) 2016.12.12
3. C++ 기본(3)  (0) 2016.12.09
2. C++ 기본(2)  (0) 2016.12.09
1. C++ 기본  (0) 2016.12.08

+ Recent posts