정적(static) 변수는 전역 변수와 지역 변수의 중간쯤 되는 특성을 가진다. 정적변수도 전역정적 변수와 지역 정적 변수로 나뉘지만 여기에서는 지역 정적 변수에 대해서만 설명하도록 하겠다.
지역 정적 변수는 함수의 수행이 끝나더라도 그 값을 유지시켜야만 할 때 사용되는 것이다. 즉, 이 변수는 함수의 수행이 끝나더라도 소멸되지 않으며 그 값을 유지하고 있으며 프로그램의 수행이 끝날 때까지 그 값을 유지하는 변수이다.
정적 변수는 static이라는 키워드를 데이터형 앞에 붙여주면 되는데 다음과 같이 정의한다.
함수() {static 데이터형 변수명1, 변수명2, ...;} |
이렇게 정의된 변수들은 프로그램의 수행이 시작될 때 생성되며 함수의 수행이 끝나더라도 그 값이 유지되며 다음에 호출되었을 때 그 유지된 값을 이용할 수 있다. 프로그램이 실행될 때 생성되고 끝날 때 까지 보존이 된다는 점에서 전역 변수와 라이프 싸이클이 같지만 선언된 함수 내부에서만 사용할 수 있다는 점이 다르다.
다음의 예에서 간단한 사용법을 보였다.
#include <stdio.h>void countUp(int);int main(void) {int iIn;do {printf("Input an interger number : ");scanf("%d", &iIn);countUp(iIn);}while (0<=iIn && iIn<=10);}void countUp(int iR) {static int iCount = 0; //❶printf("%d번째 수는 %d.\n", ++iCount, iR);} |
실행결과:
Input an interger number : 81번째 수는 8.Input an interger number : 42번째 수는 4.Input an interger number : 103번째 수는 10.Input an interger number : 04번째 수는 0.Input an interger number : -15번째 수는 -1. |
이 예제는 사용자가 입력한 숫자가 0이상 10이하라면 다시 입력받고 현재까지 몇 개가 입력되었는가를 세는 간단한 프로그램이다. 이 예제의 countUp()함수 안의 ❶번 줄에서 iCount 변수가 정적 변수로 선언되었다. 따라서 이 함수가 종료되더라도 그 값은 계속 유지하며 이 사실은 실행 결과에서 확인할 수 있다.
내부 정적 변수도 내부 변수이므로 그것이 위치한 함수 내부에서만 접근할 수 있다는 사실은 유의하자.
C++ 강좌 전체 목록 >>>
댓글 없음:
댓글 쓰기