(C++) Namespace 네임스페이스
여러 명이 함께 개발에 참여할 때, UML을 작성하는 등 체계적으로 접근해서 시작부터 프로젝트를 잘 모듈화해서 구성한다면 함수나 변수, 클래스 이름이 충돌 날 가능성이 적지만 보통 일단 시작부터 하고 보기 때문에 이름이 충돌하는 경우가 있다.
네임스페이스는 이름을 묶어주는 그룹이라고 생각하면 된다. user1과 user2가 모두 funcA
를 정의했을 때, 각각이 다른 namespace에 속한다면 namespace를 명시하는 것으로 둘을 구분할 수 있기 때문에 그대로 funcA
를 사용할 수 있는 것이다.
naming convention
1
2
CompanyName.TechnologyName[.Feature][.Design]
대소문자도 위처럼 쓰면 된다.
c++에서의 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
#include <iostream>
namespace user1{
void funcA(void){
std::cout<< "user1" <<std::endl;
}
}
// 이런 식으로 먼저 선언해놓고 정의는 아래에서 해도 된다.
namespace user2{
void funcA(void);
}
int main(void){
user1::funcA();
user2::funcA();
return 0;
}
namespace user2{
void funcA(void){
std::cout<< "user2" <<std::endl;
}
}
std
도 namespace다. 매번 네임스페이스를 적어주는 것이 불편하기 때문에 using
을 사용해 생략할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
// using std로 한 번에 모두 추가하는 것 보다 사용할 것만 추가해야 충돌을 막을 수 있다.
int gval = 100;
int main(void){
gval = 5;
cout<< "using" << " test" <<endl;
::gval += 1;
return 0;
}
전역변수 접근은 namespace를 명시하지 않으면 된다. ::gval
namespace가 길어서 적는게 귀찮다면
1
2
3
namespace fs = std::filesystem;
fs::directory\_entry f;
This post is licensed under CC BY 4.0 by the author.