C에서 정적 변수 사용

안녕하세요, 초보 프로그래머 여러분! 오늘 우리는 C世界里의 정적 변수에 대한 흥미로운 여정을 시작해보겠습니다. 여러분의 친절한 이웃 컴퓨터 과학 교사로서, 저는 명확한 설명과 많은 예제를 통해 이 개념을 안내해드리겠습니다. 그럼 시작해보겠습니다!

C - Static Variables

정적 변수는 무엇인가요?

정적 변수는 C에서 특별한 속성을 가진 변수입니다. 프로그램의 "장기 기억"을 상상해보세요. 일반 변수는 함수 호출마다 생기고 사라지지만, 정적 변수는 프로그램의 전체 수명 동안 계속 남아 있습니다.

정적 변수의 특징

정적 변수를 특별하게 만드는 주요 특징을 살펴보겠습니다:

특징 설명
수명 프로그램 실행 전체 기간 동안 존재
범위 선언된 블록에 제한됨
기본 값 명시적으로 초기화되지 않으면 0으로 초기화
저장소 데이터 세그먼트에 저장, 스택이 아님
유지 함수 호출 사이에 값 유지

정적 변수 선언 방법

정적 변수 선언은 간단합니다. 변수 선언 전에 static 키워드를 추가하시면 됩니다. 기본 문법은 다음과 같습니다:

static data_type variable_name = initial_value;

예를 들어:

static int count = 0;

C에서 정적 변수의 예제

정적 변수가 어떻게 작동하는지 이해하기 위해 몇 가지 예제를 살펴보겠습니다.

예제 1: 함수 호출 카운터

#include <stdio.h>

void countCalls() {
static int count = 0;
count++;
printf("이 함수는 %d번 호출되었습니다\n", count);
}

int main() {
for (int i = 0; i < 5; i++) {
countCalls();
}
return 0;
}

이 예제에서, 우리는 countCalls() 함수를 만들어 이 함수가 얼마나 많이 호출되었는지 추적합니다. static int count 변수는 함수 호출 사이에 값을 유지하여 정확하게 카운트할 수 있습니다.

이 프로그램을 실행하면 다음과 같은 출력을 볼 수 있습니다:

이 함수는 1번 호출되었습니다
이 함수는 2번 호출되었습니다
이 함수는 3번 호출되었습니다
이 함수는 4번 호출되었습니다
이 함수는 5번 호출되었습니다

예제 2: 고유 ID 생성기

#include <stdio.h>

int generateID() {
static int id = 100;
return ++id;
}

int main() {
for (int i = 0; i < 5; i++) {
printf("생성된 ID: %d\n", generateID());
}
return 0;
}

이 예제에서, 우리는 정적 변수를 사용하여 간단한 ID 생성기를 만들었습니다. generateID() 함수가 호출될 때마다 정적 변수 id를 증가시켜 고유한 ID를 반환합니다.

출력:

생성된 ID: 101
생성된 ID: 102
생성된 ID: 103
생성된 ID: 104
생성된 ID: 105

정적 변수를 함수로 전달

정적 변수를 함수로 전달할 수 있을까요? 답은 예입니다! 하지만 중요한 점은 정적 변수의 값을 전달하는 것이지, 변수 자체를 전달하는 것이 아님을 기억하세요.

다음은 예제입니다:

#include <stdio.h>

void modifyValue(int x) {
x = x + 10;
printf("함수 내부: %d\n", x);
}

int main() {
static int num = 5;
printf("함수 호출 전: %d\n", num);
modifyValue(num);
printf("함수 호출 후: %d\n", num);
return 0;
}

출력:

함수 호출 전: 5
함수 내부: 15
함수 호출 후: 5

정적 변수 nummain() 함수 내에서 변경되지 않았습니다. 이는 modifyValue() 함수 내에서 값을 수정했지만, num 자체가 아니라 값을 전달했기 때문입니다.

정적 변수와 전역 변수의 유사성

정적 변수와 전역 변수는 몇 가지 유사성을 공유하며, 이를 때로는 혼동의 소지가 있습니다. 이를 정리해보겠습니다:

요소 정적 변수 전역 변수
수명 프로그램 실행 전체 기간 동안 프로그램 실행 전체 기간 동안
기본 값 초기화되지 않으면 0으로 초기화되지 않으면 0으로
저장소 데이터 세그먼트 데이터 세그먼트
범위 선언된 블록에 제한됨 프로그램 전체에서 접근 가능

주요 차이점은 범위에 있습니다. 전역 변수는 프로그램의 모든 부분에서 접근할 수 있지만, 정적 변수는 선언된 블록에만 제한됩니다.

결론

그럼 여러분, 우리는 C의 정적 변수 세계를 여행했습니다. 그들의 독특한 특징에서부터 실용적인 예제까지 많은 내용을 다루었습니다. 기억하시면 정적 변수는 프로그래밍 세계의 코끼리와도 같습니다. 장기 기억을 가지고 있으며, 전체 공연 동안 남아 있습니다!

프로그래밍 여정을 계속하면서, 여러분은 정적 변수가 많은 상황에서 매우 유용하다는 것을 발견할 것입니다. 함수 호출 사이의 상태를 유지하거나 카운터를 만드는 데 적합합니다.

계속 연습하고, 계속 코딩하고, 가장 중요한 것은 C를 즐기세요! 다음에 만날 때까지, 행복하게 코딩하세요!

Credits: Image by storyset