상세 컨텐츠

본문 제목

namespace - 이름공간

C++/C++98

by deulee 2023. 6. 10. 00:48

본문

namespace란?

네임스페이스는 컴파일러가 식별자(identifier - 변수, 함수 등)를 더 잘 구분하여 오류를 최소화하기 위한 기능이다. 이러한 기능은 대형 프로젝트를 구현하게 될 시 많은 사람들이 변수 또는 함수를 만들게 되는데 이때 충돌을 방지하기 위한 측면으로 자주 쓰인다.

 

우선 이를 알기 전에 선행 지식으로 지역변수와 전역변수에 대해서 알 필요가 있다.

 

지역변수 vs 전역변수

#include <iostream>

int v = 0;

int main(void)
{
	std::cout << v << std::endl;
	int v = 1;
	std::cout << v << std::endl;
	{
		int v = 2;
		std::cout << v << std::endl;
		{
			int v = 3;
			std::cout << v << std::endl;
		}
	}
	std::cout << v << std::endl;
	std::cout << ::v << std::endl;
	return 0;
}

 

출력 결과

0
1
2
3
1
0

 

이를 보면 각 출력마다 결과가 다르게 나온다. 이는 즉, 컴파일러가 어떻게 지역을 구분했는지 알 수 있게 해준다.

 

'{}'는 지역을 나누는 것으로 해당 괄호 안에 변수가 선언되면 그 안에서만 효력을 가지게 된다. 맨 위의 전역으로 선언된 변수 v는 해당 페이지 에서 효력을 가지게 된다.

 

그리고 마지막의 ::v는 전역변수의 v를 의미한다. :: 연산자는 이름공간을 지정하기 위한 연산자로 이것이 없을 때는 현재의 지역에서 식별자(identifier)를 찾게 된다.

 

namespace 사용 방법

우리가 C++에서 출력할 때 사용하는 cout, cin 또한 std라는 네임스페이스에서 정의된 것을 알 수 있다.

 

우선 네임스페이스는 키워드를 사용해서 지정할 수 있고 이 안에 뭘 넣어도 '이름공간::'의 형식으로 꺼내올 수 있다.

 

'::' 연산자는 범위 지정 연산자(scope resolution operator)이라고 한다.

 

즉, 해당 이름 공간을 지정하는 역할을 하게 된다.

 

예를 들어 다음과 같다.

 

std::cout

 

그럼 어떻게 해서 네임스페이스를 만들 수 있을까?

 

#include <iostream>

namespace deulee {
	int num = 3;
	void Print(void)
	{
		std::cout << "print_deulee" << std::endl;
	}
}

void Print(void)
{
	std::cout << "just_print" << std::endl;
}

int main(void)
{
	deulee::Print();
	Print();
}

출력 결과

print_deulee
just_print

 

위와 같이 코드를 작성하게 되면 해당 namespace가 생성하게 되고 :: 연산자를 통해 해당 네임스페이스를 지정해서 함수를 호출할 수 있게 된다.

 

요약

위와 같이 namespace를 생성하게 되면 커다란 프로젝트에서 내가 작성하고 있는 소스코드가 다른 사람이 작성하고 있는 소스코드와 충돌을 방지하기 위해서 만들어졌다고 생각하면 된다.

'C++ > C++98' 카테고리의 다른 글

C++에서의 구조체  (0) 2023.08.03
new 연산자  (0) 2023.08.03
C++의 새로운 입출력 - cout, endl, cin  (0) 2023.06.10
using 키워드  (0) 2023.06.10
C++98 글을 시작하며  (0) 2023.06.06

관련글 더보기