프로그래밍에서 범위(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)를 출력합니다.
정리
- 지역 변수는 선언된 함수나 블록 내부에서만 유효합니다.
- 전역 변수는 프로그램 전체에서 접근 가능하며, 프로그램 종료 시까지 값을 유지합니다.
- 이름이 같은 경우 지역 변수가 우선되며, 전역 변수에 접근하려면
::연산자를 사용합니다.