C언어 static 변수 - 값이 유지되는 변수
선수학습(1개)
요약
C언어 static 변수의 개념과 동작 방식을 알아봅니다. 함수 내 static 변수가 호출 간에 값을 유지하는 원리, 지역 변수와의 차이점을 정보처리기사 실기 기출문제와 함께 정리합니다.
static 변수 핵심 정리
아래에서 하나씩 배울 내용을 미리 정리한 표입니다.
| 개념 | 설명 | 예시 |
|---|---|---|
| static 선언 | 변수 앞에 static 키워드 추가 | static int x = 0; |
| 한 번만 초기화 | 프로그램 시작 시 한 번만 초기화됨 | 두 번째 호출에서도 이전 값 유지 |
| 값 유지 | 함수 종료 후에도 값이 사라지지 않음 | 호출마다 2 → 4 → 6 |
| 저장 위치 | 데이터(Data) 영역에 저장 | 지역 변수(스택)와 다른 위치 |
| 기본값 0 | 초기화하지 않아도 자동으로 0 | static int x; → x는 0 |
| 접근 범위 | 선언된 함수 안에서만 접근 가능 | 전역 변수와 달리 함수 밖 접근 불가 |
static 변수란? 쌩기초
자료형과 함수를 먼저 배우셨다면 이 페이지를 이해하는 데 어려움이 없을 것입니다.
static은 "정적인", "고정된"이라는 뜻입니다. static 변수는 메모리에 고정된 위치에 저장되어, 함수가 종료되어도 값이 사라지지 않고 유지되는 변수입니다.
| 용어 | 의미 |
|---|---|
| static (정적) | 고정된 위치에 유지됨 |
| dynamic (동적) | 필요할 때 생성/소멸됨 |
| 구분 | 첫 번째 호출 | 두 번째 호출 | 세 번째 호출 |
|---|---|---|---|
static int x = 0 | 2 | 4 | 6 |
int x = 0 | 2 | 2 | 2 |

static 변수 vs 지역 변수 기초
지역 변수 (매번 초기화)
지역 변수는 함수가 호출될 때마다 새로 생성되고, 종료되면 소멸합니다. 초기화하지 않으면 쓰레기 값 1이 들어있을 수 있으므로 반드시 초기값을 지정해야 합니다.
static 변수 (값 유지)
static 변수는 프로그램 시작 시 한 번만 초기화되고, 이후에는 이전 값이 유지됩니다.

동작 원리 기초
메모리 저장 위치
메모리 구조에서 스택(Stack)은 함수 호출 시 임시로 사용되는 공간이고, 데이터(Data) 영역은 프로그램 시작부터 끝까지 유지되는 공간입니다.
| 변수 종류 | 저장 위치 | 특징 |
|---|---|---|
| 지역 변수 | 스택(Stack) | 함수 호출/종료 시 생성/소멸 |
| static 변수 | 데이터(Data) 영역 | 프로그램 실행 동안 유지 |
| 전역 변수 | 데이터(Data) 영역 | 프로그램 실행 동안 유지 |
static 변수는 전역 변수처럼 데이터 영역에 저장되지만, 접근 범위는 함수 내부로 제한됩니다.
초기화 시점
static int count = 0; 코드는 컴파일(코드를 실행 가능한 프로그램으로 변환하는 과정) 시점에 처리되어, 프로그램이 시작할 때 데이터 영역에 0으로 초기화됩니다. 프로그램을 실행하는 시점(런타임)에 함수가 호출될 때마다 이 초기화 코드가 실행되는 것이 아닙니다.
static 변수 vs 전역 변수 기초
둘 다 프로그램 실행 동안 값이 유지되지만, 접근 범위가 다릅니다.
| 구분 | 전역 변수 | static 변수 |
|---|---|---|
| 값 유지 | O | O |
| 어디서든 접근 | O | X (선언된 함수 내부만) |
| 이름 충돌 위험 | 있음 | 없음 |
실행 흐름 추적 심화
24년 3회 기출문제를 예시로 실행 흐름을 추적해보겠습니다.
변수 구분
main의x: 지역 변수, 루프마다 1씩 증가합니다.sum계산에 사용되지 않으므로 출력 결과에 영향을 주지 않습니다.increase의x: static 변수, 호출마다 2씩 증가하며 값 유지
반복별 실행
| 반복 | increase 호출 전 static x | increase 실행 후 static x | sum |
|---|---|---|---|
| i=0 | 0 | 2 | 0 + 2 = 2 |
| i=1 | 2 | 4 | 2 + 4 = 6 |
| i=2 | 4 | 6 | 6 + 6 = 12 |
| i=3 | 6 | 8 | 12 + 8 = 20 |
출력: 20
정보처리기사 실기 대비 문제
Footnotes
-
이전에 메모리에 남아 있던 알 수 없는 값입니다. 예를 들어 32767, -858993460 등 예측할 수 없는 숫자가 들어있을 수 있습니다. ↩