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

C++ 정적(static) 스토리지 클래스 완벽 이해하기

static 스토리지 클래스는 컴파일러에게 지역 변수를 스코프에 진입하고 벗어날 때마다 생성했다가 소멸시키는 대신, 프로그램이 실행되는 동안 계속 존재하도록 지시합니다. 따라서 지역 변수를 static으로 선언하면 함수가 여러 번 호출되더라도 그 값이 그대로 유지됩니다.

static 한정자는 전역 변수에도 적용할 수 있습니다. 이 경우 해당 변수의 접근 범위가 선언된 파일 내부로 제한되어, 다른 소스 파일에서는 참조할 수 없게 됩니다.

C++에서는 static을 클래스의 데이터 멤버에 적용할 때 특별한 의미를 갖습니다. 이 경우 해당 멤버의 복사본은 단 하나만 생성되며, 그 클래스의 모든 객체가 이 복사본을 공유하게 됩니다.

static의 주요 용도 정리

  • 지역 변수: 함수 호출 사이에 값이 유지되며, 초기화는 프로그램 실행 중 단 한 번만 수행됩니다.
  • 전역 변수: 변수의 범위가 선언된 소스 파일로 제한되어 외부 파일에서의 접근이 차단됩니다(내부 연결).
  • 클래스 멤버: 모든 객체가 하나의 복사본을 공유하며, 객체 생성 없이 클래스 이름으로 접근할 수 있습니다.

예제 코드

#include <iostream>

void func(void) {
static int i = 10; // 지역 static 변수
i++;
std::cout << "i is " << i;
std::cout << " and count is " << count << std::endl;
}

static int count = 6; /* 전역 변수 */

int main() {
while(count--) {
func();
}
}

코드 설명

func() 함수 안의 지역 변수 istatic으로 선언되었기 때문에 함수가 호출될 때마다 새로 생성되지 않고, 최초 호출 시 단 한 번만 10으로 초기화된 뒤 프로그램이 종료될 때까지 유지됩니다. 반면 전역 변수 countmain() 함수의 while 루프에서 매번 감소하면서 루프의 반복 횟수를 제어하는 역할을 합니다.

실행 결과

i is 10 and count is 5
i is 11 and count is 4
i is 12 and count is 3
i is 13 and count is 2
i is 14 and count is 1
i is 15 and count is 0

실행 결과에서 확인할 수 있듯이, i의 값은 함수 호출이 반복되어도 초기화되지 않고 계속 증가합니다. 이것이 바로 static 지역 변수가 함수 호출 간에 상태를 유지하는 핵심 특징입니다.