이름공간 (namespace)
이름공간은 말 그대로 특정 영역에 이름을 붙여주기 위한 문법적 요소이다.
예제를 통해 namespace를 이해하도록 하자.
- #include <iostream>
- using namespace std;
- namespace bestcom {
- void simplefunc(void) {
- cout << "bestcom func" << endl;
- }
- }
- namespace progcom {
- void simplefunc(void) {
- cout << "progcom func" << endl;
- }
- }
- int main() {
- bestcom::simplefunc();
- progcom::simplefunc();
- return 0;
- }
- 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 를 선언하는 이유를 살펴보자.
- #include <iostream>
- using namespace std;
- namespace hybrid {
- void hbridfunc() {
- cout << "So simple function" << endl;
- cout << "in namespace hybrid" << endl;
- }
- }
- int main() {
- using namespace hybrid;
- hbridfunc();
- return 0;
- }
[ 결과 ]
- 13행 : 키워드 using을 이용해서 이름공간에 정의된 hbridfunc( )을 호출할 때에는 namespace를 지정하지 않고 호출한다는 것을 명시 (선언) 하고 있다.
- 14행의 using 선언을 통해서 이름공간의 지정 없이 hbridfunc( )함수를 호출하고 있다.
using namespace hybrid ;
다음의 선언은 'hbridfunc( ) 를 namespace hybrid에서 찾으라는 일종의 선언이다.
using namespace std ;
마찬가지로 다음의 선언은 <iostream> 내에 있는 함수들을 namespace std에서 찾으라는 선언이다.
이제는 using namespace std ; 선언하는 이유를 알았으니 앞으로도 계속 사용할 것이다.
범위지정연산자의 또다른 기능
지역변수의 이름이 전역변수의 이름과 같을 경우, 전역변수는 지역변수에 의해 가려진다는 특징이 있다.
다음의 예제를 통해 살펴보자.
- #include <iostream>
- int val = 100;
- int simfunc(void) {
- int val = 20;
- val += 3;
- }
위의 코드에서 보이듯이 simfunc( ) 내에서 전역변수와 동일한 이름의 지역 변수 val이 선언되었기 때문에 이어서 등장하는 문장에서는 지역변수 val의 값을 3 증가시킨다. 그렇다면 simfunc( )에서 전역변수 val에 접근하려면 어떻게 하면 좋을까? 이 때에도 범위지정연산자를 사용하면 된다.
- int val=100;
- int simpfunc(){
- int val=20;
- val+=3 // 지역변수 val의 값 3 증가
- ::val+=7; // 전역변수 val의 값 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 |