C# 유니티 지역변수 & 전역변수

728x90

전역변수 & 지역변수

C# 스크립트 작성 시 클래스 안에 다양한 변수를 설정한다. 하지만 때때로 함수가 변수들을 읽지 못해 유니티 에디터에서 컴파일 에러가 뜨기도 하고, 이상한 버그들도 발생하곤 한다. 개발할 때 매우 기본이 되는 내용이지만 오히려 모르고 넘어가는 경우가 많기에 때문에, 전역변수와 지역변수에 대해 기본적인 개념을 꼼꼼히 짚어보도록 하겠다.

 

먼저, 한 클래스 안에서 동일한 이름의 지역/전역 변수가 존재한다면 지역 변수가 전역 변수보다 먼지 인지된다. 그리고 전역 변수는 지역 변수를 모르지만, 지역 변수는 전역 변수를 알고 있다. 이는 컴파일러 실행과 관련되어 설명할 수 있는데 우리가 유니티 에디터에서 플레이 버튼을 누르면 컴파일러는 "코드 -> static(정적 메모리 공간) -> stack/heap(동적 메모리 공간) 순으로 메모리를 할당한다.

코드 영역과 static 데이터 영역(static 변수 포함)은 미리 할당할 수 있지만 동적 공간(지역변수/전역변수)은 프로그래머가 선언해야 할당할 수 있기 때문에 실행과 동시에 할당할 수는 없다.

이 개념을 적용했을 때 코드가 실행은 됬지만 스택/힙에 있는 변수들은 메모리에 올라가지 않기 때문에 모르고, 이러한 동적변수는 결국 Start()나 Update() 함수에서 호출되어야 할당하고 알게 되는 것이다.

 

간단한 코드로 설명해보자면

float h = speed;

하면 전역변수 에러가 뜨지만

static float kkk = 100;
float h = kkk;

는 가능하다 (static 영역은 먼저 호출되니깐 이미 메모리가 할당되기 때문에)

728x90