본문 바로가기

게임개발 수업

static 키워드

static이란 정적지역변수를 말한다.

 

뜻을 하나하나 풀어서 보면 이해하기 쉽다.

 

정적 - 지역 - 변수

 

변수 - 변수는 스택에 저장된다.

(

동적할당은 다른 이야기이다. 아래에서 보면 변수는 a,*b이다.

10과 new int(10)은 값이다.

즉 변수 a,*b는 스택에 저장이 된 것이고,

10은 상수값

new int(10)은 힙에 상수로 저장되어 있고 *b가 그 주소값을 가진다는 이야기이다.

)

int a = 10;

int *b = new int(10);

 

 

지역변수 - 지역변수는 스코프 내에서만 유효하다.

 

int main(){

 a = 10;(x)

}

 

void func(){

int a;

}

 

지역변수 a는 func()함수내의 스코프에서만 유효하므로 main에서 접근할 수 없다.

 

정적지역변수 - 정적이란 정해져 있다는 뜻이다.

변수가 정적인 상태로 존재한다는 뜻은 변수가 스택에 저장되는 것이 아니라 전역변수와 같이 데이터 영역에 저장된다는 뜻이다.  또한 초기화 역시 한번만 이루어진다.

 

여기까지 보면 전역변수와 같다.

다른 점은 (정적)지역변수라는 것이다. 그래서 스코프내에서만 유효하게 동작한다. 이 말은 스코프 내에서만 접근이 가능하다는 뜻이다.

 

함수{

static int a;

}

함수에 있으면 함수에서만 접근이 가능하다.

 

aaa.cpp{

 

--global area--

static int a;

 

}

aaa.cpp파일을 하나의 커다란 스코프로 본다면 전역으로 선언된 static 변수는 aaa.cpp파일 내에서만 접근이 가능하다.

 

전역변수와의 차이

  정적전역변수(global-extern) 정적지역변수(local-static)
데이터 영역에 저장되는가? o o
프로그램이 끝날때까지 유효한가? o o
어디서든 접근 가능한가? o x

 

전역변수와 차이는 이것뿐이다.

내가 접근을 할수 없다고 해서 static변수가 사라지는 것이 아니다.

static 변수는 전역변수와 동일하게 프로그램이 시작하고 끝날때까지, 내가 사용을 하든 안하든 계속 존재한다.

 

따라서 static변수는 꼭 필요한 경우가 아니라면 사용을 하지 말아야 한다.

'게임개발 수업' 카테고리의 다른 글

가상함수  (0) 2022.11.25
클래스 생성자와 소멸자  (0) 2022.11.24
OOP의 특징  (0) 2022.11.16
STL vector  (0) 2022.11.08
STL 구성요소  (0) 2022.11.08