본문 바로가기
카테고리 없음

지역변수 (Local Variables), 전역변수 (Global Variables)

by Bright_Between 2023. 5. 2.
반응형

C 언어에서 변수는 크게 지역변수, 전역변수, 그리고 static 변수로 나뉩니다. 각각의 변수 타입은 변수의 범위와 수명 등에서 차이가 있으며, 이에 따라 어떤 변수를 사용해야 하는지 선택해야 합니다.

 


## 지역변수 (Local Variables)

지역변수는 특정 블록에서 선언된 변수로, 블록 내에서만 사용할 수 있습니다. 보통 함수 내에서 많이 사용됩니다. 지역변수는 함수가 호출되면 생성되며, 함수가 종료되면 소멸됩니다. 이는 스택 메모리에 저장되기 때문입니다.

 

#include <stdio.h>

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

int main() {
  test();
  // printf("%d\n", num); // error: ‘num’ undeclared
  return 0;
}



위 코드에서 `test()` 함수 내에서 선언된 `num`은 지역변수입니다. 이 변수는 함수 내에서만 사용할 수 있으므로, `main()` 함수에서는 `num`을 사용할 수 없습니다. 따라서 주석 처리된 `printf()`에서는 컴파일 에러가 발생합니다.

 

 


## 전역변수 (Global Variables)

전역변수는 모든 함수가 접근할 수 있는 변수입니다. 프로그램이 시작될 때 생성되며, 프로그램이 종료될 때까지 유지됩니다. 전역변수는 함수 외부에서 선언되며, 초기화하지 않으면 0으로 초기화됩니다. 전역변수는 메모리의 데이터 섹션에 저장됩니다.

#include <stdio.h>

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

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

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

위 코드에서 `num`은 전역변수로 선언되었습니다. 이 변수는 `main()` 함수와 `test()` 함수에서 모두 사용할 수 있으며, 초기값이 지정되지 않았지만 0으로 초기화됩니다. 따라서 `test()` 함수와 `main()` 함수에서 모두 `num`의 값을 출력할 수 있습니다.

 

 

 

## static 변수

static 변수는 지역변수나 전역변수 앞에 `static` 키워드를 붙여서 선언합니다. static 지역변수는 함수 내에서 선언되어 함수 호출이 끝나도 값을 유지합니다. static 전역변수는 다른 전역변수와 마찬가지로 프로그램이 종료될 때까지 값을 유지합니다. static 변수는 선언된 블록에서만사용할 수 있으며, 다른 함수나 블록에서는 접근할 수 없습니다. static 변수는 전역변수와 마찬가지로 초기값을 지정하지 않으면 0으로 초기화됩니다.


#include <stdio.h>

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

int main() {
  test(); // 11
  test(); // 12
  test(); // 13
  return 0;
}

위 코드에서 `test()` 함수 내에서 선언된 `num`은 static 지역변수입니다. 이 변수는 함수가 호출될 때 생성되며, 함수가 종료되어도 유지됩니다. 따라서 `test()` 함수를 세 번 호출하면 `num`의 값이 11에서 13까지 증가합니다.

 

 


## 변수 타입 선택하기

변수를 선언할 때는 변수가 어디에서 사용될지, 어떤 범위와 수명을 가져야 하는지를 고려하여 변수 타입을 선택해야 합니다. 지역변수는 함수 내에서만 사용되는 데이터를 저장할 때, 전역변수는 여러 함수에서 공유해야 하는 데이터를 저장할 때, static 변수는 함수 내에서 유지되어야 하는 데이터를 저장할 때 사용됩니다. 

전역변수와 static 변수는 메모리 공간을 차지하므로, 변수의 개수가 많아지면 전체 프로그램의 메모리 사용량이 증가합니다. 따라서 전역변수와 static 변수는 최소한으로 사용하는 것이 좋습니다. 또한 전역변수와 static 변수는 어디에서나 접근할 수 있기 때문에, 다른 함수나 블록에서 값을 변경하면 예기치 않은 결과가 발생할 수 있습니다. 따라서 전역변수와 static 변수는 가능한 한 사용을 피하는 것이 좋습니다.

지역변수는 함수 내에서만 사용되기 때문에, 변수의 사용 범위가 한정되어 있어 다른 함수나 블록에서 접근할 수 없습니다. 이는 변수 값을 보호하는 데 도움이 됩니다. 지역변수는 함수가 호출될 때마다 생성되고 소멸되므로, 메모리 사용량도 적게 듭니다. 따라서 지역변수를 사용하는 것이 좋습니다.

변수를 선택할 때는 해당 변수의 범위와 수명, 그리고 메모리 사용량 등을 고려하여 적절한 변수를 선택해야 합니다.

반응형

댓글