728x90
네임스페이스는 코드에서 이름이 서로 충돌하는 문제를 해결하기 위해 사용된다. 예를 들어 본인 소스 파일에서 사용한 함수가 인클루드한 외부 라이브러리에도 존재한다면 컴파일러는 어떤 함수를 호출할지 알 수 없게 된다.
//namespace.h
namespace mycode{
void foo();
}
위와 같은 구조가 네임스페이스의 기본 구조이다.
#include <iostream>
#include <namespace.h>
void mycode::foo()
{
std::cout << "mycode 내의 foo()함수를 호출합니다." << std::endl;
}
/* 혹은
namespace mycode {
void foo()
{
std::cout << "mycode 내의 foo()함수를 호출합니다." << std::endl;
}
}
*/
와 같이 함수 구현부에서도 사용가능하다. 이렇게 네임스페이스를 지정해두면 위의 foo()함수를 호출할라면
mycode::foo();
와 같은 형식으로 ::스코프 지정 연산자를 이용해 네임스페이스를 명시해줘야 한다. I/O 스트림에서 사용한
std::cout 과 std::endl 역시 앞에 std라는 네임스페이스가 붙은 것이다.
매번 앞에 네임스페이스를 붙여 주기 번거롭기 때문에 using 지시자를 사용하여 접두어를 생략할 수 있다
#include <iostream>
using namespace std;
int main()
{
cout << "Hello, World!" << endl;
return 0;
}
특정한 항목만 가르키도록 using 문을 작성할 수도 있다. 이렇게 사용할 시 같은 네임스페이스의 다른 항목들은 네임스페이스 접두어를 붙여야 한다.
using std::cout;
cout << "Hello, World!" << std::endl
네임스페이스를 중첩하여 사용할 시
namespace A{
namespace B{
namespace C{
/*Code*/
}
}
}
// 혹은
namespace D::E::F{
/*Code*/
}
와 같은 형식으로 사용가능하다.
728x90
'C++' 카테고리의 다른 글
C++ 기초(조건문) (2) | 2023.01.19 |
---|---|
C++ 기초(enum, struct) (0) | 2023.01.19 |
C++ 기초(변수와 연산자) (0) | 2023.01.19 |
C++ 기초(리터럴) (0) | 2023.01.19 |
C++ 기초 (0) | 2023.01.19 |