개요
C언어에서 변수를 선언하면 그 변수의 데이터가 메모리에 저장된다. 이때 변수를 선언한 위치와 특정 문법에 따라 저장된 데이터의 생존시간(lifetime)에 영향을 주게 된다. 이는 프로그램의 메모리 운용 방식과 유지 보수 및 효율성에 매우 중요하다.
오늘은 선언위치에 따른 변수의 종류 4가지를 알아보자
1. 지역 변수
지역 변수는 함수나 블록( 중괄호 {}를 뜻한다. ) 내부에서 선언된 변수로, 선언된 블록 내에서만 접근할 수 있다. 이 변수는 함수나 블록이 실행되는 동안에만 메모리에 존재하며, 해당 블록이 종료되면 자동으로 메모리에서 해제된다.
즉 블록이나 함수를 벗어나게되면 메모리에 지워지므로 그 변수에 접근을 할 수가 없게 된다.
스택 영역에 저장된다. 스택 영역이 뭔지 모르겠다면
2024.05.28 - [프로그래밍/컴퓨터 및 언어의 이해] - 메모리의 구조
메모리의 구조
개요우리가 프로그램을 실행할때 컴퓨터는 그 프로그램의 정보를 읽어 메모리에 로드한다. 이때 컴퓨터는 효율적인 활용을 위해 메모리에 각각의 공간을 설정하고 그 공간이 서로 상호작용을
carmen8740.tistory.com
이 글을 참고해 보자
예시)
#include <stdio.h>
void printLocal()
{
int localVar = 10; // 지역 변수
printf("지역 변수 값: %d\n", localVar);
}
int main()
{
printLocal();
// printf("%d", localVar); // 오류 발생: 'localVar'은 main 함수에서 접근할 수 없음
return 0;
}
2. 전역 변수
전역 변수는 모든 함수 외부에서 선언된 변수로, 프로그램 내 모든 함수에서 접근이 가능하다. 프로그램이 실행되는 동안 메모리에 지속적으로 존재하며, 프로그램의 모든 부분에서 동일한 값을 공유한다.
프로그램 종료 시까지 그 파일 내에서 데이터가 지워지지 않는 것은 강력한 기능이나 그만큼 이름 중복이나 메모리관리가 어렵다는 단점이 있다.
데이터 영역에 저장된다.
예시)
#include <stdio.h>
int globalVar = 20; // 전역 변수
void printGlobal()
{
printf("전역 변수 값: %d\n", globalVar);
}
int main()
{
printGlobal();
globalVar = 30; // 전역 변수 값 수정
printGlobal();
return 0;
}
3. 정적 지역 변수
정적 지역 변수는 함수 내에서 static 키워드를 사용하여 선언된 변수로, 일반적인 지역 변수처럼 함수 내에서만 접근할 수 있다. 그러나 이 변수는 함수가 호출될 때마다 초기화되지 않고, 함수가 호출될 때마다 그 이전의 값을 유지한다.
즉, 기억은 하되 블록 외부에서 접근은 불가능한 변수라 볼 수 있다.
데이터 영역에 저장된다.
예시)
#include <stdio.h>
void counter()
{
static int count = 0; // 정적 지역 변수
count++;
printf("카운트: %d\n", count);
}
int main()
{
counter();
counter();
counter();
return 0;
}
4. 정적 전역 변수
정적 전역 변수는 static 키워드를 사용하여 함수 외부에 선언된 변수로, 해당 변수가 선언된 파일 내에서만 접근할 수 있다. 즉, 다른 파일에서 이 변수에 접근할 수 없다. 이를 통해 전역 변수의 접근 범위를 제한하여 보다 안전한 코드 작성을 할 수 있다.
데이터 영역에 저장된다.
예시)
#include <stdio.h>
static int staticGlobalVar = 100; // 정적 전역 변수
void printStaticGlobal()
{
printf("정적 전역 변수 값: %d\n", staticGlobalVar);
}
int main()
{
printStaticGlobal();
return 0;
}
결론
종류 | 접근 범위 | 생존시간 | 저장 위치 |
지역 변수 | 변수가 선언된 블록 | 함수나 블록이 실행되는 동안 | 스택 영역 |
전역 변수 | 프로그램 내 모든 영역 | 프로그램이 종료될 때까지 | 데이터 영역 |
정적 지역 변수 | 변수가 선언된 블록 | 프로그램이 종료될 때까지 | 데이터 영역 |
정적 전역 변수 | 변수가 선언된 파일 | 프로그램이 종료될 때까지 | 데이터 영역 |
변수의 접근 번위와 생존시간의 개념을 파악하고 이해하는것은 굉장히 중요하다. 특히 전역 변수의 경우 초급자가 그 강력한 기능을 남발하여 여러 오류가 발생하는일이 비일 비재하다. 변수의 선언위치를 잘 파악하고 적절히 사용하여 코드의 안정성과 효율성을 높이도록 하자.
'프로그래밍 > C언어' 카테고리의 다른 글
C언어 - 동적할당 (2) | 2024.10.22 |
---|---|
C언어 - 포인터 (3) | 2024.09.05 |
C언어 - 사용자 정의 자료형 (1) | 2024.09.03 |
C언어 - 함수 (2) | 2024.07.08 |
C언어 - 표준 입출력 스트림 (0) | 2024.07.06 |