반응형

이름공간(namespace)이란?

 

공간에 이름을 주는 행위

 

이름 충돌을 막기위해 나온 것.


프로그램 규모가 커지면 함수나 변수의 이름이 겹치는 문제가 발생하기도 하는데(여러 사람들의 공동작업일 경우 더더욱)


이때 namespace를 이용하면 변수의 중복을 막을 수 있다.

 

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
32
33
34
35
36
 
#include <iostream>
 
namespace A
{
 int i;
 void function(void)
 {
 
   std::cout<<"이름공간 A에서 정의한 함수"<<std::endl;
 
 }
}
 
namespace B
{
 void function(void)
 {
 
   std::cout<<"이름공간 B에서 정의한 함수"<<std::endl;
 
 }
}
 
int main(void)
{
 
 A::function();
 B::function();
 return 0;
 
 
 A::i = 10;       // A 이름공간의 i를 10으로 지정할 수 있다.
 
}
 
Crocus

 

*******************

 

std::라는 뜻은 namespace를 의미한다.

 

std << 특정 공간에 부여된 이름공간

 

:: << 범위 지정 연산자

 

std라는 이름공간안에 cout, cin, endl이 선언되있었던 것이다.




따라서 


1
2
3
4
5
6
7
8
9
10
11
12
 
#include <iostream.h>
 
int main(void)
{
 cout<<"Hello World"<<endl;
 cout<<"Hello "<<"World"<<endl;
 cout<<1<<'a'<<"String"<<endl;
 return 0;
 
}
 
Crocus


1
2
3
4
5
6
7
8
9
10
11
12
 
#include <iostream.h>
 
int main(void)
{
 std::cout<<"Hello World"<<std::endl;
 std::cout<<"Hello "<<"World"<<std::endl;
 std::cout<<1<<'a'<<"String"<<std::endl;
 return 0;
 
}
 
Crocus

이 두개는 같은 코드이다.


하지만 두번째 코드가 이름공간을 더 확실히 해주므로 코딩의 안정성에 더 좋다.


cout, cin, endl을 사용할땐 꼭 하진 않아도 되지만, std::를 붙여주는 습관을 들여두면 좋다.


하지만 계속 std::를 쓰기는 번거로우니 using 선언을 이용하는 것도 좋다.



 


반응형

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

c++ 지역변수, 전역변수의 추가 이해  (0) 2015.03.07
c++ using 선언  (0) 2015.03.07
c++ 인-라인(inline) 함수  (0) 2015.03.07
c++ 디폴트 매개변수  (0) 2015.03.07
c++ 함수 오버로딩  (0) 2015.03.07