728x90
전역변수 & 지역변수
C# 스크립트 작성 시 클래스 안에 다양한 변수를 설정한다. 하지만 때때로 함수가 변수들을 읽지 못해 유니티 에디터에서 컴파일 에러가 뜨기도 하고, 이상한 버그들도 발생하곤 한다. 개발할 때 매우 기본이 되는 내용이지만 오히려 모르고 넘어가는 경우가 많기에 때문에, 전역변수와 지역변수에 대해 기본적인 개념을 꼼꼼히 짚어보도록 하겠다.
먼저, 한 클래스 안에서 동일한 이름의 지역/전역 변수가 존재한다면 지역 변수가 전역 변수보다 먼지 인지된다. 그리고 전역 변수는 지역 변수를 모르지만, 지역 변수는 전역 변수를 알고 있다. 이는 컴파일러 실행과 관련되어 설명할 수 있는데 우리가 유니티 에디터에서 플레이 버튼을 누르면 컴파일러는 "코드 -> static(정적 메모리 공간) -> stack/heap(동적 메모리 공간) 순으로 메모리를 할당한다.
코드 영역과 static 데이터 영역(static 변수 포함)은 미리 할당할 수 있지만 동적 공간(지역변수/전역변수)은 프로그래머가 선언해야 할당할 수 있기 때문에 실행과 동시에 할당할 수는 없다.
이 개념을 적용했을 때 코드가 실행은 됬지만 스택/힙에 있는 변수들은 메모리에 올라가지 않기 때문에 모르고, 이러한 동적변수는 결국 Start()나 Update() 함수에서 호출되어야 할당하고 알게 되는 것이다.
간단한 코드로 설명해보자면
float h = speed;
하면 전역변수 에러가 뜨지만
static float kkk = 100;
float h = kkk;
는 가능하다 (static 영역은 먼저 호출되니깐 이미 메모리가 할당되기 때문에)
728x90
'게임 프로그래밍 > C#' 카테고리의 다른 글
C# 반복문에 대해 학습한 내용 정리, i++ / ++i 증감식 차이점 비교 (1) | 2022.09.25 |
---|---|
C# 유니티 함수 오버로딩 시 디폴트 인수 값 적용과 관련하여 문법 주의사항 (0) | 2022.08.04 |
C# 비선형 자료구조 - 그래프(Graph) (0) | 2021.12.28 |
C# 비선형 자료구조 - 트리(Tree) (0) | 2021.12.28 |
C# 정렬 알고리즘 - 힙정렬(Heap sort) (0) | 2021.12.27 |