C언어 초급 - 9장: 함수 (Function) (9.3 지역 변수와 전역 변수)
2025. 2. 24. 11:34ㆍ프로그래밍 언어/C
9.3 지역 변수와 전역 변수
C 언어에서 변수의 범위(Scope)와 수명(Lifetime) 은 변수가 어디에서 선언되었는지에 따라 결정됩니다.
변수는 지역 변수(Local Variable), 전역 변수(Global Variable), static 변수로 나뉘며, 각각 다른 메모리 영역에서 관리됩니다.
1. 지역 변수 (Local Variable)
1.1 지역 변수란?
- 함수 또는 코드 블록 내에서 선언된 변수.
- 해당 함수 또는 코드 블록이 실행되는 동안만 존재.
- 함수가 종료되면 자동으로 소멸.
- 같은 이름의 변수를 여러 함수에서 선언할 수 있음 (독립적인 저장 공간 가짐).
1.2 지역 변수 예제
#include <stdio.h>
void printNumber() {
int num = 10; // 지역 변수
printf("printNumber()의 num: %d\n", num);
}
int main() {
int num = 20; // 다른 지역 변수 (main 함수 내부)
printf("main()의 num: %d\n", num);
printNumber(); // 함수 호출
return 0;
}
출력 결과
main()의 num: 20
printNumber()의 num: 10
📌 설명
- main() 함수와 printNumber() 함수 내의 num 변수는 서로 다른 변수.
- 각 함수가 실행될 때만 변수 num이 생성되고, 종료되면 사라짐.
2. 전역 변수 (Global Variable)
2.1 전역 변수란?
- 함수 외부에서 선언된 변수.
- 프로그램이 실행되는 동안 계속 유지됨.
- 모든 함수에서 접근 가능 (main() 포함).
- 프로그램 전체에서 공유되는 데이터 관리에 유용하지만,
무분별한 사용은 변수 충돌 및 예측하기 어려운 동작을 초래할 수 있음.
2.2 전역 변수 예제
#include <stdio.h>
int globalVar = 100; // 전역 변수
void printGlobalVar() {
printf("전역 변수: %d\n", globalVar);
}
int main() {
printf("전역 변수: %d\n", globalVar);
globalVar = 200; // 전역 변수 값 변경
printGlobalVar(); // 함수 호출
return 0;
}
출력 결과
전역 변수: 100
전역 변수: 200
📌 설명
- globalVar은 어느 함수에서도 접근 가능.
- main()에서 값을 변경하면 printGlobalVar()에서도 변경된 값이 유지됨.
2.3 지역 변수와 전역 변수의 차이
구분 | 지역 변수 (Local Variable) | 전역 변수 (Global Variable) |
선언 위치 | 함수 내부 | 함수 외부 |
유효 범위 | 선언된 함수 내부에서만 사용 가능 | 모든 함수에서 사용 가능 |
메모리 할당 | 함수 실행 시 생성, 종료 시 해제 | 프로그램 시작 시 생성, 종료 시 해제 |
사용 목적 | 특정 함수 내에서만 필요한 데이터 저장 | 프로그램 전체에서 공유할 데이터 저장 |
📌 전역 변수는 모든 함수에서 공유되므로, 남용하면 디버깅이 어려워질 수 있음 → 신중한 사용 필요.
3. static 변수의 개념
3.1 static 변수란?
- 한 번만 초기화되며, 프로그램이 종료될 때까지 값을 유지.
- 지역 변수로 선언하면, 함수가 종료되어도 값이 유지됨.
- 전역 변수로 선언하면, 해당 파일에서만 접근 가능 (외부 파일에서 접근 불가).
📌 즉, static 변수는 데이터가 유지되지만, 접근 범위가 제한됨.
3.2 static 지역 변수
#include <stdio.h>
void countCalls() {
static int count = 0; // static 지역 변수
count++;
printf("함수가 호출된 횟수: %d\n", count);
}
int main() {
countCalls();
countCalls();
countCalls();
return 0;
}
출력 결과
함수가 호출된 횟수: 1
함수가 호출된 횟수: 2
함수가 호출된 횟수: 3
📌 설명
- count 변수는 static으로 선언되어 함수 호출이 끝나도 값이 유지됨.
- 함수가 호출될 때마다 count 값이 증가.
3.3 static 전역 변수
#include <stdio.h>
static int staticVar = 50; // static 전역 변수
void printStaticVar() {
printf("static 전역 변수: %d\n", staticVar);
}
int main() {
printStaticVar();
return 0;
}
📌 static 전역 변수는 선언된 파일에서만 접근 가능
📌 다른 파일에서 접근할 수 없음 (파일 간 변수 충돌 방지)
4. 정리
변수 유형 | 선언 위치 | 유효 범위 | 수명 | 메모리 영역 |
지역 변수 | 함수 내부 | 해당 함수 내에서만 사용 가능 | 함수 실행 시 생성, 종료 시 해제 | 스택(Stack) |
전역 변수 | 함수 외부 | 모든 함수에서 접근 가능 | 프로그램 종료 시까지 유지 | 데이터(Data) 영역 |
static 지역 변수 | 함수 내부 | 해당 함수 내에서만 사용 가능 | 프로그램 종료 시까지 유지 | 데이터(Data) 영역 |
static 전역 변수 | 함수 외부 | 해당 파일 내에서만 접근 가능 | 프로그램 종료 시까지 유지 | 데이터(Data) 영역 |
📌 지역 변수는 함수 내에서만 사용 가능하고, 함수 종료 시 삭제됨
📌 전역 변수는 프로그램 종료 전까지 유지되며, 모든 함수에서 공유됨
📌 static 변수는 한 번만 초기화되고, 프로그램 종료 전까지 값이 유지됨
📌 static 전역 변수는 해당 파일에서만 접근 가능하여 변수 충돌을 방지할 수 있음
'프로그래밍 언어 > C' 카테고리의 다른 글
C언어 초급 - 10장: 포인터 (10.1 포인터의 개념) (0) | 2025.02.24 |
---|---|
C언어 초급 - 9장: 함수 (Function) (9.4 재귀 함수 (Recursive Function)) (0) | 2025.02.24 |
C언어 초급 - 9장: 함수 (Function) (9.2 매개변수와 반환값) (0) | 2025.02.24 |
C언어 초급 - 9장: 함수 (Function) (9.1 함수의 개념과 필요성) (0) | 2025.02.24 |
C언어 초급 - 8장: 배열과 문자열 (8.3 문자열 (char 배열)) (0) | 2025.02.23 |