Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 함수 내 정적 변수의 수명은 얼마나 될까?

정적 변수(static variable)static 키워드를 사용하여 선언된 변수를 말합니다. 정적 변수의 메모리 공간은 프로그램 전체 실행 과정에서 단 한 번만 할당되며, 이 공간은 프로그램이 종료될 때까지 계속 사용됩니다.

정적 변수는 한 번 선언되면 프로그램이 실행되는 동안 계속 존재합니다. 따라서 정적 변수의 수명(lifetime)은 곧 프로그램의 수명과 같습니다.

예제 코드

다음은 정적 변수의 동작을 보여주는 간단한 C++ 프로그램입니다.

#include <iostream>
using namespace std;

void func() {
    static int num = 1;
    cout << "num의 값: " << num << "\n";
    num++;
}

int main() {
    func();
    func();
    func();
    return 0;
}

실행 결과

num의 값: 1
num의 값: 2
num의 값: 3

코드 분석

위 프로그램의 동작을 자세히 살펴보겠습니다.

func() 함수 내부

func() 함수 안에서 num은 정적 변수로 선언되어 있으며, 초기화는 프로그램 실행 중 단 한 번만 수행됩니다. 이후 함수가 호출될 때마다 현재 num의 값을 출력하고 값을 1씩 증가시킵니다.

void func() {
    static int num = 1;   // 최초 호출 시에만 초기화됨
    cout << "num의 값: " << num << "\n";
    num++;
}

만약 num이 일반 지역 변수였다면 함수가 호출될 때마다 매번 1로 초기화되어 항상 같은 값이 출력되었을 것입니다. 하지만 정적 변수는 이전 호출에서 변경된 값을 그대로 유지합니다.

main() 함수 내부

main() 함수에서는 func()를 세 번 호출합니다. 그럼에도 불구하고 num의 메모리 할당과 초기화는 첫 번째 호출 시 한 번만 이루어지며, 두 번째와 세 번째 호출에서는 기존 값을 이어서 사용합니다.

int main() {
    func();   // num = 1 출력 후 2로 증가
    func();   // num = 2 출력 후 3으로 증가
    func();   // num = 3 출력 후 4로 증가
    return 0;
}

정리

  • 정적 변수는 static 키워드로 선언하며, 메모리는 프로그램 시작 시 한 번만 할당됩니다.
  • 정적 변수의 수명은 프로그램 전체 실행 기간과 동일합니다.
  • 함수 내 정적 변수는 함수가 여러 번 호출되더라도 초기화는 한 번만 수행되며, 값은 호출 사이에 유지됩니다.
  • 다만 정적 변수의 범위(scope)는 여전히 해당 함수 내부로 제한되므로, 함수 외부에서는 접근할 수 없습니다.