59. 정적 변수

A) 지역 변수는 호출할 때마다 새로 할당해서 이전 값을 사라지잖아. B) 지역에 정적 변수를 선언하면 값을 유지할 수 있어. 정적 변수도 프로그램 시작할 때 할당하고 끝날 때 해제하거든.

 

프로그래밍하다보면 전체 영역에서 사용하지 않지만 값을 유지해야 할 때가 있죠.
이럴 때는 전역 변수로 선언하면 사용하지 말아야 하는 곳에서 사용하는 실수를 범하여 버그를 만드는 원인이 되기도 한답니다.
그렇다고 지역 변수로 선언하면 함수 호출했을 때 메모리를 할당하고 끝나면 해제해서 다시 호출했을 때 이전의 값이 사라져요.

이 때 정적 변수를 선언하여 사용하면 문제를 해결할 수 있어요.
정적 변수를 선언할 때는 static 키워드를 붙여서 선언해요.
정적 변수는 특정 블록 내부에 변수를 선언해도 프로그램 시작할 때 메모리를 할당하고 해제해서 값을 유지할 수 있어요.

◈ 정적 변수와 지역 변수를 비교하는 예

◈ 실행 결과

 

그런데 전역에 정적 변수를 선언하는 것은 어떠한 의미일까요?
전역에 정적 변수를 선언하면 같은 프로그램의 다른 소스 파일에서는 접근할 수가 없어요.
만약 같은 이름으로 다른 소스 파일에서 전역에 변수를 선언하면 두 변수는 이름은 같아도 메모리는 독립적이예요.
따라서 서로 다른 데이터를 관리할 수 있어요.

◈ 블록 외부에 정적 변수를 선언한 예

◈ 실행 결과

자세한 설명은 하지 않을게요.
위 코드를 작성해서 실행해 보고 혼자 고민해 보세요.
물론 이러한 문법을 아는 것보다는 어떨 때 이러한 변수를 선언해서 사용하는 것이 좋을 지 판단하는 능력이 더 중요해요.
여기에서는 이에 관한 설명은 생략할게요.
힌트를 주자면 srand 함수와 rand 함수 사용법을 살펴보시고 이들의 동작 원리를 고민해 보세요.
자주 사용하는 문법 사항은 아니지만 라이브러리를 만들 때 종종 사용하는 문법이예요.


[C언어 무료 동영상 강의] 57.전역변수 58. 지역변수 59. 정적변수 60. 상수화변수