C언어 static 변수 - 값이 유지되는 변수
코딩C언어
읽는데 4분 소요
처음 쓰여진 날: 2026-02-03
마지막 수정일: 2026-02-03
조회수: 8
요약
C언어 static 변수의 개념과 동작 방식을 알아봅니다. 함수 내 static 변수가 호출 간에 값을 유지하는 원리, 지역 변수와의 차이점을 정보처리기사 실기 기출문제와 함께 정리합니다.
static 변수 핵심 정리
| 특성 | 지역 변수 | static 변수 |
|---|---|---|
| 초기화 | 함수 호출마다 초기화 | 프로그램 시작 시 한 번만 초기화 |
| 값 유지 | 함수 종료 시 소멸 | 함수 종료 후에도 값 유지 |
| 저장 위치 | 스택(Stack) | 데이터(Data) 영역 |
| 기본값 | 쓰레기 값 | 0 |
static 변수란?
static은 "정적인", "고정된"이라는 뜻입니다. static 변수는 메모리에 고정된 위치에 저장되어, 함수가 종료되어도 값이 사라지지 않고 유지되는 변수입니다.
| 용어 | 의미 |
|---|---|
| static (정적) | 고정된 위치에 유지됨 |
| dynamic (동적) | 필요할 때 생성/소멸됨 |
c
코드 하이라이팅 중...
| 구분 | 첫 번째 호출 | 두 번째 호출 | 세 번째 호출 |
|---|---|---|---|
static int x = 0 | 2 | 4 | 6 |
int x = 0 | 2 | 2 | 2 |

static 변수 vs 지역 변수
지역 변수 (매번 초기화)
c
코드 하이라이팅 중...
지역 변수는 함수가 호출될 때마다 새로 생성되고, 종료되면 소멸합니다.
static 변수 (값 유지)
c
코드 하이라이팅 중...
static 변수는 프로그램 시작 시 한 번만 초기화되고, 이후에는 이전 값이 유지됩니다.

동작 원리
메모리 저장 위치
| 변수 종류 | 저장 위치 | 특징 |
|---|---|---|
| 지역 변수 | 스택(Stack) | 함수 호출/종료 시 생성/소멸 |
| static 변수 | 데이터(Data) 영역 | 프로그램 실행 동안 유지 |
| 전역 변수 | 데이터(Data) 영역 | 프로그램 실행 동안 유지 |
static 변수는 전역 변수처럼 데이터 영역에 저장되지만, 접근 범위는 함수 내부로 제한됩니다.
초기화 시점
c
코드 하이라이팅 중...
static int count = 0; 코드는 컴파일 시점에 처리되어, 프로그램이 시작할 때 데이터 영역에 0으로 초기화됩니다. 함수가 호출될 때마다 이 초기화 코드가 실행되는 것이 아닙니다.
static 변수 초기화는 한 번만 실행됩니다
static int x = 0; 코드가 함수 안에 있어도, 함수가 여러 번 호출될 때 이 초기화가 반복되지 않습니다. 프로그램 시작 시 한 번만 초기화됩니다.
static 변수 vs 전역 변수
둘 다 프로그램 실행 동안 값이 유지되지만, 접근 범위가 다릅니다.
c
코드 하이라이팅 중...
| 구분 | 전역 변수 | static 변수 |
|---|---|---|
| 값 유지 | O | O |
| 어디서든 접근 | O | X (선언된 함수 내부만) |
| 이름 충돌 위험 | 있음 | 없음 |
실행 흐름 추적
24년 3회 기출문제를 예시로 실행 흐름을 추적해보겠습니다.
c
코드 하이라이팅 중...
변수 구분
main의x: 지역 변수, 루프마다 1씩 증가 (출력에 영향 없음)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