C언어 static 변수 - 값이 유지되는 변수

코딩C언어
읽는데 6분 소요
처음 쓰여진 날: 2026-02-03
마지막 수정일: 2026-03-21
조회수: 264

요약

C언어 static 변수의 개념과 동작 방식을 알아봅니다. 함수 내 static 변수가 호출 간에 값을 유지하는 원리, 지역 변수와의 차이점을 정보처리기사 실기 기출문제와 함께 정리합니다.

static 변수 핵심 정리

아래에서 하나씩 배울 내용을 미리 정리한 표입니다.

개념설명예시
static 선언변수 앞에 static 키워드 추가static int x = 0;
한 번만 초기화프로그램 시작 시 한 번만 초기화됨두 번째 호출에서도 이전 값 유지
값 유지함수 종료 후에도 값이 사라지지 않음호출마다 2 → 4 → 6
저장 위치데이터(Data) 영역에 저장지역 변수(스택)와 다른 위치
기본값 0초기화하지 않아도 자동으로 0static int x; → x는 0
접근 범위선언된 함수 안에서만 접근 가능전역 변수와 달리 함수 밖 접근 불가

static 변수란? 쌩기초

자료형함수를 먼저 배우셨다면 이 페이지를 이해하는 데 어려움이 없을 것입니다.

static은 "정적인", "고정된"이라는 뜻입니다. static 변수는 메모리에 고정된 위치에 저장되어, 함수가 종료되어도 값이 사라지지 않고 유지되는 변수입니다.

용어의미
static (정적)고정된 위치에 유지됨
dynamic (동적)필요할 때 생성/소멸됨
c
코드 하이라이팅 중...
구분첫 번째 호출두 번째 호출세 번째 호출
static int x = 0246
int x = 0222
static 변수 vs 일반 변수 비교
static 변수는 값이 유지되어 2 → 4 → 6으로 누적되지만, 일반 변수는 매번 0에서 시작해서 항상 2입니다.

static 변수 vs 지역 변수 기초

지역 변수 (매번 초기화)

c
코드 하이라이팅 중...

지역 변수는 함수가 호출될 때마다 새로 생성되고, 종료되면 소멸합니다. 초기화하지 않으면 쓰레기 값 1이 들어있을 수 있으므로 반드시 초기값을 지정해야 합니다.

static 변수 (값 유지)

c
코드 하이라이팅 중...

static 변수는 프로그램 시작 시 한 번만 초기화되고, 이후에는 이전 값이 유지됩니다.

static 변수와 지역 변수 비교
지역 변수는 매번 0에서 시작하지만, static 변수는 이전 값에서 이어집니다.


동작 원리 기초

메모리 저장 위치

메모리 구조에서 스택(Stack)은 함수 호출 시 임시로 사용되는 공간이고, 데이터(Data) 영역은 프로그램 시작부터 끝까지 유지되는 공간입니다.

변수 종류저장 위치특징
지역 변수스택(Stack)함수 호출/종료 시 생성/소멸
static 변수데이터(Data) 영역프로그램 실행 동안 유지
전역 변수데이터(Data) 영역프로그램 실행 동안 유지

static 변수는 전역 변수처럼 데이터 영역에 저장되지만, 접근 범위는 함수 내부로 제한됩니다.

초기화 시점

c
코드 하이라이팅 중...

static int count = 0; 코드는 컴파일(코드를 실행 가능한 프로그램으로 변환하는 과정) 시점에 처리되어, 프로그램이 시작할 때 데이터 영역에 0으로 초기화됩니다. 프로그램을 실행하는 시점(런타임)에 함수가 호출될 때마다 이 초기화 코드가 실행되는 것이 아닙니다.


static 변수 vs 전역 변수 기초

둘 다 프로그램 실행 동안 값이 유지되지만, 접근 범위가 다릅니다.

c
코드 하이라이팅 중...
구분전역 변수static 변수
값 유지OO
어디서든 접근OX (선언된 함수 내부만)
이름 충돌 위험있음없음


실행 흐름 추적 심화

24년 3회 기출문제를 예시로 실행 흐름을 추적해보겠습니다.

c
코드 하이라이팅 중...

변수 구분

  • mainx: 지역 변수, 루프마다 1씩 증가합니다. sum 계산에 사용되지 않으므로 출력 결과에 영향을 주지 않습니다.
  • increasex: static 변수, 호출마다 2씩 증가하며 값 유지

반복별 실행

반복increase 호출 전 static xincrease 실행 후 static xsum
i=0020 + 2 = 2
i=1242 + 4 = 6
i=2466 + 6 = 12
i=36812 + 8 = 20

출력: 20


정보처리기사 실기 대비 문제


Footnotes

  1. 이전에 메모리에 남아 있던 알 수 없는 값입니다. 예를 들어 32767, -858993460 등 예측할 수 없는 숫자가 들어있을 수 있습니다.


관련 글

(34개)
제목태그시험
C언어 구조체 배열
C언어
-
C언어 구조체 포인터
C언어
-
C언어 함수 프로토타입
C언어
-