CDO란?
UCLASS가 하나씩 가지는 기본값으로 초기화된 기본 인스턴스
* UCLASS는 아래처럼 UCLASS 매크로가 선언된 클래스
* UCLASS 매크로를 쓰려면 반드시 UObject를 상속받아야 한다. UCLASS 매크로는 이 클래스가 UObject를 상속받은 클래스임을 엔진에 알리는 용도
* 아래 리셋 버튼을 통해 초기값으로 돌아갈 수 있는 이유도 CDO 덕분
CDO는 언제 만들어지나?
클래스를 로드하거나 처음 사용할 때 해당 클래스의 CDO가 생성된다.
CDO는 누가 만드나?
언리얼 엔진 UObject 시스템에서 자동으로 만들어준다.
CDO의 기능 및 장점
1. 성능 향상 및 메모리 최적화
- 객체를 생성할 때 마다 생성자를 호출하는 것 보다 CDO 값을 단순 고속 복사하는게 더 빠름(언리얼 엔진 자체에서 CDO에 저장된 값을 메모리 블록 단위로 한번에 복사해서 초기화. 많은 객체를 생성할 때 효율화가 극대화)
2. 일관성 있는 기본값 관리
- 모든 인스턴스가 CDO 값을 복사해서 만들어지므로 동일한 기본값으로 객체가 시작
3. 유지보수 편의성
- 기본값을 CDO에서만 관리하므로 새로운 변수를 추가하거나 수정할 때, 코드 이곳 저곳에서 따로 관리될 때 보다 유지보수와 확장성에 유리하다
CDO와 UHT(Unreal Header Tool)의 관계
UHT는 언리얼 프로젝트에서 C++ 헤더 파일을 컴파일 전에 분석해서 언리얼 리플렉션에 필요한 정보를 추출하고 이를 바탕으로 Generated.h 파일을 자동 생성.
- 컴파일 타임(빌드 시점): UHT가 메타데이터와 리플렉션 정보를 준비
- 런타임(엔진 실행 시): 언리얼 엔진이 이 정보를 바탕으로 UClass 인스턴스를 만들고, 각 UClass가 CDO 인스턴스를 생성
UHT가 생성한 메타데이터는 각 클래스의 UClass 객체에 저장(즉, 하나의 언리얼 오브젝트가 초기화 될 때 항상 두개의 인스턴스가 생성됨)
실제로 UObject 클래스 내부에는 UCLASS 객체를 멤버로 들고 있음을 엔진 코드에서 확인할 수 있다(UObject는 UObjectBase 클래스를 상속받는다고 한다)
'공부 > UE' 카테고리의 다른 글
[UE5] c++ 코드 수정 후 게임에 반영하는 방법 (0) | 2025.05.24 |
---|---|
[UE] Layered blend Per bone (0) | 2025.04.06 |
[UE] Orient Rotation to Movement (0) | 2025.03.24 |
[UE] Automatic Rule Based ON Sequence Player in State (0) | 2025.03.23 |
[UE] Use Controller Rotation, Use Controller Desired Rotation (0) | 2025.03.23 |