Inflearn brand logo image

인프런 커뮤니티 질문&답변

가루님의 프로필 이미지
가루

작성한 질문수

[입문자를 위한 UE5] Part4. 언리얼 엔진 C++

Reflection과 UObject

UClass 안에 ClassDefaultObject 관련 질문이 있습니다.

작성

·

29

·

수정됨

0

안녕하세요 먼저 좋은강의 감사드립니다.!

 

섹션2. Reflection 강의 듣고 질문드립니다.

ClassDefaultObject는 모든 UObject 기반 클래스들은 하나씩 기본으로 만들어지고 메모리에 올라가있다. 이해했습니다. 그리고 ClassDefaultObject를 다양한 곳에서 이용하는 이점이 있다로 이해는 했는데

 

그러면

  1. 결국 당장 안쓰더라도 모든 ClassDefaultObject가 메모리에 올라와있어서 낭비가 될 수 있는거 아닌가요?
    예를들어 (메인메뉴, 인게임, 세팅창 등등) 단계별로 나누었을때 각각에 사용하는 Class들이 분리되어 있을것이고 안쓰는 Class의 DefaultObject 조차 메모리에 가지고 있는것은 낭비가 아닌지 궁금합니다.

     

  2. 용량이 큰 메쉬 같은 것들은 생성자에서 직접적으로 넣어주는 것은 지양 해야되는건가요? - 지금 당장 사용 안해도 메모리에 올라와 있기 때문에

답변 1

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

  1. 여기서 말하는 Default Object는, 말 그대로 UObject에서 파생된 클래스 1개당 하나의 기본 인스턴스가 만들어진다는 것인데요. 큰 프로젝트라 하더라도 어차피 클래스 개수는 그 정도로 많지 않기 때문에, 메모리 부담은 걱정할 필요가 없습니다. 메시 등의 아트 리소스가 메모리 용량을 많이 차지하는 것이지, 코드에서 파생된 CDO 인스턴스는 전부 다 합해봐야 0.0001%도 안 되는 아주 귀여운 수준입니다.

  2. 기본적으로 CDO 내용은 메쉬 등 리소스와는 무관한 내용입니다. 물론 액터 자체에 StaticMeshComponent 등을 만든 다음 용량이 큰 에셋 경로를 하드코딩으로 연결해주면, 액터를 런타임에 생성할 때 에셋 또한 로딩이 되어 있어야 하므로, 게임 시작 시 (액터를 스폰하기 위해) 살짝 버벅거릴 수 있긴 합니다. 하지만 장기적으로 에셋은 AssetManager 등을 통해 동적으로 따로 로딩해서 로딩창에 뜰 때 한방에 로딩을 하는 것이 맞지, CDO에 하드코딩하진 않아 이 또한 별개의 문제로 봐야 합니다.

가루님의 프로필 이미지
가루

작성한 질문수

질문하기