C 언어의 정적(Static) 변수란?
정적 변수(static variable)는 프로그램 실행 중 단 한 번만 초기화되며, 컴파일러가 프로그램이 종료될 때까지 해당 변수를 메모리에 유지합니다. 정적 변수는 함수 내부 또는 외부 어디에서든 정의할 수 있으며, 선언된 블록 안에서만 접근 가능한 지역성을 가집니다.
정적 변수의 핵심 특징을 정리하면 다음과 같습니다.
- 초기화 횟수: 프로그램 실행 도중 단 한 번만 초기화됩니다.
- 생명 주기: 프로그램이 종료될 때까지 메모리에 유지됩니다.
- 기본값: 별도로 값을 지정하지 않으면 0으로 초기화됩니다.
- 접근 범위: 함수 내부에 선언하면 해당 블록에, 함수 외부에 선언하면 파일 전체로 범위가 제한됩니다.
정적 변수 선언 문법
C 언어에서 정적 변수를 선언하는 기본 문법은 다음과 같습니다.
static datatype variable_name = value;
각 구성 요소의 의미는 아래와 같습니다.
datatype − 변수의 자료형을 나타냅니다. 예: int, char, float 등
variable_name − 사용자가 직접 지정하는 변수의 이름입니다.
value − 변수를 초기화하는 값입니다. 생략하면 기본값인 0으로 초기화됩니다.
예제 코드
다음은 C 언어에서 정적 변수를 사용하는 예제입니다. 자동(auto) 변수와 정적 변수의 차이를 함께 확인해 보세요.
#include <stdio.h>
int main() {
auto int a = -28;
static int b = 8;
printf("자동 변수 a의 값 : %d\n", a);
printf("정적 변수 b의 값 : %d\n", b);
if(a != 0)
printf("정적 변수와 자동 변수의 합 : %d\n", (b + a));
return 0;
}
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
자동 변수 a의 값 : -28
정적 변수 b의 값 : 8
정적 변수와 자동 변수의 합 : -20
정리
정적 변수는 함수가 여러 번 호출되더라도 이전 값이 그대로 유지되므로, 호출 횟수 카운팅이나 상태 저장 등에 유용하게 활용됩니다. 일반 자동 변수와 달리 스택이 아닌 데이터 영역에 저장되기 때문에 프로그램 전체 실행 기간 동안 유효하다는 점을 꼭 기억하세요.