Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 범위 확인 연산자(::)란? C++와의 차이점까지 완벽 정리

C# 범위 확인 연산자(::)란 무엇일까요?

C#의 범위 확인 연산자(scope resolution operator)::는 C++와는 전혀 다른 의미로 사용됩니다. C++에서는 ::가 주로 전역 변수나 클래스 멤버에 접근하는 데 활용되지만, C#에서는 네임스페이스 식별과 관련된 용도로 쓰입니다.

만약 서로 다른 네임스페이스에서 같은 이름(식별자)을 공유하는 타입이 존재한다면, 이들을 명확하게 구분하기 위해 범위 확인 연산자를 사용해야 합니다.

대표적인 예로, System.Console 클래스를 참조할 때 전역 네임스페이스 별칭(global namespace alias)global과 함께 사용할 수 있습니다.

global::System.Console

사용 예제

using myAlias = System.Collections;
namespace Program {
    class Demo {
        static void Main() {
            myAlias::Hashtable h = new myAlias::Hashtable();
            h.Add("Q", "1");
            h.Add("R", "2");
            h.Add("S", "3");
            h.Add("T", "4");
            h.Add("U", "5");
            foreach (string n in h.Keys) {
                global::System.Console.WriteLine(n + " " + h[n]);
            }
        }
    }
}

실행 결과

T 4
R 2
S 3
U 5
Q 1

코드 설명

using myAlias = System.Collections; 구문은 using 별칭(alias) 지시문으로, System.Collections 네임스페이스에 myAlias라는 별칭을 부여합니다. 이후 코드에서는 myAlias::Hashtable처럼 별칭과 범위 확인 연산자를 조합하여 해당 타입을 참조할 수 있습니다.

또한 global::System.Console.WriteLine()은 전역 네임스페이스에서 Console 클래스를 직접 참조합니다. 덕분에 현재 프로젝트 내에 같은 이름의 Console 클래스가 존재하더라도 이름 충돌 없이 안전하게 동작합니다.

범위 확인 연산자가 필요한 이유

여러 외부 라이브러리나 어셈블리를 함께 사용하다 보면 동일한 이름의 타입이 중복되어 충돌이 발생할 수 있습니다. 이럴 때 :: 연산자와 global 별칭 또는 using 별칭을 활용하면 어떤 네임스페이스의 타입인지 명확히 지정할 수 있어 코드의 안정성과 가독성이 크게 향상됩니다.