네임스페이스(namespace)
네임스페이스(namespace)는 프로그래밍에서 식별자(identifier)들의 범위를 나타내는 개념
변수, 함수, 클래스 등과 같은 여러 종류의 식별자들이 유일한 이름을 가지고 충돌하지 않도록 하는 데 사용
네임스페이스 프로토 타입
int n; // global variable void set(); // 프로토타입 namespace junseo { // 프로토타입 int n; void set(); } // namespace junseo namespace google { // 프로토타입 int n; void set(); } // namespace google
전역(global) 식별자와 네임스페이스에 속한 식별자 표기
void EX1(void) { ::set(); // global set 함수 junseo::set(); // namespace junseo에 속한 set 함수 google::set(); // namespace google에 속한 set 함수 cout << ::n << endl; cout << junseo::n << endl; cout << google::n << endl; }
변수의 소속을 밝히지 않은 경우
int n; // global variable void set(); // 프로토타입 void set() { ::n = 10; // 명시적 전역변수 } namespace junseo { // 프로토타입 int n; void set(); } // namespace junseo namespace junseo { void set() { n = 20; // 변수의 소속을 밝히지 않은 경우 네임스페이스 안에있는 변수를 사용한다. 여기선 junseo::n = 20; } } // namespace junseo
변수의 소속을 밝히지 않은 경우 네임스페이스 안에 있는 변수를 사용
위 의 예시에서 junseo에 속한 set 함수의 경우 n은 namespace junseo에 속한 n
프로토타입으로 선언된 함수를 따로 정의하는 다른 방법
namespace google { int n; void set(); } // namespace google void google::set() { n = 30; }
- 함수의 namespace를 밝혀주면 namespace 전부를 따로 정의하지 않아도 된다
식별자 검색 (프로토 타입을 사용하지 않고 바로 정의한 경우)
int n; void set() { n = 10; } namespace junseo { int n; void set() { n = 20; } namespace google { void set() { n = 30; // junseo의 n을 30으로 초기화. (컴파일러가 위에서 아래로 읽기 때문에 아직 선언되지 않은 google의 n 대신 junseo의 n을 30으로 변경) } int n; // 컴파일러가 set을 만난 후에 n이 선언됨을 확인해서 set함수로 초기화 x. 하지만 프로토타입 사용 시에는 네임스페이스 안의 변수에 대입. } // namespace google } // namespace junseo
컴파일러가 네임스페이스의 코드를 위에서 부터 아래로 읽음
컴파일러가 google::set 함수를 읽을 때 google::n은 아직 읽지 않은 상태임
따라서 google::set에서 n은 junseo::n
프로토타입을 이용하면 해당 namespace에 해당하는 n에 값을 저장하게 됨
int n; void set() { n = 10; } namespace junseo { void set() { n = 20; } int n; namespace google { void set() { n = 30; // junseo의 n을 30으로 초기화. (컴파일러가 위에서 아래로 읽기 때문에 아직 선언되지 않은 google의 n 대신 junseo의 n을 30으로 변경) } int n; // 컴파일러가 set을 만난 후에 n이 선언됨을 확인해서 set함수로 초기화 x. 하지만 프로토타입 사용 시에는 네임스페이스 안의 변수에 대입. } // namespace google } // namespace junseo
- 위 코드에선 junseo::set()의 정의 이전에 junseo::n의 선언이 등장하지 않으므로 ::n에 20을 저장하게 된다
참조) 두들낙서 C/CPP 강의
'Programming Language > C++' 카테고리의 다른 글
[C++] 상수형 매개변수와 상수형 메서드 (0) | 2024.02.04 |
---|---|
[C++] 클래스(Class) (2) - 정적 멤버, 정적 메서드 (0) | 2024.01.30 |
[C++] 클래스(Class) (1) (0) | 2024.01.30 |
[C++] C++ 스타일 함수 (0) | 2024.01.29 |
[C++] C++ 스타일 문법 (0) | 2024.01.28 |