C언어를 학습하다 보면 변수(variable)의 종류에 대해 헷갈리는 경우가 많습니다. 특히 지역변수(Local Variable), 전역변수(Global Variable), 정적변수(Static Variable)는 각각 다른 특성을 가지기 때문에 정확히 이해하는 것이 중요합니다. 이 글에서는 각 변수의 개념과 차이점을 상세히 설명하고, 예시 코드와 함께 한눈에 볼 수 있는 표로 정리해드리겠습니다.
1. 지역변수(Local Variable)
개념
지역변수는 특정 함수 또는 블록 내에서 선언되며, 해당 블록이 끝나면 소멸하는 변수입니다. 지역변수는 함수가 호출될 때 생성되고, 함수가 종료되면 메모리에서 사라집니다.
특징
- 생성 시점: 함수가 호출될 때 생성
- 소멸 시점: 함수가 종료될 때 소멸
- 사용 범위: 변수가 선언된 블록 내부에서만 사용 가능
- 메모리 할당 위치: 스택(Stack) 영역
예시 코드
#include <stdio.h>
void myFunction() {
int localVar = 10; // 지역변수 선언
printf("지역변수의 값: %d\n", localVar);
}
int main() {
myFunction();
// printf("%d", localVar); // 오류: 지역변수는 함수 외부에서 접근 불가능
return 0;
}
위 코드에서 localVar는 myFunction 함수 내에서 선언된 지역변수로, 함수 외부에서는 사용할 수 없습니다.
2. 전역변수(Global Variable)
개념
전역변수는 함수 외부에서 선언된 변수로, 프로그램 전체에서 접근할 수 있는 변수입니다. 모든 함수가 전역변수에 접근할 수 있습니다.
특징
- 생성 시점: 프로그램 시작 시 생성
- 소멸 시점: 프로그램 종료 시 소멸
- 사용 범위: 프로그램 전체
- 메모리 할당 위치: 데이터(Data) 영역
예시 코드
#include <stdio.h>
int globalVar = 20; // 전역변수 선언
void myFunction() {
printf("전역변수의 값: %d\n", globalVar);
}
int main() {
myFunction();
globalVar = 30;
printf("변경된 전역변수의 값: %d\n", globalVar);
return 0;
}
위 코드에서 globalVar는 모든 함수에서 접근할 수 있는 전역변수입니다.
주의: 전역변수는 여러 함수에서 값을 변경할 수 있기 때문에 프로그램이 복잡해질 경우 추적이 어려워질 수 있습니다.
3. 정적변수(Static Variable)
3.1 정적 지역변수 (Static Local Variable)
정적 지역변수는 지역변수처럼 특정 함수 또는 블록 내에서 선언되지만, 프로그램이 종료될 때까지 메모리에서 소멸되지 않고 값을 유지하는 변수입니다. static 키워드를 사용하여 선언합니다.
특징
- 생성 시점: 프로그램 시작 시 생성
- 소멸 시점: 프로그램 종료 시 소멸
- 사용 범위: 변수가 선언된 블록 내부에서만 사용 가능 (지역적 사용 범위)
- 메모리 할당 위치: 데이터(Data) 영역
- 초기화 여부: 자동으로 0으로 초기화됨
예시 코드
#include <stdio.h>
void myFunction() {
static int staticVar = 0; // 정적 지역변수 선언 및 초기화
staticVar++;
printf("정적 지역변수의 값: %d\n", staticVar);
}
int main() {
myFunction();
myFunction();
myFunction();
return 0;
}
위 코드에서 staticVar는 함수가 여러 번 호출되어도 값을 유지하기 때문에 출력 결과는 다음과 같습니다:
정적 지역변수의 값: 1
정적 지역변수의 값: 2
정적 지역변수의 값: 3
3.2 정적 전역변수 (Static Global Variable)
정적 전역변수는 전역변수처럼 함수 외부에서 선언되지만, static 키워드를 사용하여 선언하면 해당 변수가 선언된 파일 내부에서만 접근 가능하도록 제한됩니다. 이를 통해 전역변수의 사용 범위를 파일 단위로 제한하여 다른 파일에서의 의도치 않은 접근을 방지할 수 있습니다.
특징
- 생성 시점: 프로그램 시작 시 생성
- 소멸 시점: 프로그램 종료 시 소멸
- 사용 범위: 선언된 파일 내부에서만 사용 가능
- 메모리 할당 위치: 데이터(Data) 영역
예시 코드
#include <stdio.h>
static int staticGlobalVar = 100; // 정적 전역변수 선언
void myFunction() {
printf("정적 전역변수의 값: %d\n", staticGlobalVar);
}
int main() {
myFunction();
staticGlobalVar = 200;
printf("변경된 정적 전역변수의 값: %d\n", staticGlobalVar);
return 0;
}
위 코드에서 staticGlobalVar는 동일 파일 내의 모든 함수에서 접근할 수 있지만, 다른 파일에서는 접근할 수 없습니다.
정적 전역변수의 장점: 전역변수의 범위를 제한하여 변수의 충돌을 방지하고, 코드의 모듈성을 향상시킵니다.
4. 지역변수, 전역변수, 정적변수의 차이점 비교
구분 | 지역 변수 | 전역 변수 | 정적 지역 변수 | 정적 전역 변수 |
생성 시점 | 함수 호출 시 | 프로그램 시작 시 | 프로그램 시작 시 | 프로그램 시작 시 |
소멸 시점 | 함수 종료 시 | 프로그램 종료 시 | 프로그램 종료 시 | 프로그램 종료 시 |
사용 범위 | 선언된 블록 내부 | 프로그램 전체 | 선언된 블록 내부 | 선언된 파일 내부 |
메모리 영역 | 스택(Stack) | 데이터(Data) | 데이터(Data) | 데이터(Data) |
초기화 여부 | 수동 초기화 필요 | 자동 초기화 (0) | 자동 초기화 (0) | 자동 초기화 (0) |
5. 정리
- 지역변수는 함수 내에서 선언되며 함수가 끝나면 사라지는 변수입니다.
- 전역변수는 프로그램 전체에서 접근할 수 있는 변수로, 프로그램이 종료될 때까지 유지됩니다.
- 정적 지역변수는 특정 블록 내에서 선언되지만, 프로그램이 종료될 때까지 값을 유지합니다.
- 정적 전역변수는 파일 단위로 접근이 제한된 전역변수로, 외부 파일과의 변수 충돌을 방지할 수 있습니다.
C언어에서 변수의 종류와 특징을 명확히 이해하면 코드 작성 시 메모리 관리와 변수 사용 범위를 더 효과적으로 제어할 수 있습니다.
이 글이 도움이 되셨다면, 좋아요와 댓글 부탁드립니다! 😄
'C 언어' 카테고리의 다른 글
C언어 조건문 총정리 - if, else if, else, switch, 중첩 if문, 삼항연산자 예시코드 (0) | 2024.12.23 |
---|---|
C언어 인라인(inline) 함수란? - 정의, 예시, 장단점 (0) | 2024.12.23 |
매크로(Macro) 함수 - 코딩 테스트 시간 단축을 위한 마법 (0) | 2024.12.22 |
C언어 매크로(Macro)의 모든 것 - #define, 개념, 동작원리, 성능, 장점, 다양한 예시, 주의사항 (0) | 2024.12.22 |
비트연산 - 코딩테스트 시간단축을 위한 마법 (1) | 2024.12.22 |
댓글