Programming Language/C, C++

Namespace

MOLOKINI 2014. 5. 11. 20:50

namespace

네임스페이스
이름공간
 
VS2008이후 등장했습니다.
 
예를 들어, A와 B회사가 같이 프로젝트를 하는데,
A회사에 int a; 변수가있고,
B회사에도 int a; 변수가 있다면, 합쳤을때 변수가 중복되는 문제가 있습니다.
 
그럼 "B회사에서 int b;로 바꾸면 되지" 라고 하실 수 있으시겠으나
대형 프로젝트에서는 일일히 그 변수명을 다 바꿔줄만큼 변수의 수가 작지않습니다. 엄청난 수작업을 요구하기도 하고요.
 
그래서 네임스페이스가 등장!
 
네임스페이스를 불러내려면 :: (스코프)를 이용해서 불러야합니다.
네임스페이스이름::변수
이렇게 부르면 끗.
 

#include <iostream>
namespace A 
{
 double i;
}
namespace B
{
 int i;
}
void func()
{
 A::i=12.345;
 B::i=123;

 std::cout<<A::i<<std::endl;
 std::cout<<B::i<<std::endl;
}
void main()
{
 func();
}

 

 

 
이런 예제가 있다고 가정하고요
네임스페이스 A에는 double형의 i
네임스페이스 B에는 int형의 i가 있다
이러면 두 변수가 변수명이 같은 현상이 벌어지게 되는데,
실제 함수차원에서는 스코프를 이용해서 불러내면 됩니다.
 
std는 표준네임스페이스로 이 안에는 cout, cin, endl 등의 명령어가 들어있습니다.
그래서 네임스페이스를 쓰고난 후에는 cout하려면 std::cout 이라구 써야합니다.
 
그런데 매번 cout을 std::cout이라고 쓰기에는 너무나도 비효율적이다보니
using namespace std;
를 선언하는 방법이 있습니다.
이렇게 선언해두면 앞으로 std::은 쓰지 않아도 상관없습니다.
꼭 표준 네임스페이스가 아니더라도 일반 네임스페이스도 이런식으로 지정해서 생략할 수 있습니다.

 

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

struct, typedef  (0) 2014.05.13
C++ TR1 설치  (0) 2014.05.13
inline 함수  (0) 2014.05.11
릴리즈모드 링크에러  (0) 2014.05.11
HRESULT, LRESULT  (0) 2014.05.11