제목은 거창하지만 사실 별 내용은 없습니다...ㅎㅎ
GC나 그런게 아닌 그냥 메모리 상에 올라가있는 오브젝트나 리소스들을
어떻게 나눠서 로드 및 해제를 진행할지에 대한 고민을 작성한 내용입니다.
나중에 까먹을까봐 미리 글로 작성함니다
엔진의 오브젝트 종류
- SObject : 모든 오브젝트들의 최상위에 속하는 인터페이스. 얘를 상속 받으면 MemoryMgr에서 해당 오브젝트를 등록함
- 리소스 : 순수한 정보가 들어가 있는 오브젝트. 외부로부터 데이터를 들여서 저장함. 예시로 Texture, Skeleton...
- 버추얼 리소스 : 딱히 순수한 정보는 없고 리소스 친구들을 종합한 오브젝트, 얘도 따지면 리소스랑 같지만 메모리 관리 시 버추얼 리소스로 분류됨. 예시로 Prefab
- 게임 오브젝트, 컴포넌트 : 리소스랑 따로 떨어져있는 오브젝트. 얘는 유동적으로 생성, 삭제를 반복하는 친구
엔진에서 메모리 해제 시 순서
메모리는 최대한 종속성을 따져가면 지워야 이미 해제 된 포인터를 가리키면서 에러를 뿜어내는 현상을 막을 수 있다.
- 게임 오브젝트 (오브젝트 삭제되면서 포함된 컴포넌트도 같이 삭제함)
- 버추얼 리소스
- 리소스
뭐 구현하다가 나중에 단계를 더 나눈다거나 애매한 일이 생기면 수정될 예정