블로그 이미지
LanSaid

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Recent Post

Recent Comment

Recent Trackback

Archive

2013. 12. 18. 01:04 Study/C++

제 곧내.... 끗....은 농담이고...
하지만 이게 핵심이라 더이상 할말이 없... 지는 않겠네요.


앞서 알아할 것은 바로 범위 지정 연산자  ::  인데
간단한 이해를 돕기 위해 비교하자면 경로 특수 기호 \ 나 / 등이랑 비교 될 수 있겠다.

위 두 기호의 특징이 무엇인가?  예를 들면
 c:\windows 가 있다고 하자.
c와 windows의 관계는 무엇인가?
"c라는 곳의 windows 폴더" 라고 인식할 수 있지 않을까?

왜 범위 지정연산자가 중요하나면 단순히 namespace 뿐만 아니라 클래스, 공용체 등에서 이를 사용해서 구분 지을 수 있기 때문이다.
또한 이를 이용해서 전역변수에도 접근 가능하다.(ex> ::number = 5;)

이름공간 사용법
using namespace 이름공간명;
이름공간명에 사용하고자 하는 이름공간을 언급해주면 되며 이 라인 아래로 해당 이름공간이 기본 적용된다.

------------------------------

namespace(이름공간)의 특징
1. 서로 독립된 기능에 대해 이름이 충돌 할 수 있는 가능성을 분리하기 위함.
 ex> A가 만든 Start()와 B가 만든 Start()를 그냥 참조하면 컴파일 에러를 뿜는다.

2. 이름공간 내에 함수를 포함하려면 적어도 함수 선언은 이름 공간 내에 포함해야한다.(필수조건)
 -> 함수 정의는 외부에서 해도 된다. 단, 범위 지정연산자를 이용한 아래의 양식을 지킬 것
 반환자료형 이름공간::함수명(매개변수);
 
3. 선언된 이름공간의 이름이 동일하다면 물리적으로 다른 영역(다른 파일)에서도 범위 지정연산자를 사용하지 않고도 접근 가능하다.

4. 이름공간 간에도 계층 구조를 만들 수 있다.

5. 4에서 언급한 이름공간의 계층 구조의 경우 계층 구조가 너무 깊을 경우 사용할 때 명시하기가 귀찮아지므로 별칭을 지정해줄 수 있다.
 어떻게 보면 포인터 가튼 역할이라  할 수 있을지도 모르겟는데.... 아무튼 사용 방법은 아래와 같다.
namespace A
{
  namespace B
  {
      namespace C
      {
          int Num;
       }
   }
}

namespace ABC = A::B::C;
ABC::num = 100;



----------------------------

using을 이용한 이름공간의 명시에 있어서 주의할 점
1. 이름공간명 전체를 using 하게 될 경우 이름 영역을 구분해서 사용하는 의미가 많이 퇴색된다. 
 -> 이로 인해 생길 수 있는 충돌 문제가 생길 경우 귀찮아지므로 애초에 사용할 함수에 대해서만 using을 해주는 것이 좋다.
  ex> using std::cout; 



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

[C++] inline 함수 vs 매크로 함수  (0) 2013.12.17
[C++] 매개변수의 디폴트 값  (0) 2013.12.17
[C++] 함수 오버로딩  (0) 2013.12.17
[OOP2] 옵저버 패턴 연습  (0) 2013.12.01
[OOP2] 기상청  (0) 2013.09.11
posted by LanSaid