[C++] #3 이름공간 (NameSpace) & 범위 지정 연산자 ::
- Archive2/C&C++
- 2021. 8. 20.
[목차]
#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::MyFunc 를 CompanyB 이름공간에 존재하는 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
'Archive2 > C&C++' 카테고리의 다른 글
[C++] #5 참조자와 함수 - 참조자가 필요한 이유 Call-By-Value & Call-By-Reference (0) | 2021.08.21 |
---|---|
[C++] #4 참조자(Reference) - 참조자는 변수의 별칭이다. (0) | 2021.08.21 |
[C++] #2 함수 오버로딩 (Function Overloading) 과 디폴트 값 (defalut value) (0) | 2021.08.20 |
[C++] #1 입출력 방식 cin / cout / endl (0) | 2021.08.20 |
[C++] 입력 함수 정리 - cin / getline() (feat. cin.ignore()) (0) | 2021.07.09 |