취미로 음악을 하는 개발자

[C++] Namespace 본문

공대인/C[++]

[C++] Namespace

영월특별시 2019. 4. 12. 21:21
728x90


1. 선언

: namespace는 전역변수처럼 main 문 밖에서 선언할 수 있다. 또는 기존에 내장되어 있는 namespace를 사용할 수도 있다. ex) std

선언하는 방식은 함수를 만드는 것과 비슷하지만 이름뒤에 ( )와 파라미터가 필요없다는 점이다.

또 함수처럼 선언만 해주고 main 함수 다음에 코드를 쓸 수 있다.


void set();
namespace doodle {
int n;
void set();
}
namespace google {
int n;
void set();
}

int main() {}

void set() {
n = 10;
}

namespace doodle {
int n;
void set() {
n = 20;
}
}
namespace google {
int n;
void set() {
::n = 30;
}
}


2. 초기화, 위에서 main 함수 이후에 선언해준 doodle, google 네임스페이스 참고

: namespace에서 변수를 초기화시킬 때, 해당 변수는 어떤 변수를 가리키는가?

doodle에서 정의된 기준으로는 먼저 set( ) 밖에서 n을 찾게 되는데 위에서는 n이 있기 때문에 doodle 안에 있는 n을 가리킨다.

하지만 google에서는 ::n을 초기화시켰는데 이것은 전역변수의 n을 가리킨다.


void google::set() {
n = 30;
}

또 namespace 안에 있는 함수만 따로 정의할 수도 있다.


3. namespace 안에 namespace

: 함수와 마찬가지로 namespace도 안에 또 다른 namespace를 넣을 수 있다.

namespace doodle {
void set();
namespace google {
void set();
int n;
}
int n;
}


4. using namespace

: 보통 std를 쓸 때에는 전역변수처럼 main( ) 함수 밖에서 선언한다.

하지만 지역변수처럼 특정 함수에만 사용할 수도 있는데

int main() {
using namespace std;
using namespace doodle;

// 전역, namespace에 공통인 이름의 함수를 사용할 때
::set();
doodle::set();
google::set(); // doodle은 using 이므로 doodle 안의 google로 사용
}


이와 같이 main( ) 안에서 선언하면 main 안에서만 namespace를 생략하고 사용할 수 있게 된다.

여기서 핵심은 doodle 안에 google이 있는데 google을 사용할 때에는 doodle이 using이므로 앞을 생략하고 쓸 수 있다는 점이다.




'공대인 > C[++]' 카테고리의 다른 글

[C++] 객체 생성과 소멸  (0) 2019.05.05
[C++] 클래스  (0) 2019.04.23
[C++] 스타일 함수 심화  (0) 2019.04.11
[C++] 스타일 함수, 문법  (0) 2019.04.07
개념 및 링크, 나중에 정리해서 글 써보기  (0) 2019.04.07
Comments