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

C++ 변수 범위(Scope)의 이해: 지역 변수와 전역 변수 완벽 정리

프로그래밍에서 범위(scope)란 프로그램 내에서 변수가 유효하게 사용될 수 있는 영역을 의미합니다. C++에서는 크게 세 가지 위치에 변수를 선언할 수 있습니다.

  • 지역 변수(Local Variables) — 함수 또는 블록({}) 내부에 선언된 변수
  • 형식 매개변수(Formal Parameters) — 함수의 매개변수 정의 부분에 선언된 변수
  • 전역 변수(Global Variables) — 모든 함수 외부에 선언된 변수

지역 변수(Local Variables)

지역 변수는 해당 변수가 선언된 함수나 코드 블록 내부의 문장에서만 사용할 수 있습니다. 즉, 지역 변수는 자신이 속한 함수 외부의 다른 함수들에는 알려지지 않으며, 접근할 수도 없습니다.

예제

#include <iostream>
using namespace std;

int main () {
    // 지역 변수 선언
    int a, b;
    int c;

    // 실제 초기화
    a = 10;
    b = 20;
    c = a + b;

    cout << c;
    return 0;
}

실행 결과

30

위 예제에서 a, b, c는 모두 main() 함수 내부에 선언된 지역 변수이므로, 이 함수 안에서만 유효합니다.

전역 변수(Global Variables)

전역 변수는 모든 함수의 외부, 일반적으로 프로그램 상단에 정의됩니다. 전역 변수는 프로그램이 종료될 때까지 그 값을 유지하며, 프로그램 내 어떤 함수에서든 접근할 수 있다는 것이 가장 큰 특징입니다.

예제

#include <iostream>
using namespace std;

// 전역 변수 선언
int g;

int main () {
    // 지역 변수 선언
    int a, b;

    // 실제 초기화
    a = 10;
    b = 20;
    g = a + b;

    cout << g;
    return 0;
}

실행 결과

30

전역 변수를 사용하면 여러 함수 간에 데이터를 공유하기 편리하지만, 남용하면 코드의 가독성과 유지보수성이 떨어질 수 있으므로 필요한 경우에만 신중하게 사용하는 것이 좋습니다.

같은 이름의 지역 변수와 전역 변수

C++에서는 지역 변수와 전역 변수에 같은 이름을 사용할 수 있습니다. 다만 이름이 충돌하는 경우, 함수 내부에서는 지역 변수가 우선하여 사용됩니다.

만약 동일한 이름의 전역 변수에 접근하고 싶다면 범위 지정 연산자(scope resolution operator)::(더블 콜론)를 사용해야 합니다.

예제

#include <iostream>
using namespace std;

// 전역 변수 선언
int g = 20;

int main () {
    // 지역 변수 선언
    int g = 10;

    cout << g;   // 지역 변수 출력
    cout << ::g; // 전역 변수 출력
    return 0;
}

실행 결과

10
20

위 예제에서 cout << g;는 함수 내부에 선언된 지역 변수 g(값 10)를 출력하고, cout << ::g;는 범위 지정 연산자를 통해 전역 변수 g(값 20)를 출력합니다.

정리

  • 지역 변수는 선언된 함수나 블록 내부에서만 유효합니다.
  • 전역 변수는 프로그램 전체에서 접근 가능하며, 프로그램 종료 시까지 값을 유지합니다.
  • 이름이 같은 경우 지역 변수가 우선되며, 전역 변수에 접근하려면 :: 연산자를 사용합니다.