반응형
언리얼 엔진에서 CDO(Class Default Object)는 클래스당 딱 하나씩 존재하는 '원본 마스터 객체'입니다. 엔진이 초기화될 때 각 클래스의 생성자를 호출하여 이 객체를 메모리에 미리 만들어 둡니다.
단순히 "기본값 저장소" 이상의 의미를 갖는데, CDO를 사용하는 핵심적인 이유 4가지는 다음과 같습니다.
1. 메모리와 성능 최적화 (Template Role)
새로운 액터나 오브젝트를 스폰할 때, 맨땅에서 모든 변수를 초기화하는 것은 비효율적입니다.
- 동작 방식: 엔진은 CDO라는 완성된 '복사본'을 미리 가지고 있다가, 새로운 인스턴스가 생성되면 CDO의 메모리 상태를 그대로 복사(Serialization)해서 넘겨줍니다.
- 이점: 복잡한 생성 로직을 매번 실행할 필요 없이 메모리 복사만으로 빠르게 객체를 생성할 수 있습니다.
2. 변수 기본값의 기준점 (Default values)
에디터의 디테일 패널(Details Panel)에서 우측의 '노란색 화살표(Reset to Default)' 버튼을 본 적이 있으실 겁니다.
- 기준점: 사용자가 수정한 값이 "기본값과 다른지" 판단할 때, 그 비교 대상이 바로 CDO입니다.
- 직렬화 최적화: 게임을 저장하거나 네트워크로 데이터를 보낼 때, 기본값(CDO 값)과 다른 변수만 골라서 저장/전송하면 되므로 데이터 크기를 획기적으로 줄일 수 있습니다.
3. 데이터 기반 프로그래밍 (Data-Driven Access)
객체를 실제로 월드에 배치(Spawn)하지 않고도, 그 클래스가 어떤 정보를 가지고 있는지 미리 알아야 할 때 사용합니다.
- 예시: 인벤토리 UI에서 아이템 아이콘을 표시해야 한다고 가정해 봅시다. 아이템 액터를 월드에 스폰하지 않고도, 아이템 클래스의 CDO에 접근하여 ItemIcon 변수값만 읽어올 수 있습니다.
- 코드 예시:
// 액터를 생성하지 않고 클래스 정보만으로 기본값 접근 AMyWeapon* DefaultWeapon = GetDefault<AMyWeapon>(MyWeaponClass); float Power = DefaultWeapon->BaseDamage;
4. 리플렉션 및 에디터 통합
언리얼 엔진의 강력한 리플렉션(UProperty 등) 시스템은 CDO를 기반으로 작동합니다. 엔진은 CDO를 검사하여 이 클래스가 어떤 컴포넌트를 기본으로 가지는지, 어떤 기본 에셋을 참조하는지를 파악하고 이를 에디터 UI에 노출합니다.
주의사항: CDO는 '불변'이어야 합니다
CDO는 해당 클래스의 모든 인스턴스가 공유하는 원본입니다.
- 만약 런타임 중에 CDO의 값을 수정해버리면, 이후에 생성되는 해당 클래스의 모든 객체들이 바뀐 값을 가지고 태어나는 대참사가 발생할 수 있습니다.
- 따라서 CDO는 값을 읽기 전용(Read-only)으로 사용하는 것이 원칙입니다.
요약하자면
CDO는 클래스의 '설계도'와 '실제 객체' 사이의 가교 역할을 하며, "빠른 생성, 기본값 관리, 효율적인 데이터 접근"을 위해 존재합니다.
반응형
'게임 개발 > Unreal Engine 기본' 카테고리의 다른 글
| Unreal Engine SCS(Simple Construction Script) (0) | 2025.12.30 |
|---|---|
| Unreal Engine CDO 사용 방법 (0) | 2025.12.30 |
| unreal engine assertion들 check, ensure, verify 등등... (0) | 2025.12.30 |
| TObjectPtr를 사용하는 이유 (0) | 2025.12.30 |
| Unreal Engine의 PrimaryAsset (0) | 2025.12.29 |