프로그래밍/C 기초

[C언어 강좌] #26 - static

도끼_Dokki 2017. 1. 1. 09:00

이번에는 static변수에 대해 알아봅시다.


전역변수와 지역변수 모두 static을 쓸수 있습니다. 하지만 일단 지금은 지역변수에 대한 부분만 알아봅시다.

전역변수에서의 static은 나중에 설명드리겠습니다.


지역변수에 static은 전역변수의 성질을 갖게됩니다. 하지만 지역변수적인 특성도 가지고있죠.

static이 붙게된 지역변수도 선언된 지역변수는 해당 지역에서만 접근이 가능합니다. 이건 지역변수의 특징과 같습니다.

하지만 전역변수처럼 프로그램이 종료될때까지 소멸되지 않고 메모리 공간에 존재합니다. 이건 전역변수의 특징과 같지요.



이 예제를 보면 전역변수처럼 변수가 소멸되지 않습니다.

static 변수는 한번만 초기화되고 프로그램과 운명을 함께하게됩니다.



하지만 전역변수처럼 모든공간에서 쓸수있는것이 아니라 선언된 지역에서만 사용이 가능합니다.


그렇다면 이 예제에서 static변수는 hello함수가 호출되는순간 선언된다고 생각할수 있습니다.

하지만 사실 static변수는 전역변수처럼 프로그램이 시작될때 같이 선언됩니다.

즉 static변수와 전역변수는 동일한 시기에 할당되고 소멸하게 되는겁니다.


hello함수가 호출되기 전부터 이미 프로그램이 시작할때 static int num 변수는 할당되어있던겁니다.

단지 사용할수 있는 공간만 제한된것 뿐입니다.


static int num변수는 hello함수에 있지 않고 사실 없다고 봐도 되겠죠. 저 공간에서는 이미 하는일이 없는겁니다.

변수는 프로그램이 실행될때 이미 메모리공간에 할당되었고 저 지역에서만 사용 가능하다는것을 알려주기 위한것입니다.


static변수는 전역변수에 비해서 안정성이 높습니다. 전역변수를 static변수로 대체 가능한 상황에서는 대체 하는편이 좋습니다.

지속적으로 유지해야하는 변수가 있다면 static변수를 사용해주시면 됩니다.