Nagie's DevStory
[C] 37. 변수의 생명 주기와 사용 범위 본문
728x90
C에서 변수는 선언한 위치에 따라 접근 범위와 변수의 수명이 달라진다.
총 3가지의 구분 방법이 있으며 각각의 특징은 아래와 같다.
변수의 구분 | 선언 위치 |
지역 변수 ( LOCAL ) | 함수 안에 선언 |
전역 변수 ( GLOBAL ) | 함수 밖에 선언 |
정적 변수 ( STATIC ) | static 키워드를 사용해 함수 안과 밖에 선언 |
표를 봐도 이해가 힘들 경우 아래의 코드를 참고하면 된다.
#include <stdio.h>
int g_nGlobal = 30; //전역 변수
static int g_nStGlobal = 50; //정적 전역변수
int main () {
int nLocal = 10; //지역 변수
static int nStLocal = 99; //정적 지역변수
}
선언 위치까지는 알겠는데 사용 범위가 궁금할 수도 있다.
지역 변수는 함수 안에서만 사용할 수 있으며 해당 함수 밖에선 사용할 수 없다.
전역 변수는 프로젝트 전체에서 사용할 수 있으며 잘 사용만 한다면 좋은 결과를 나타낼 수 있지만
프로젝트 전체에서 사용 가능하다는 특성 덕에 버그를 만들어 내기도 한다.
사용 시 주의가 필요하다.
정적 변수는 선언된 함수 안이나 선언된 소스 파일에서만 사용할 수 있다.
간단하게 표로 나타내면 아래와 같다.
변수의 구분 | 사용 범위 |
지역 변수 ( LOCAL ) | 함수 안에서만 사용가능 |
전역 변수 ( GLOBAL ) | 프로젝트 전체에서 사용 가능 |
정적 변수 ( STATIC ) | 선언된 함수 안 또는 소스 파일에서만 사용 가능 |
그리고 각각의 변수들은 생성과 소멸 시기가 다르며
이를 변수의 생명주기(라이프 사이클)라 부른다.
우선 지역 변수는 함수 호출 시 메모리에 생성되며 함수가 종료되면 소멸한다.
전역 변수는 프로그램을 실행하면 메모리에 생성되며 프로그램이 종료 될 때까지 소멸하지 않는다.
정적 변수는 어디에 선언하는지에 따라 생성 시기와 소멸 시기가 다르다.
즉 생성은 선언 위치에 따라 지역 변수나 전역변수처럼 생성 될 순 있지만
소멸 시기는 프로그램이 종료 될 때까지 소멸하지 않는다.
또한 각각의 변수는 초깃값을 가지고 있다.
지역 변수는 선언 시 무조건 초기화를 해줘야 하고
전역변수와 정적변수는 초기화를 하지 않아도 숫자 0이 초깃값으로 지정된다.
728x90
Comments