네임스페이스(namespace)란?
C++에서 네임스페이스(namespace)는 식별자들을 그룹화하여
충돌을 방지하고 코드의 모듈성을 촉진하는데 사용되는 기능입니다.
네임스페이스는 일반적으로 C++ 표준 라이브러리 및 사용자 정의
코드에서 사용됩니다.
네임스페이스는 전역 범위에서 이름 충돌을 방지하기 위해 사용된다.
여러 개의 라이브러리 또는 모듈을 사용할 때 각각에 동일한 이름의 함수,
클래스, 변수 등이 있는 경우 충돌이 발생할 수 있다. 네임스페이스는
이러한 충돌을 방지하기 위해 식별자들을 고유하게 만들어 준다.
네임스페이스 정의
네임스페이스의 정의는 아래의 코드와 같이 할 수 있다.
namespace MyNamespace // 네임스페이스 이름
{
// 네임스페이스에 속하는 함수, 클래스, 변수 등 정의
int myFunction();
class MyClass {
// 클래스 멤버 정의
};
// ...
}
네임스페이스 사용
네임스페이스 내에 있는 함수나 클래스에 접근하려면 아래의 코드처럼 사용 가능하다.
int result = MyNamespace::myFunction(); // 네임스페이스이름::함수명()
MyNamespace::MyClass obj;
네임스페이스 정리
네임스페이스는 전역에서 쓰듯이 사용가능합니다.
네임스페이스끼리는 함수나 그 안에 데이터를 공유하지 않습니다.
주로 라이브러리를 만들때 사용됩니다.
네임스페이스를 사용하여 함수, 클래스, 변수등을 그룹화하면 다른 네임스페이스와의 충돌을
피할 수 있습니다. 또한 여러 개의 네임스페이스를 중복선언이 가능하여 계층 구조를 만들 수도 있습니다.
같은 네임스페이스를 공유하면 그 네임스페이스의 함수안에 다른 함수를 쓸 때
네임스페이스 이름을 생략할 수 있습니다. 다른 네임스페이스 함수를 호출할 때는
네임스페이스 이름을 붙여야 합니다.
네임스페이스 함수를 정의 하는곳이나 구현하는 곳이나 네임스페이스 내부로 간주합니다.
네임스페이스는 typedef처럼 별칭을 사용할 수 있습니다.
namespace ABC = AAA::BBB::CCC; // 네임스페이스 중첩이 가능하며, 이렇게 별칭으로 사용가능
// 두개의 코드는 같다.
AAA::BBB::CCC::num1
ABC::num1
아래의 코드처럼 using namesapce 네임스페이스이름; 를 사용하면
네임스페이스 이름을 생략하고 직접 함수를 호출할 수 있다.
#include <iostream>
namespace MyNamespace
{
void myFunction()
{
std::cout << "Hello from MyNamespace!" << std::endl;
}
}
int main()
{
using namespace MyNamespace; //using namesapce 네임스페이스이름
myFunction(); // 네임스페이스 이름을 생략하고 짧게 사용
return 0;
}