C 프로그래밍 언어와 C++, 오브젝티브-C에서 static
은 정적 변수로서의 수명과 연계에 따라 달라지는 가시성을 모두 제어하는 예약어이다.
static
라는 단어는 자바와 같이 C의 영향을 받은 언어에서도 사용된다.
C에서 static
은 예약어인 extern
, auto
, register와 함께 기억 영역 분류에 해당한다. 모든 변수와 기능은 이러한 기억 영역 분류 가운데 하나를 가지고 있다. 선언에서 기억 영역 분류를 지정하지 않으면 상황에 따라 문맥 의존 디폴트가 사용된다.
extern
은 소스 파일의 모든 최상위 선언인 경우에 사용된다.auto
는 함수 본문에 선언된 변수인 경우에 사용한다.기억 영역 분류 | 수명 | 가시성 |
---|---|---|
extern
|
프로그램 실행 | 외부 (전체 프로그램) |
static
|
프로그램 실행 | 내부 (번역 단위만) |
auto , register
|
기능 실행 | (없음) |
이러한 언어에서 "정적 변수"라는 용어는 혼동하기 쉬운 두 가지 의미를 가지고 있다.
static
로 선언된 변수
명시적인 저장 클래스 없이 최상위 레벨에서 선언된 변수를 포함하는 저장 클래스 extern
가 있는 변수는
첫 번째 의미에서는 static
이지만 두 번째 의미에서는 그렇지 않다.
일반적으로 C언어에서는 전역변수와 지역변수에 static으로 선언하여 사용할 수가 있다
static으로 선언된 변수는 프로그램 실행동안 값을 유지한다는 점에서 전역변수와 동일하지만
사용범위가 제한 된다는 점에서 전역변수와 다르다.
전역변수를 static으로 선언하면 사용범위가 선언된 소스(파일)내로 한정되어
다른 소스(파일)에서는 접근이 불가능하다.
지역변수를 static으로 선언하면 지역변수의 특성 상 선언된 해당 함수내에서만 사용이 가능하지만
프로그램 실행동안 값을 유지하는 점에서 전역변수의 특성을 갖고 있다.
이 글은 프로그래밍 언어에 관한 토막글입니다. 여러분의 지식으로 알차게 문서를 완성해 갑시다. |