C++/탐구
namespace
WhNi
2024. 3. 20. 10:31
배울땐 그저 이름 충돌 방지하는 그런 역할로 알고있었는데, 깊게 생각해본적이 없어서 한번 정리해보려 한다.
우리가 주로 쓰는건 iostream의 std 인데. 정확하게 무슨 역할을 하고 어떤 기능을 하는지 알아보자.
먼저 :: 연산자에 대해 먼저 알아보자면 namespace에서 사용할 수 있는 정의된 내용들에 접근할 수 있는 연산자이다.
namespace란 프로그래머가 식별자의 논리적 그룹을 정의할 수 있게하는 범위이다.
말로 해서는 뭔가 이해가 잘 되지 않는다. 코드를 보자.
#include <iostream>
using namespace std;
//using namespace Math1;
//using namespace Math2;
namespace Math1
{
int add(int a, int b)
{
return a + b;
}
}
// Math1 이라는 범위에서 쓰이는 함수 add 생성
namespace Math2
{
int add(int a, int b)
{
return a + b;
}
}
// Math2 이라는 범위에서 쓰이는 함수 add 생성
int main()
{
int x, y,z;
int a, b, c;
x = 3;
y = 5;
z = Math1::add(x, y);
a = 1;
b = 3;
c = Math2::add(a, b);
cout << z << "\n";
cout << c << "\n";
}
// 함수의 이름이 같지만, 앞에 붙어있는 범위가 다르므로 어디에서 쓰이는 함수인지 구분이 가능하다
정리하자면
C++ 에서는 같은 범위내에서 같은 이름을 가진 변수, 함수, 클래스는 컴파일러가 헷갈려한다. 그러나 namespace로 규정된 범위 내에서 쓰인다면, 같은 이름과 기능이라도 식별이 가능하기 때문에 이렇게 사용이 가능하다.
'코드의 모듈성을 향상시키고, 이름충돌을 방지하는 범위' 라고 정리하면 될거 같다.