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

C++ 범위 확인 연산자(::)란? 용도와 사용법 총정리

C++에서 ::(범위 확인 연산자, scope resolution operator)는 변수 스코프(유효 범위)로 인해 가려진 이름에 다시 접근할 수 있게 해주는 연산자입니다. 이 연산자는 단항(unary)과 이항(binary) 형태로 모두 사용할 수 있습니다.

전역 변수에 접근하기

블록이나 클래스 내부에서 같은 이름의 선언이 네임스페이스 스코프 또는 전역 스코프의 이름을 가리고 있을 때, 단일 범위 확인 연산자를 사용해 원래 이름에 접근할 수 있습니다. 예를 들어, 전역 변수 my_var와 지역 변수 my_var가 동시에 존재하는 경우, 전역 변수에 접근하려면 반드시 범위 확인 연산자를 사용해야 합니다.

예제

#include <iostream>
using namespace std;

int my_var = 0;
int main(void) {
    int my_var = 0;
    ::my_var = 1;   // 전역 my_var를 1로 설정
    my_var = 2;     // 지역 my_var를 2로 설정

    cout << ::my_var << ", " << my_var;
    return 0;
}

출력 결과

1, 2

main 함수 안에서 선언된 my_var는 전역 네임스페이스 스코프에 선언된 같은 이름의 정수 변수를 가립니다. 이때 ::my_var = 1; 문장은 전역 네임스페이스 스코프에 선언된 my_var에 접근하여 값을 변경합니다. 출력 결과를 보면 전역 변수는 1, 지역 변수는 2로 서로 다른 값이 유지되는 것을 확인할 수 있습니다.

클래스 이름 및 클래스 멤버에 접근하기

범위 확인 연산자는 클래스 이름이나 클래스 멤버 이름에 접근할 때도 활용할 수 있습니다. 클래스 멤버 이름이 가려져 있더라도, 클래스 이름과 범위 확인 연산자를 앞에 붙여 해당 멤버를 사용할 수 있습니다. 특히 정적(static) 데이터 멤버를 정의하거나 참조할 때 필수적으로 사용됩니다.

예제

#include <iostream>
using namespace std;

class X {
    public:
    static int count;
};

int X::count = 10;          // 정적 데이터 멤버 정의
int main () {
    int X = 0;              // 클래스 타입 X를 가림
    cout << X::count << endl;   // 클래스 X의 정적 멤버 사용
}

출력 결과

10

위 예제에서 main 함수 내의 지역 변수 X가 클래스 타입 X를 가리고 있지만, X::count처럼 범위 확인 연산자를 사용하면 여전히 클래스의 정적 멤버에 정상적으로 접근할 수 있습니다. 또한 int X::count = 10;과 같이 클래스 외부에서 정적 멤버를 정의할 때도 범위 확인 연산자가 사용됩니다.

정리

범위 확인 연산자(::)는 크게 두 가지 상황에서 유용합니다. 첫째, 지역 변수가 전역 변수를 가렸을 때 ::변수명으로 전역 변수에 접근할 수 있고, 둘째, 클래스 외부에서 정적 멤버를 정의하거나 클래스 이름이 가려졌을 때 클래스명::멤버명 형태로 멤버에 접근할 수 있습니다. C++ 프로그래밍에서 이름 충돌 문제를 해결하는 기본적인 도구이므로 꼭 익혀두는 것이 좋습니다.