본문으로 건너뛰기

변수의 영역

1. 핵심 개념: 변수의 범위 (Variable Scope)

변수의 범위는 변수가 선언된 위치에 따라 프로그램 내에서 해당 변수에 접근하고 사용할 수 있는 영역을 의미합니다.
C 언어에서는 크게 두 가지 주요 변수 범위가 있습니다: 지역 변수전역 변수.


1.1. 지역 변수 (Local Variables)

  • 정의:
    함수 내부 또는 블록 안에서 선언되는 변수입니다.

  • 유효 기간:
    선언된 함수나 블록이 종료되면 소멸됩니다.

  • 유효 범위:
    해당 함수 또는 블록 내에서만 유효합니다.

  • 예시:
    main() 함수 내에서 선언된 변수는 main()이 종료될 때까지,
    중괄호 {} 블록 내에서 선언된 변수는 해당 블록이 종료될 때까지 유효합니다.

  • 중요:

    저장된 주소가 다르면 변수의 이름이 같아도 다른 값을 가집니다.
    즉, 다른 블록 내에서 동일한 이름의 지역 변수를 선언할 수 있으며, 이들은 서로 독립적인 변수로 취급됩니다.


1.2. 전역 변수 (Global Variables)

  • 정의:
    함수 외부에서 선언하여 프로그램의 어느 곳에서든 접근할 수 있는 변수입니다.

  • 유효 기간:
    프로그램이 종료될 때까지 유효합니다.

  • 유효 범위:
    프로그램 전체에서 유효하며, 모든 함수에서 공유하여 사용할 수 있습니다.


2. 핵심 개념: 변수의 저장 유형 지정자 (Storage Class Specifiers)

저장 유형 지정자는 변수의 저장 방식, 유효 범위, 생존 기간을 제어합니다.

2.1. auto

  • 특징:
    보통 생략되며, 지역 변수 선언 시 사용됩니다. (지역 변수의 기본 저장 유형)
  • 작동 방식:
    함수나 블록이 실행될 때 메모리가 할당되고, 종료 시 해제됩니다.

2.2. static

  • 특징:
    • 지역 변수가 정적으로 변환됨
    • 프로그램 종료 전까지 변수의 변경된 값을 저장함
    • 함수가 여러 번 호출되어도 값이 유지됨
  • 작동 방식:
    한 번 초기화된 후 함수 호출이 끝나도 값이 유지됩니다.
    (특정 함수의 호출 간에 상태를 유지해야 할 때 유용)

2.3. register

  • 특징:
    변수가 CPU 레지스터에 저장되어 빠르게 처리됨
  • 작동 방식:
    컴파일러에게 해당 변수를 가능한 한 CPU 레지스터에 저장하도록 요청
    (실제 레지스터에 저장될지는 컴파일러의 판단에 따름)

3. 코드 예시 분석

아래 코드는 변수의 범위와 저장 유형 지정자의 동작을 명확하게 보여줍니다.

#include <stdio.h>

int i = 1; // 1) 전역 변수

int main() {
int i = 1; // 2) 자동 변수 (main 함수의 지역 변수)
printf("첫번째 i=%d\n", i); // main 내의 i 출력 (값: 1)

{
register int i = 2; // 3) 레지스터 변수 (블록 내의 지역 변수)
printf("두번째 i=%d\n", i); // 블록 내의 i 출력 (값: 2)
}

printf("첫번째 i=%d\n", i); // 블록을 벗어나면 다시 main 내의 i 출력 (값: 1)
return 0;
}

void iChange() {
static int i = 1; // 4) static 변수 (iChange 함수의 지역 변수, 값이 유지됨)
printf("i=%d\n", i);
i++;
}

void iGlobal() {
printf("global i= %d\n", i); // 전역 변수 i에 접근 (값: 1)
}

예시 설명

  • 전역 변수 i=1 : 프로그램 전체에서 유효. iGlobal() 함수에서 접근 가능
  • main 함수 내의 지역 변수 i=1 : main 함수 내에서만 유효, 전역 변수와 이름이 같아도 다른 메모리 공간 사용
  • 블록 내의 지역 변수 register int i=2 : 해당 블록 내에서만 유효, 블록을 벗어나면 소멸
  • iChange 함수 내의 static 변수 : 함수 내에서만 유효하지만, static 덕분에 함수 호출이 끝나도 값이 유지됨

4. time.h 라이브러리 (참고)

C 언어에서 날짜와 시간을 얻거나 조작할 수 있는 표준 라이브러리입니다.

  • 주요 함수
    • clock() : 프로그램 시작부터 경과된 시간을 밀리초(ms) 단위로 반환
    • time_t time() : 현재 시간을 타임스탬프(Unix epoch 이후 초 단위)로 반환

정보 업데이트 로그 등에 적합합니다.


5. 결론

변수의 **유효 범위(지역/전역)**와 **저장 유형 지정자(auto, static, register)**는
C 프로그래밍에서 변수의 생명주기, 접근성 및 성능을 제어하는 데 필수적인 개념입니다.

  • 지역 변수는 함수나 블록 내에서 독립성을 보장
  • 전역 변수는 프로그램 전체에서 공유되는 데이터를 다룰 때 사용
  • static, register와 같은 저장 유형 지정자는 특정 변수에 대한 저장 방식과 생존 기간을 세밀하게 제어

이들을 이해하고 적절히 활용하는 것은 효율적이고 안정적인 코드를 작성하는 데 매우 중요합니다.