c++/기초

정적 변수

코드망령 2026. 5. 29. 20:57

정적 변수 (Static Variable)

정적 변수는 프로그램이 종료될 때까지 메모리에 유지되는 변수이다.

일반 지역 변수와 달리 함수가 종료되어도 값이 사라지지 않는다.


특징

  • 프로그램 시작 시 생성된다.
  • 프로그램 종료 시 제거된다.
  • 한 번만 생성된다.
  • 함수가 종료되어도 값이 유지된다.
  • 데이터 영역(Data Segment)에 저장된다.
  • 접근 범위(Scope)는 선언된 위치에 따라 결정된다.

기본 문법

static 자료형 변수이름;

예시

static int Count = 0;

일반 지역 변수와 비교

일반 지역 변수

void Func()
{
    int x = 0;

    x++;

    std::cout << x << std::endl;
}

호출

Func();
Func();
Func();

결과

1
1
1

함수가 호출될 때마다 새로 생성되고 함수가 끝나면 제거된다.


정적 변수

void Func()
{
    static int x = 0;

    x++;

    std::cout << x << std::endl;
}

호출

Func();
Func();
Func();

결과

1
2
3

한 번만 생성되기 때문에 이전 값이 유지된다.


메모리 구조

void Func()
{
    static int x = 0;
}

x는 함수 내부에 선언되어 있지만 스택 영역이 아닌 데이터 영역에 저장된다.

Data Segment
┌─────────┐
│ x = 0   │
└─────────┘

프로그램이 종료될 때까지 제거되지 않는다.


접근 범위 (Scope)

정적 변수는 수명(Lifetime)과 접근 범위(Scope)를 구분해서 생각해야 한다.

void Func()
{
    static int x = 0;
}

수명

프로그램 시작
↓
생성
↓
프로그램 종료
↓
제거

접근 범위

Func 함수 내부에서만 접근 가능

즉,

void Func()
{
    static int x = 0;
}
int main()
{
    x = 10; // 오류
}

함수 밖에서는 사용할 수 없다.


정적 변수 사용 예시

함수 호출 횟수 세기

void Func()
{
    static int Count = 0;

    Count++;

    std::cout << "호출 횟수 : "
              << Count
              << std::endl;
}

호출

Func();
Func();
Func();

결과

호출 횟수 : 1
호출 횟수 : 2
호출 횟수 : 3

일반 지역 변수와 정적 변수 비교

항목 지역 변수 정적 변수
생성 시점 함수 진입 프로그램 시작
제거 시점 함수 종료 프로그램 종료
저장 위치 Stack Data Segment
값 유지
접근 범위 선언된 블록 내부 선언된 블록 내부

정리

  • 정적 변수는 프로그램 종료 시까지 메모리에 유지되는 변수이다.
  • 한 번만 생성된다.
  • 함수가 종료되어도 값이 사라지지 않는다.
  • 데이터 영역(Data Segment)에 저장된다.
  • 접근 범위는 선언된 블록 내부로 제한된다.
  • 일반 지역 변수와 달리 이전 값이 유지된다.
  • 함수 호출 횟수 저장, 상태 유지 등에 자주 사용된다.

'c++ > 기초' 카테고리의 다른 글

포인터  (0) 2026.05.31
매크로  (0) 2026.05.31
오버로딩  (0) 2026.05.29
형변환  (0) 2026.05.29
전역변수와 지역변수  (0) 2026.05.29