=> namespace는 개체를 구분할 수 있는 범위를 나타내는 말로써, 일종의 개발자 사용 공간이다.
=> 만일 같은 이름을 가진 두개 이상의 식별자가 namespace 구분 없이 사용하게 될 경우, 모호해져 오류가 발생할 수 있다.
=> 그러나 namespace를 사용하면, 같은 이름을 가졌을 지라도 namespace 구분을 통하여 구별할 수 있다.
1. std
#include<iostream>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
return 0;
}
#include<iostream>
int main()
{
std::cout << "Hello world! \n";
return 0;
}
=> Standard namespace로써, 기본적으로 사용하게 되는 namespace.
=> 우리가 자주 사용하는 cout / cin / endl 등이 속해있다.
=> 보통은 라이브러리 선언 이후에 using namespace std 로 사용하는 경우가 많다.
-> 이 경우 여러가지 namespace를 사용하게 될 경우에 겹침현상이 많이 발생할 수 있고, 가독성이 떨어질 수 있다.
-> 그러나 단일 namespace(std)를 사용할 경우에는 무관하다.
2. Scope resolution operator(::)
std::cin >> a; // std namespace
std::cout << a; // std namespace
=> 컴파일러가 특정 namespace에서 식별자를 찾는 방법 중 하나이다.
=> (namespace::함수)의 형태로 사용하게 된다.
=> 만일 전역 namespace를 사용하고 싶다면, namespace 이름을 생략하여 사용해도 된다.(::cin)
3. using 지시자(directive)
using namespace std;
=> using을 사용하면 명시된 namespace에서 속한 것을 다 가져와서 ::를 사용하지 않고 사용할 수 있게 해준다.
=> using 선언 영역에서만 사용할 수 있다.
4. using 지시자(declaration)
using namespace std::abs
=> 위와 같이 namespace::function을 사용하면, 특정 함수인 function만을 사용하겠다고 선언하는 방식
=> using 선언 영역에서만 사용할 수 있다.
5. namespace 생성
#include<iostream>
namespace NewName
{
int a = 10;
int FUNC(int b)
{
return 10*5;
}
}
int main()
{
int a = 100;
std::cout << NewName::a << std::endl; //10
std::cout << a << std::endl; //100
return 0;
}
=> 위와같이 namespace 이름을 부여하고, 범위를 정해준 이후, 안에서 변수 및 함수를 생성하면 고유의 namespace를 제작 / 사용할 수 있다.
6. namespace 별칭
namespace A
{
namespace B
{
}
}
namespace C = A::B
=> namespace 내의 namespace를 부르기 위해서, A::B처럼 사용하는 것 보다 C로 별칭을 지정해여 불러낼 수 있다.
'C++ > Tips' 카테고리의 다른 글
[C/C++] #define , #undef (0) | 2021.03.23 |
---|---|
[c/c++] 주석 (0) | 2021.03.16 |
[C++]ASCII 대<->소 문자 변환 (0) | 2021.03.02 |
[c/c++/c#]++i / i++ (0) | 2021.02.23 |
[c++]Try / Catch (0) | 2021.02.16 |