C++ 전역변수, 지역변수, 정적변수
1. 개요
1.1 문서 개요
이 문서는 C++ 언어에서 사용되는 변수 유형 중 전역변수(Global Variable), 지역변수(Local Variable), **정적변수(Static Variable)**에 대해 설명합니다. 각각의 변수는 메모리 저장 위치, 수명, 접근 범위, 초기화 방식에서 차이가 있으며, 프로그램의 구조적 설계와 자원 효율에 영향을 미칩니다.
이 개념들은 함수 또는 클래스 내부·외부에서의 변수 선언과 관련되어 있으며, C++의 스코프 및 저장 영역 분류(Storage Class)와 밀접하게 연결되어 있습니다.
2. 내용
2.1 전역변수 (Global Variable)
2.1.1 정의 및 특성
전역변수는 함수 외부에서 선언된 변수로, 프로그램 전체에서 접근할 수 있습니다. 일반적으로 파일 상단 또는 모든 함수 외부에서 정의되며, 데이터 세그먼트(Data Segment) 영역에 저장됩니다.
- 수명: 프로그램 시작 시 생성되어 종료 시까지 유지됩니다.
- 접근 범위: 선언된 파일 전체 및
extern
을 통해 다른 파일에서도 접근 가능 - 초기화: 명시적으로 초기화하지 않으면 0으로 자동 초기화
2.1.1.1 예시
#include <iostream>
int globalVar = 10;
void printGlobal() {
std::cout << "Global Variable: " << globalVar << std::endl;
}
int main() {
globalVar += 5;
printGlobal(); // 출력: Global Variable: 15
return 0;
}
2.2 지역변수 (Local Variable)
2.2.1 정의 및 특성
지역변수는 함수, 제어문 블록(if
, for
등) 내에서 선언되는 변수입니다. 메모리의 스택(Stack) 영역에 저장되며, 해당 블록이 끝나면 소멸합니다.
- 수명: 선언된 블록 진입 시 생성, 블록 종료 시 소멸
- 접근 범위: 선언된 블록 내부
- 초기화: 자동으로 초기화되지 않으며 명시적 초기화 필요
2.2.1.1 예시
#include <iostream>
void exampleFunction() {
int localVar = 5;
std::cout << "Local Variable: " << localVar << std::endl;
}
int main() {
exampleFunction(); // 출력: Local Variable: 5
// std::cout << localVar; // 오류: localVar는 main에서 접근 불가
return 0;
}
2.3 정적변수 (Static Variable)
2.3.1 정의 및 특성
정적변수는 static
키워드로 선언된 변수로, 지역 또는 전역에서 사용 가능합니다. 저장 위치는 **데이터 세그먼트(Data Segment)**이며, 초기화는 한 번만 수행됩니다.
- 지역 정적변수: 선언된 함수 내에서만 접근 가능하지만, 수명은 프로그램 종료 시까지 유지됩니다.
- 전역 정적변수: 다른 파일에서 접근 불가 (링크 범위 제한)
- 초기화: 한 번만 수행되며, 초기화하지 않으면 0으로 초기화됨
2.3.1.1 지역 정적변수 예시
#include <iostream>
void counterFunction() {
static int counter = 0;
counter++;
std::cout << "Counter: " << counter << std::endl;
}
int main() {
counterFunction(); // 출력: Counter: 1
counterFunction(); // 출력: Counter: 2
counterFunction(); // 출력: Counter: 3
return 0;
}
2.3.1.2 전역 정적변수 예시
// file1.cpp
static int fileScopeVar = 100; // 다른 파일에서 접근 불가
2.4 비교 정리
2.4.1 변수 유형별 비교표
항목 | 전역변수 | 지역변수 | 정적변수 |
---|---|---|---|
선언 위치 | 함수 외부 | 함수 또는 블록 내부 | 함수 내부 (지역) 또는 외부 (전역) |
저장 영역 | 데이터 세그먼트 | 스택 | 데이터 세그먼트 |
수명 | 프로그램 종료 시까지 | 블록 종료 시까지 | 프로그램 종료 시까지 |
접근 범위 | 전체 파일 및 extern | 선언된 블록 내부 | 선언된 블록 또는 파일 내부 |
초기화 여부 | 자동(0) | 수동 | 자동(0), 단 1회 초기화 |
3. 마무리
전역변수, 지역변수, 정적변수는 C++에서 변수의 접근성과 수명을 제어하는 중요한 구성 요소입니다. 전역변수는 광범위한 접근성을 제공하지만 관리에 유의해야 하며, 지역변수는 블록 내 제한된 수명으로 안전성을 확보합니다. 정적변수는 지역성과 장기적인 상태 유지를 동시에 가능하게 하여 특수한 목적에 적합합니다.
이러한 변수 유형은 프로그램의 메모리 구조 및 동작 흐름을 이해하고 제어하는 데 필수적인 기초 개념입니다.