C++에서 범위 확인 연산자인 ::는 주로 전역 변수를 참조하는 데 사용됩니다. 반면 C#에서는 이 연산자가 네임스페이스와 관련된 용도로 사용됩니다.
범위 확인 연산자가 필요한 이유
서로 다른 네임스페이스에 동일한 식별자(타입 이름)를 가진 클래스나 구조체가 존재할 수 있습니다. 이 경우 어떤 타입을 참조해야 하는지 명확하게 지정하기 위해 범위 확인 연산자를 사용합니다.
대표적인 예로, System.Console 클래스를 참조할 때 전역 네임스페이스 별칭(global)과 함께 범위 확인 연산자를 다음과 같이 활용할 수 있습니다.
global::System.Console
이렇게 작성하면 현재 코드 내에 System이라는 이름을 가진 다른 네임스페이스나 별칭이 존재하더라도, 항상 전역 네임스페이스의 System.Console을 확실하게 참조할 수 있습니다.
예제 코드
아래 예제에서는 using 별칭 지시문으로 myAlias를 정의한 뒤, 범위 확인 연산자를 통해 Hashtable 클래스를 참조하고 있습니다.
using myAlias = System.Collections;
namespace Program {
class Demo {
static void Main() {
myAlias::Hashtable h = new myAlias::Hashtable();
h.Add("M", "1");
h.Add("N", "2");
h.Add("O", "3");
h.Add("P", "4");
foreach (string n in h.Keys) {
global::System.Console.WriteLine(n + " " + h[n]);
}
}
}
}실행 결과
해시테이블은 키의 저장 순서를 보장하지 않으므로 출력 순서는 실행 시점에 따라 달라질 수 있습니다.
N 2 O 3 M 1 P 4
정리
C#의 범위 확인 연산자(::)는 네임스페이스 간 이름 충돌이 발생했을 때 특정 타입이 속한 네임스페이스를 명확히 지정하는 데 유용합니다. 특히 global::을 사용하면 프로젝트 최상위(전역) 네임스페이스를 기준으로 참조하므로, 이름 충돌 문제를 안정적으로 해결할 수 있습니다.