언리얼엔진(UE)

[UE] CDO(Class Default Object)

2h1824 2025. 1. 27. 23:54

1. 개요

같이 공부하는 분이 현직에서 일하는 분께 언리얼 엔진을 공부하면서 궁금한 점을 물어보는 과정에서 빌드 과정에 관한 다른 질문에 대해 답변을 해주시다가 조금 더 상세히 이해를 하려면 CDO(Class Default Object)에 대해 알아보면 좋을 것이라고 말씀을 하셔서 이렇게 알아보게 되었다. 

2. UClass와 CDO

UClass

언리얼 오브젝트(UObject)에 대한 클래스 계층 구조 정보와 멤버 변수, 함수에 대한 모든 정보가 기록되는 클래스

언리얼 오브젝트의 생성 과정

  1. 실제 컴파일 전에 언리얼 헤더 툴(Unreal Header Tool)이 헤더 파일 분석
  2. Intermeidate폴더에 언리얼 오브젝트의 정보가 담긴 메타 파일 생성
  3. 위 과정들을 통해 UClass가 클래스에 대한 모든 정보를 보관
  4. 컴파일 단계에서 언리얼 오브젝트마다 UClass가 생성되고 실행 초기 런타임 과정에서 언리얼 오브젝트마다 클래스 정보, 언리얼 오브젝트의 인스턴스 생성
    ㅡ> 이때 생성되는 인스턴스가 언리얼 오브젝트의 기본값을 초기화하는데 이용되는 클래스 기본 객체(Class Default Object) 이다.

CDO

  • 언리얼 엔진에서 각 UClass에 대해 자동으로 생성되는 기본 객체
  • 싱글톤(Singleton)으로 각 클래스당 1개씩 존재
  • 기본 속성 값을 저장
  • 리플렉션 시스템과 함께 작동하여 에디터에서 속성을 편집하고, 해당 변경 사항이 CDO에 저장

 

3. 왜 클래스 기본 객체(Class Default Object)를 사용할까?

기본 인스턴스(CDO)를 만들어 놓고 복제하여 속성값만 수정하여 사용 ㅡ> 언리얼 오브젝트 생성시마다 매번 초기화할 필요 X ㅡ> 성능 향상

* 간단한 오브젝트에서는 효과가 미비할 수 있으나 그 크기가 커지면 커질수록 효과적

4. 언리얼 오브젝트의 로딩과정

언리얼 오브젝트 생성자는 인스턴스를 초기화해 CDO를 제작하기 위해 사용

로딩과정

  1. 프로젝트의 모듈을 로딩하면서 모듈 내 정의된 모든 UObject 기반 클래스 인식
  2. UObject 기반 클래스의 정보들을 메타데이터로 저장 (UClass 형태로 저장)
  3. 각 클래스마다 CDO 생성
  4. 클래스 생성자 호출해 CDO 초기화

5. 정리

CDO에 대해 알아보면서 처음에는 '이런걸 굳이 번거롭게 만들어서 사용해야 하는 이유가 있나?'라는 생각을 했었는데, 자세히 알아보니 확실히 사용하는 편이 이점이 있다고 생각하게 되었다. 아무래도 클래스로 만들어서 사용하는 것들은 수많은 인스턴스를 만들게 되었을 때를 상정하지 않을 수가 없다. 그런데 CDO와 같은 기본값이 저장된 인스턴스가 없다고 생각하면 아무래도 인스턴스를 하나 만들때마다 처음부터 생성 및 초기화를 하게 되면 확실히 오버헤드가 커질 것이다. 그렇기 떄문에 기본 속성 값을 가지는 CDO라는 기본 객체를 만들어 두고 새로 인스턴스를 만들때마다 해당 객체를 복사하여 속성값만 수정하는 방식으로 진행하게 된다면 훨씬 간단하고 효율적으로 객체를 만들 수 있다는 것을 체감했다.


https://kyoun.tistory.com/125

 

4. 클래스 기본 객체 (CDO) + 로딩과정 + 로그디버깅 + 인스턴스생성

이번 강좌에서는 하나의 모듈에서 다른 모듈을 참조하는 기능을 구현해보겠습니다. 모듈간의 참조를 구현하기 위해서는 우선 언리얼 오브젝트의 초기화 과정에 대한 이해가 필요합니다. UCLASS,

kyoun.tistory.com

https://j1y00h4.tistory.com/137?utm_source=chatgpt.com

 

[UE Tips] Asset, TSubclassof, CDO, static class의 차이

Asset정의에셋은 언리얼 엔진에서 게임을 구성하는 모든 리소스를 의미여기에는 메시(mesh), 텍스처(texture), 머티리얼(material), 사운드(sound), 애니메이션(animation), 블루프린트(Blueprint), 레벨(level) 등

j1y00h4.tistory.com