Post

(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.