본문 바로가기
C

Local vs Global Variable (지역 vs 전역 + static 변수)

by yororing 2024. 6. 24.

00 개요

  • 목적: C 언어를 공부하는데 지역 변수, 전역 변수 용어들이 등장해서 정리하고자 함
  • C 언어에서 변수는 크게 지역, 전역, 그리고 static 변수로 나뉨
  • 각 변수의 종류는 변수의 범위와 수명 등에서 차이가 있음 

01 지역 변수 (Local Variable)

1. 정의

  • 특정 블록 { }에서 선언된 변수, 블록 내에서만 사용 가능
  • 보통 함수 내에서 사용됨
  • 지역 변수는 함수가 호출되면 생성되며 함수 종료 시 소멸됨 (메모리 stack영역에 저장되기 때문)

2. 예시

#include <stdio.h>

void test() {
    int num = 10; // 지역 변수 num 선언
    printf("%d\n", num);
}

int main() {
    test();
    printf("%d\n", num);
    return 0;
}

  • 소스 코드 및 결과 설명:
    • test() 함수 내에서 선언된 'num'은 지역 변수임
    • 즉, 'num'은 함수 내에서만 사용할 수 있으므로 main() 함수에서는 'num' 사용 불가
    • 그러므로 printf()에서 컴파일 에러(C2065)가 발생한 것

02 전역 변수 (Global Variable)

1. 정의

  • 모든 함수가 접근 가능한 변수
  • 함수 외부에서 선언되며 초기화하지 않으면 0으로 초기화됨
  • 프로그램이 시작될 때 생성되며 프로그램 종료될 때까지 유지됨
  • 즉, 프로그램 모든 곳에서 쓰이며 메모리 data영역에 저장

2. 예시

#include <stdio.h>

int num = 10; // 전역 변수 num 선언

void test() {
    printf("%d\n", num);
}

int main() {
    test();
    printf("%d\n", num);
    return 0;
}

  • 소스 코드 및 결과 설명:
    • 'num'은 전역 변수로 선언됨
    • main() 함수와 test() 함수에서 모두 사용 가능

03 정적 변수 (Static Variable)

1. 정의 

  • 지역 변수 또는 전역 변수 앞에 'static' 키워드를 붙여서 선언함
  • static 지역 변수: 함수 내에서 선언되어 함수 호출이 끝나도 값을 유지함
  • static 전역 변수: 다른 전역 변수와 마찬가지로 프로그램이 종료될 때까지 값을 유지함
  • static 변수는 선언된 블록에서만 사용 가능, 다른 함수나 블록에서는 접근 불가 
  • static 변수는 전역 변수와 마찬가지로 초깃값을 지정하지 않으면 0으로 초기화됨 

2. 예시

#include <stdio.h>

void test() {
    static int num = 10; // static 지역 변수 num 선언
    num++;
    printf("%d\n", num);
}

int main() {
    test();
    test();
    test();
    return 0;
}

  • 소스 코드 및 결과 설명:
    • test() 함수 내에서 선언된 'num'은 static 지역 변수임
    • 이 변수는 함수가 호출될 때 생성되며 함수가 종료되어도 유지됨
    • 따라서 test() 함수에서 세 번 호출 시 num의 값이 11에서 13까지 증가함

04 변수 선택 시 고려 사항

  • 변수 선언 시 변수가 어디에서 사용될지, 어떤 범위와 수명을 가져야 하는지를 고려하여 변수 종류를 선택해야 함
  • 지역 변수는 함수 내에서만 사용되는 데이터를 저장할 때, 전역 변수는 여러 함수에서 공유해야 하는 데이터를 저장할 때, static 변수는 함수 내에서 유지되어야 하는 데이터를 저장할 때 사용됨
  • 전역 변수와 static 변수는 메모리 공간을 차지하므로 변수의 개수가 많아지면 전체 프로그램의 메모리 사용량이 증가함, 또한 어디에서나 접근 가능하기에 다른 함수/블록에서 값 변경 시 예기치 않은 결과 발생 가능
    • → 전역 변수와 static 변수는 최소한으로 사용하는 것이 좋음
  • 지역 변수는 함수 내에서만 사용되기에 변수의 사용 범위가 한정되어 있어 다른 함수나 블록에서 접근 불가
    • → 변수 값을 보호하는데 도움이 됨
    • 함수가 호출될 때마다 생성되고 소멸되므로 메모리 사용량도 적음

 

참조

  1. https://brightbetween.tistory.com/100
  2.  

 

'C' 카테고리의 다른 글

# 및 ## (C 언어 매크로 연산자)  (0) 2024.06.25
자료형 종류 (C 언어)  (0) 2024.06.24
extern와 static (키워드)  (0) 2024.06.24
Declaration vs Definition (선언과 정의)  (0) 2024.06.24
typedef (자료형 별칭 부여 키워드)  (0) 2024.06.21