[ c++ ] namespace

채명석·2021년 12월 17일
0

cpp

목록 보기
1/11

namespace

이름공간(namespace)란?

namespace는 말 그대로 특정 영역이름을 붙여주어 사용하는 것 입니다.

namespace는 프로그램이 대형화 되어가면서 이름의 충돌이 일어나는 문제가 등장하면서 이 문제를 해결하기위해 나왔습니다.

예를들어 회사 A, B, C가 있는데 이 회사가 프로젝트를 각각 나눠서 구현한 후 마지막에 하나의 프로젝트로 만들기로 했을 때 서로 변수 및 함수의 이름이 충돌이 일어날 가능성이 많습니다. 이럴 때 서로 모든 변수와 함수를 정해놓기도 힘들고 나중에 중복되는 부분을 변경하기도 힘듭니다.

이럴 때 namespace를 사용한다면 간단하게 해결할 수 있습니다.

namespace의 사용

namespace의 사용법은 다음과 같이 선언 및 정의하여 사용할 수 있습니다.

namespace	A
{
	void	printHi();
}

namespace	B
{
	void	printHi();
}

void	A::printHi()
{
	std::cout << "Hi A!" << std::endl;
}

void	B::printHi()
{
	std::cout << "Hi B!" << std::endl;
}

int	main(void)
{
	A::printHi();
	B::printHi();

	return (0);
}

출력은 이렇게 나옵니다.

Hi A!
Hi B!

이렇게 사용한다면 각 변수 및 함수 이름의 충돌은 일어나지 않습니다.
여기에서 나오는 ::범위지정 연산자라고 합니다.

using을 이용해서 namepace 사용하기

using을 이용한다면 범위지정연산자를 굳이 이용하지 않아도 됩니다.

int	main(void)
{
	using A::printHi;
	printHi();

	return (0);
}

이렇게 using을 사용하면 선언한 함수 내에서 사용이 가능합니다.
모든 곳에서 효력을 갖고싶게 한다면 전역변수로 선언하면 됩니다.

만약 namespace내의 모든 변수 및 함수를 사용하고 싶다면
using namespace A처럼 선언하면 됩니다.

namespace의 중복과 별칭

namespace는 중복선언이 가능하고 중복된 선언이 길어진다면 별칭을 만들수도 있습니다.

namespace	A
{
	int num = 0;

	namespace	B
	{
		int num = 1;

		namespace	C
		{
			int num = 2;
		}
	}
}


int	main(void)
{
	std::cout << A::num << A::B::num << A::B::C::num << std::endl;

	// 별칭
	namespace ABC = A::B::C;
	std::cout << ABC::num << std::endl;
	return (0);
}

출력은 다음과 같습니다.

012
2

[ c++ ] namespace
[ c++ ] 클래스, 생성자, 소멸자, 이니셜라이저, this포인터
[ c++ ] c++에서의 const와 static
[ c++ ] 참조자(reference)
[ c++ ] new와 delete
[ c++ ] 함수 오버로딩
[ c++ ] 파일 입출력 (ifstream, ofstream)
[ c++ ] 함수포인터, 멤버 함수포인터
[ c++ ]연산자 오버로딩
[ c++ ] 캡슐화란?
[ c++ ] 상속과 다형성에 대해 알아보자

0개의 댓글