[C++] #3 이름공간 (NameSpace) & 범위 지정 연산자 ::

반응형
반응형

[목차]

#1 이름공간(NameSpace)이란?

#2 이름공간 선언 - namespace

#3 범위지정 연산자 ::

#4 이름공간 명시 - using

 

* 개인적인 C++ 공부 내용을 정리하는 용도로 작성된 글 이기에 잘못된 내용이 있을 수 있습니다.


#1 이름공간(NameSpace)이란?

"이름공간"이란 이름 충돌문제 발생을 방지하기 위해서 특정 영역에 이름을 붙여주기 위한 문법이다.

예를들어 협업중인 A회사와 B회사가 다음과 같은 함수를 정의 했다고 가정해 보자.

//A회사
void MyFunc(){
	std::cout << "A Company Function" << endl;
}

//B회사
void MyFunc(){
	std::cout << "B Company Function" << endl;
}

 

함수 이름과 매개변수도 모두 동일하기에, 이름 충돌이 발생하고 만다. 따라서 위와 같은 상황을 해결하기 위해선는 한 회사가 양보해 함수의 이름을 변경 해야 할 것이다.

하지만, 이름공간 문법을 이용하면 함수의 이름을 변경하지 않고 이런 상황을 해결할 수 있다.


#2 이름공간 선언 - namespace

이름공간은 namespace 키워드를 이용해 선언한다. 아래는 A회사의 이름공간 CompanyA 와 B회사의 이름공간 CompanyB를 선언해 위에서 발생한 이름 충돌을 막은 예제이다.

//A회사
namespace CompanyA
{
void MyFunc(){
	std::cout << "A Company Function" << endl;
}
}

//B회사
namespace CompanyB
{
void MyFunc(){
	std::cout << "B Company Function" << endl;
}
}

#3 범위지정 연산자 ::

범위 지정 연산자란, 이름공간을 지정할 때 사용하는 연산자이다. 예를 들어 CompanyA 이름공간에 존재하는 MyFunc() 함수를 사용하고 싶다면, CompanyA::MyFuncCompanyB 이름공간에 존재하는 MyFunc() 함수를 사용하고 싶다면, CompanyB::MyFunc와 같이 사용하면 된다.

.. 생략
int main()
{
	CompanyA::MyFunc();
	CompanyB::MyFunc();
	return 0;
}
[출력결과]
A Company Function
B Company Function

#4 이름공간 명시 - using

using 키워드를 사용하면 별도의 이름공간명과 범위지정 연산자 :: 를 사용하지 않고 함수를 호출할 수 있다.

지금까지 cin , cout , endl 을 호출할 때 std::cin , std::cout , std::endl 와 같은 형태로 호출 해왔다. (범위지정 연산자가 사용된 것을 보아 cin 이름공간에 정의된 함수들 이라는 것을 추측할 수 있다.) 하지만 코드 상단부에 using 키워드를 이용해 미리 std 이름공간을 명시해 주면, 앞의 std:: 없이 바로 cin , cout , endl 함수를 사용할 수 있다.

#include <iostream>
using namespace std; // std 이름공간 선언

int main()
{
    int val1;
    // std:: 생략
    cout << "INPUT VALUE : ";
    cin >> val1;
    cout << "VAL1 IS " << val1 << endl;
}
[출력결과]
INPUT VALUE : 10
VAL1 IS 10

반응형

댓글

Designed by JB FACTORY