이름공간(namespace)



이름과 매개변수가 같은 두 개 함수가 있다.

이름과 매개변수가 같기 때문에 컴파일 할 때 오류가 발생한다.

중복되는 이름이 적으면 함수명을 바꿔주는 방법이 있다.

하지만 일일히 바꿔주기 힘들 정도로 많다면 어떻게 할까?

바로 namespace를 사용하여 간단히 바꿀 수 있다.



namespace 이해하기

 

다음과 같이 두개의 함수가 있다.

 void printMessage()

 {

     std::cout<<"내가 정의한 메시지"<<std::endl;

 }


 void printMessage()

 {

     std::cout<<"친구가 정의한 메시지"<<std::endl;

 }


함수 명과 매개변수까지 동일 하여 컴파일 시 문제가 된다.

이 때 namespace를 사용해 해결해 보자.


[namespace 사용법]

 namespace Me

 {

 void printMessage()

 {

     std::cout<<"내가 정의한 메시지"<<std::endl;

 }

  }


 namespace Friend

 {

 void printMessage()

 {

     std::cout<<"친구가 정의한 메시지"<<std::endl;

 }

 }


이제 컴파일은 문제가 되지 않지만 두 함수를 호출은 어떻게 할까?


[각 함수 호출 방법]

 Me::printMessage();


namespace 명::함수 명


[전체 예제]


#include <iostream>


namespace Me

{

void printMessage()

{

     std::cout<<"내가 정의한 메시지"<<std::endl;

}

}


namespace Friend

{

void printMessage()

{

     std::cout<<"친구가 정의한 메시지"<<std::endl;

}

}


int main(int argc, char** argv) 

{

  Me::printMessage();

    return 0;

}


[결과]

내가 정의한 메시지




using을 이용하여 namespace를 명시

 

메시지를 출력하기 위해 std::cout 함수를 사용한다.

여기서 std는 namespace 이며 cout은 함수이다.

std::cout

std::endl 

매번 std::을 코딩하기 번거롭다.

이를 해결 하기 위해 using을 사용해 std::를 제거해 보자.


[사용법]

 using std::cout;

 using std::endl;



[전체 예제]


#include <iostream>


using std::cout;

using std::endl;


int main(int argc, char** argv) 

{

  cout<<"hello"<<endl;

    return 0;

}


[결과]

hello


위에 예제에서 cout, endl을 호출 할 때 std::가 없이 호출 되었음을 확인 할 수 있다.





반응형

'프로그램 > C++' 카테고리의 다른 글

[C++] 참조자(Reference) 사용법  (0) 2017.12.30
[C++] bool 자료형  (0) 2017.12.29
[C++]인라인 함수 사용법  (0) 2017.12.26
[C++]함수 매개변수 디폴트 값  (0) 2017.12.25
[C++]함수 오버로딩 (Function Overloading)  (0) 2016.12.03

+ Recent posts