static (키워드)

C 프로그래밍 언어C++, 오브젝티브-C에서 static정적 변수로서의 수명과 연계에 따라 달라지는 가시성을 모두 제어하는 예약어이다.

static라는 단어는 자바와 같이 C의 영향을 받은 언어에서도 사용된다.

C에서 static은 예약어인 extern, auto, register와 함께 기억 영역 분류에 해당한다. 모든 변수와 기능은 이러한 기억 영역 분류 가운데 하나를 가지고 있다. 선언에서 기억 영역 분류를 지정하지 않으면 상황에 따라 문맥 의존 디폴트가 사용된다.

  • extern은 소스 파일의 모든 최상위 선언인 경우에 사용된다.
  • auto는 함수 본문에 선언된 변수인 경우에 사용한다.
기억 영역 분류 수명 가시성
extern 프로그램 실행 외부 (전체 프로그램)
static 프로그램 실행 내부 (번역 단위만)
auto, register 기능 실행 (없음)

이러한 언어에서 "정적 변수"라는 용어는 혼동하기 쉬운 두 가지 의미를 가지고 있다.

  1. 위에서 설명한 바와 같이 프로그램과 수명이 동일한 변수 (언어 독립)
  2. (C 계열 프로그래밍 언어) 기억 영역 분류에서 static로 선언된 변수


명시적인 저장 클래스 없이 최상위 레벨에서 선언된 변수를 포함하는 저장 클래스 extern가 있는 변수는

첫 번째 의미에서는 static이지만 두 번째 의미에서는 그렇지 않다.


일반적으로 C언어에서는 전역변수와 지역변수에 static으로 선언하여 사용할 수가 있다


static으로 선언된 변수는 프로그램 실행동안 값을 유지한다는 점에서 전역변수와 동일하지만

사용범위가 제한 된다는 점에서 전역변수와 다르다.


전역변수를 static으로 선언하면 사용범위가 선언된 소스(파일)내로 한정되어

다른 소스(파일)에서는 접근이 불가능하다.


지역변수를 static으로 선언하면 지역변수의 특성 상 선언된 해당 함수내에서만 사용이 가능하지만

프로그램 실행동안 값을 유지하는 점에서 전역변수의 특성을 갖고 있다.