목차

▼ 내리기

필요성

지역이 사라져도 변수는 유지되어야 해!

지역 변수, 전역 변수 말고 c++에는 이상한 녀석이 하나 더 있다. 정적 변수라는 것이 그것인데, 아니 이게 왜 필요하지..?

함수를 호출했는데, 이 함수를 몇 번 호출했는지 알고 싶다. 그러면, 사실 가능한 방법은 전역변수로 이 함수가 호출되었을 때 값을 증가시키면 된다.

int count = 0;
void call(){
    count++;
    cout << conut << '\n';
}
int main(){
    call();
    call();
    call();
    call();
    call();
    return 0;
}

하지만, 이렇게 되면 프로그램의 안정성이 너무 떨어진다. 이름이 겹치는 문제도 생기고, 해당 변수의 역할은 함수의 호출 횟수만을 체크하는 것인데, 너무 범위가 크게 잡혀있기 때문이다. 결국 Scope를 줄이고 싶은 것이다.

이런 경우 static을 적어주면, 전역변수처럼 행동하되, 이 녀석의 Scope는 해당 함수를 호출했을 때로 줄어들게 된다.

void call(){
    static int count = 0;
    count++;
    cout << conut << '\n';
}
int main(){
    call();
    call();
    call();
    call();
    call();
    return 0;
}

특징 정리

  1. 메모리 공간에서 정적 변수는 전역 변수가 저장되는 Data 영역에 저장된다.
  2. 초기값을 주지 않을 경우 항상 0으로 초기화 되며 프로그램을 실행시킬 때 한번만 초기화 된다.
    • 이 부분은 매우 중요한데, 실제로 함수가 실행될 때, 값이 변하는 것 같지만, 영향을 주지 않는다. 그렇기 때문에 원하는 결과인 1, 2, 3, 4 ,5가 출력된다.