// education

변수의 범주와 기억 부류 (지역, 전역, 정적 변수)

변수는 선언되는 위치에 따라 **사용할 수 있는 범위(Scope)**와 **메모리에 살아있는 기간(Lifetime)**이 결정됩니다.


1. 지역 변수 vs 전역 변수 vs 정적 변수

변수 종류 선언 위치 유효 범위 (Scope) 생성 및 소멸 시점 (Lifetime)
지역 변수 (Local) 함수 또는 {} 중괄호 내부 선언된 {} 블록 내부 블록 시작 시 생성, 블록 끝날 때 소멸
전역 변수 (Global) 모든 함수 외부 프로그램 코드 전체 프로그램 시작 시 생성, 종료 시 소멸
정적 변수 (static) 함수 내부 (static 키워드) 선언된 {} 블록 내부 프로그램 시작 시 생성, 종료 시 소멸 (값 유지)

2. 정적 변수 (static) 의 동작 코드

지역 변수처럼 블록 안에서만 접근 가능하지만, 함수가 끝나도 메모리에서 사라지지 않고 값이 계속 유지됩니다.

#include <stdio.h>

void count_up(void) {
    static int count = 0; // 최초 1회만 초기화됨
    count++;
    printf("방문 횟수: %d\n", count);
}

int main(void) {
    count_up(); // 1
    count_up(); // 2
    count_up(); // 3
    return 0;
}

3. 메모리 영역 구증 (Memory Stack / Heap / Data / Code)


4. 자주 묻는 질문 (Q&A)

Q. 편하다고 전역 변수를 막 많이 써도 되나요? A. 전역 변수는 어디서나 접근하여 수정할 수 있어 어디서 값이 바뀌었는지 추적하기 힘든 side-effect 오류를 유발합니다. 따라서 꼭 필요한 경우가 아니면 지역 변수를 사용하는 것이 바람직합니다.

← 이전함수 기초와 모듈화 프로그래밍 다음 →1차원 및 다차원 배열 (Array)