씹어먹는 C++ - <1 - 2. 첫 C++ 프로그램 분석하기>
modoocode.com
이름 공간 - namespace
이름 공간은 말그대로 어떤 정의된 객체에 대해 어디 소속인지 지정해주는 것과 동일하다.
중복된 이름을 구분하기 위해 C++에서는 같은 이름이라도, 소속된 이름 공간이 다르다면 다른 것으로 취급한다. (동명이인)
std::cout
위의 코드에서 std
가 이름 공간이 된다. std::
가 없이 그냥 cout
이라고 한다면 컴파일러는 cout
을 찾지 못한다.
이름 공간을 정의하는 방법은 다음과 같다.
// header1.h
namespace header1
{
int aaa();
void bbb();
}
// header2.h
namespace header2
{
int aaa();
void bbb();
}
서로 다른 헤더에서 정의된 aaa
와 bbb
는 서로 이름 공간이 다르다. 하지만 자기 자신이 포함되어 있는 이름 공간 안에서는 굳이 앞에 이름 공간을 명시하지 않고 자유롭게 부를 수 있다.
#include "header1.h"
#include "header2.h"
int func()
{
header1::aaa();
}
반면에 어떠한 이름 공간에도 소속되지 않는 경우라면 명시적으로 이름 공간을 지정해야 한다.
여러번 반복적으로 aaa
를 호출하게 되는 경우 앞에 매번 이름 공간을 붙이기 상당히 귀찮다. 아래와 같이 앞으로 header1
이름 공간에 들어있는 aaa
만 쓸경우엔 이렇게 선언할 수 있다.
#include "header1.h"
#include "header2.h"
using header1::aaa;
int main()
{
aaa();
}
아니면 그냥 기본적으로 header1
이름 공간안에 정의된 모든 것들을 header1::
없이 사용하고 싶다면 이렇게 선언할 수 있다.
#include "header1.h"
#include "header2.h"
using namespace header1;
int main()
{
aaa();
}
이름 없는 이름 공간
이름 공간을 굳이 설정하지 않아도 상관없다. 이 경우엔 해당 이름 공간에 정의된 것들은 해당 파일 안에서만 접근이 가능하다. 마치 static
을 사용한 것과 같은 효과를 낸다.
#include <iostream>
using
{
int OnlyInThisFile() {}
}
int main()
{
OnlyInThisFile();
}
'C++ > 기억하고 싶은 거' 카테고리의 다른 글
[C++] 함수의 매개변수에 참조자와 const (0) | 2023.05.31 |
---|---|
[C++] const_cast (0) | 2023.05.27 |
[C++] const에 대한 참조자와 포인터 (0) | 2023.05.17 |