728x90
728x90
메모리의 정적/동적 할당 유니티 컴파일러가 실행되는 동작 순서는 정적 메모리 영역 -> 동적 메모리 영역이다. 세부적으로 나눠서 살펴보면 먼저 정적 메모리 공간의 함수들이 실행되고, 정적 영역의 static 변수들이 실행된다. 그 다음 동적 메모리 공간에 저장된 변수들이 실행되게 된다. 유니티 싱글톤(Singleton) 패턴 활용 이러한 메모리 할당 개념을 바탕으로, 싱글톤 객체를 설명해보고자 한다. 일단 유니티에서 생성되는 모든 객체는 최초로 동적 메모리 공간인 heap에 올라간다. 하지만 heap 영역에 위치한 객체들은 사용 범위에 한계를 가지고 있을 수 있다. 그렇기 때문에 객체 클래스 자체를 static 영역에 올리고 instance를 생성해 각각 클래스 별로 뿌려줄 수 있다. 이 것이 바로 관리..
Get/Set 프로퍼티와 객체지향 캡슐화 객체지향의 3요소는 캡슐화, 상속, 다형성이다. 상속 상속의 대표적인 예시는 C# 스크립트의 첫 장면에서 확인할 수 있다. 스크립트를 생성하면 Class AA : MonoBehaviour라고 상단에 표시된다. 이는 AA 라는 클래스가 MonoBehaviour라는 부모 클래스를 상속 받은 개념이다. MonoBehaviour에 마우스 커서를 대고 F12를 누르면 MonoBehaviour 클래스를 볼 수 있는데 MonoBehaviour 클래스 역시 Behaviour를 상속받은 것을 확인할 수 있다. 이 역시 들어가보면 Component 클래스를 상속 받고 있고, Component 클래스 역시 Object 클래스를 상속 받은 것을 확인할 수 있다. 즉, 객체 지향에서 사..
== 비교 연산자와 관련된 랜덤 버그 발생 원인과 방어코드 사용한 해결 방법 if (collision.gameObject.CompareTag("Player")) { PlayerHealth ph = collision.gameObject.GetComponent(); ph.hp--; if(ph.hp
this 키워드 메모리는 저장되는 주소, 변수는 그 주소를 한 번에 볼 수 있는 이름의 개념으로 생각하면 된다. 예) 서울역(변수), 서울시 중구 한강대로 405(메모리) Class는 Heap 영역, 함수는 Code 영역(함수만 들어가 있는 table이 있어 호출하는 개념), 변수는 Stack영역에 저장 obj a = new obj() 객체를 생성하면 heap 메모리 공간에 할당한다. Gameobject obj = new GameObject(); - GameOjbect : 클래스 - obj : 변수 - new GameObject() : 생성자 함수(객체를 생성해주는 함수, heap 메모리 공간 할당) this는 함수와 변수 등이 저장되어 있는 메모리 영역에 관련한 이슈, C/C++ 참고 GameObjec..
오브젝트 풀링(Object Pooling)와 가비지 콜렉션(Garbage Collection) 오브젝트 풀링은 총알을 미리 탄창에 넉넉하게 장전해 놓는 다는 개념으로 생각하면 된다. 오브젝트 풀의 핵심은 배열과 리스트로, 배열은 방의 크기가 정해져있고 자리가 고정되어 있기 때문에 추가와 삭제가 매우 어렵다. 반면 리스트는 추가와 삭제가 매우 쉽고 검색은 때에 따라 배열보다 쉽다. 오브젝트 풀링은 메모리 최적화에 매우 중요한 기능이다. 해당 내용을 이해하기 위해서는 먼저 가비지 콜렉터(Garbage Collector)의 개념을 이해해야 한다. 가비지 콜렉터가 수행하는 가비지 콜렉션(Garbage Collection)은 파편화된 메모리리를 정리해주는 기능이다. 시스템 상 메모리는 배열 형식으로 순서대로 저장..
반복문 for, while, 재귀 유니티 게임 개발 뿐만 아니라, 알고리즘 테스트부터 개발 전체는 반복문의 연속으로 이루어져있다고 봐도 무방하다. 반복문에 대해 공부했던 내용을 간단히 정리해보겠다. 가장 대표적인 반복문인 for문은 ~에서 ~까지(한정되어 있음)를 의미한다. 작성 방법은 for(초깃값 설정; 조건식; 증감) {할 것} 으로 초깃값 설정 -> 조건식 -> 할것 -> 증감 -> 조건식...(반복)으로 실행 순서가 정해진다. for문에서 보통 증감식 부분은 i++ 또는 ++i로 작성한다. 여기서 i++과 ++i 차이를 많이 헷갈려 하는데 다음과 같다. 1) i++의 경우 다음 조건식에서 결과를 볼 수 있지만 ++i는 바로 결과를 확인할 수 있다. 2) 속도가 ++i가 더 빠름, 내부적으로 i+..