본문으로 바로가기

[C++]이름공간(namespace) (2)

category 프로그래밍/C++ 2017. 2. 20. 22:46
728x90
반응형

안녕하세요. letitkang입니다.


요즘 하루하루가 너무 빠른 느낌이에요.


그만큼 열심히 하고있다는건가요? ㅋㅋㅋ 더 열심히 삽시다!


'윤성우의 C++ 열혈강의' 공부하면서 포스팅하고있습니다!


 

 

 



오늘은 어제에 이어 이름공간 2번째 시간을 가지겠습니다.


다음 기능으로 이름공간은 중첩이 됩니다. 무슨말이냐? 간단한 예제를 보겠습니다.


===============================================================================================

namespace Parent

{

int num=2;


namespace Child1

{

int num=3;

}


namespace Child2

{

int num=4;

}

}

===============================================================================================


보면 충분히 짐작하실 겁니다. 이름공간 안에 이름 공간이 있습니다.


num 변수 3개가 있는데 각각 출력을 한번 해보겠습니다.


===============================================================================================

std::cout<<Parent::num<<std::endl;              // num=2

std::cout<<Parent::Child1::num<<std::endl;    // num=3

std::cout<<Parent::Child2::num<<std::endl;    // num=4

===============================================================================================


더 이상의 설명은 생략합니다... 여러분은 머리가 좋으니깐요!


std::을 한번 살펴볼까요?


cout, cin을 사용할 때 std::를 앞에 붙이는데 바로 그 이유가 이름공간 때문입니다!


namespace std { } 이런 형식으로 되어 있겠죠?


그리고 또하나 using을 사용하여 이름공간을 명시할 수도 있습니다.


간단한 예제 살펴보겠습니다.


===============================================================================================

using을 사용한 소스 코드

===============================================================================================

  1 #include <iostream>

  2

  3 using namespace std;

  4

  5 int main(void)

  6 {

  7     int num=2;

  8     cout<<"Hello World!"<<endl;

  9     cout<<num<<endl;

 10     return 0;

 11 }


===============================================================================================


 

 

 



위와 같이 3번째 줄에 'using namespace std;'를 추가 하면, 이름공간 지정을 생략하겠다는 뜻입니다ㅣ.


즉, 함수 안에서 std::를 붙이지 않고 cout, cin, endl만 입력해도 사용할 수 있습니다.


다음은 별칭에 관해 간단히 살펴보겠습니다.

===============================================================================================

namespace AAA

{

name space BBB

{

namespace CCC

{

num=2;

}

}

}

===============================================================================================


이런식으로 되어 있다면 num을 호출하려면 AAA::BBB::CCC::num이라고 호출을 하여야합니다.


이름공간이 길어진다면? 끔찍하죠. C++은 이런것을 별칭으로 정할 수 있습니다.


===============================================================================================

namespace ABC=AAA::BBB::CCC


ABC::num

===============================================================================================


간단하죠? 기본적인 것이니 알아두시면됩니다.


마지막으로 범위지정 연산자의 기능으로 마무리 하겠습니다.


===============================================================================================

int val = 100;    // 전역변수


int SimpleFunc(void)

{

int val=20;    // 지역변수

val+=3;        // 지역변수

}

===============================================================================================


위의 코드는 변수의 지역성 때문이 지역변수 val이 +3됩니다.


결과는 전역변수 val은 100이, 지역변수 val은 23이 출력된다.


그럼 함수 내에서 전역변수 값은 어떻게 출력할수 있을까요?


아래 소스를 보겠습니다.


===============================================================================================

int val = 100;    // 전역변수


int SimpleFunc(void)

{

int val=20;    // 지역변수

val+=3;        // 지역변수

::val+=7;      // 전역변수

}

===============================================================================================


결과는 전역변수 val은 107이, val은 23이 출력됩니다.


 

 



전역변수 val에 접근하려면 범위지정 연산자인 ::를 변수 앞에 붙여주면, 전역 변수에 접근할 수 있습니다.


오늘은 여기까지 포스팅하겠습니다. 늦은 시간인데 자야겠네요!

읽어주셔서 감사합니다! 좋은하루 되세요~


728x90
반응형