상상해 보자: 너희 집에는 여러 개의 서랍장이 있고, 그 안에 다양한 물건을 보관하지? 그리고 집 어딘가에 중요한 물건을 넣어두는 금고가 있을 거야.
서랍장: 서랍장은 각 방마다 있고, 각 서랍장에는 그 방에서만 사용하는 물건들을 넣어두지. 이 서랍장이 바로 지역변수와 비슷해.
금고: 금고는 집 어디에서든 누구나 열어서 사용할 수 있는 공간이야. 이 금고가 바로 전역변수와 비슷해.
2. 컴퓨터 속의 서랍장과 금고
C언어에서도 이런 서랍장과 금고가 있어.
지역변수: 함수라는 특별한 공간 안에서만 사용되는 변수야. 함수가 끝나면 사라져 버려. 마치 방을 나갈 때 서랍장에 넣어둔 물건을 다시 꺼내지 않고 그대로 두는 것과 같아.
전역변수: 프로그램 어디서든 사용할 수 있는 변수야. 프로그램이 시작될 때 만들어지고 프로그램이 끝날 때까지 계속 존재해. 마치 집 어디서든 사용할 수 있는 금고와 같아.
#include <stdio.h>
// 전역 변수 (금고)
int global_money = 1000; // 전 세계 어디서든 사용 가능한 돈
void myRoom() { // 내 방
int myToy = 5; // 내 방에 있는 장난감 (지역 변수)
printf("내 방에 있는 장난감: %d개\n", myToy);
printf("내가 가진 용돈: %d원\n", global_money);
}
int main() {
int myBook = 3; // 내 책상 위에 있는 책 (지역 변수)
printf("내 책상 위에 있는 책: %d권\n", myBook);
printf("내가 가진 용돈: %d원\n", global_money);
myRoom();
return 0;
}
설명:
global_money: 프로그램 어디서든 사용할 수 있는 용돈 (전역 변수)
myToy,myBook: 각각 내 방과 책상에서만 사용하는 물건 (지역 변수)
myRoom 함수: 내 방에서 일어나는 일들을 나타내는 함수
4. 정리
지역 변수: 함수 안에서만 사용되는 변수. 함수가 끝나면 사라짐.
전역 변수: 프로그램 어디서든 사용할 수 있는 변수. 프로그램이 시작될 때 만들어지고 끝날 때까지 유지됨.
5. 왜 지역 변수와 전역 변수를 나눠서 사용할까?
정리하기 쉽다: 각 함수마다 필요한 변수만 사용하면 프로그램을 이해하기 쉽다.
오류를 줄일 수 있다: 전역 변수를 많이 사용하면 어디서 값이 변경될지 알 수 없어서 프로그램이 복잡해지고 오류가 발생할 가능성이 커진다.
6. 중요!
전역 변수는 너무 많이 사용하면 안 돼: 마치 금고에 너무 많은 물건을 넣어두면 정리가 안 되고 찾기 어려운 것처럼, 전역 변수를 많이 사용하면 프로그램이 복잡해져서 관리하기 어려워진다.
지역 변수를 잘 활용하자: 각 함수에서 필요한 변수만 사용하면 프로그램을 깔끔하게 만들 수 있다.
뭘 좀 아시는 분은 아래 예제를 분석해 봅시다.!!
#include <stdio.h>
// 전역 변수 선언
int global_var = 10;
void myFunction() {
// 전역 변수를 직접 사용
printf("함수 내 전역 변수 global_var: %d\n", global_var);
}
int main() {
// 지역 변수 선언
int local_var = 20;
global_var = global_var + 100; // 전역 변수 값 변경
printf("지역 변수 local_var: %d\n", local_var);
printf("전역 변수 global_var: %d\n", global_var);
// 함수 호출
myFunction();
return 0;
}
myFunction 함수 내에서 local_var = 30; 부분을 삭제하고, global_var를 직접 사용하여 출력하도록 변경했습니다.
이렇게 수정하면 myFunction 함수 내에서도 main 함수에서 변경된 global_var의 값 110이 출력됩니다.
결과:
지역 변수 local_var: 20
전역 변수 global_var: 110
함수 내 전역 변수 global_var: 110
핵심:
전역 변수는 프로그램 어디에서든 접근하고 변경할 수 있습니다.
함수 내에서 전역 변수를 사용하려면 전역 변수의 이름을 직접 사용해야 합니다.
함수 내에서 같은 이름의 변수를 선언하면 지역 변수로 취급되어 전역 변수와는 별개로 관리됩니다.
추가 설명:
전역 변수의 단점: 전역 변수는 프로그램의 어느 부분에서든 값이 변경될 수 있기 때문에 예기치 못한 문제를 발생시킬 수 있습니다. 가능한 한 지역 변수를 사용하여 코드의 가독성을 높이고 오류를 줄이는 것이 좋습니다.
static 변수: 함수 내에서 선언되지만 함수 호출 사이에도 값이 유지되는 변수입니다. 전역 변수와 지역 변수의 중간적인 성격을 가지고 있습니다.
결론:
위와 같이 코드를 수정하면 myFunction 함수 내에서도 global_var의 값이 110으로 정확하게 출력됩니다. 전역 변수와 지역 변수의 개념을 명확하게 이해하고 적절하게 사용하는 것이 중요합니다.