언리얼은 객체를 저장(직렬화)할 때, “모든 속성을 전부 저장하지 않고, CDO와 다른 부분만 저장” 합니다.
즉, “CDO = 클래스의 기본값 표본” 이고, “인스턴스 = 그 기본값(CDO)에서 달라진 부분만 따로 저장” 하는 구조입니다.
UEnemy 클래스가 있다고 생각해보면:
UCLASS()
class UEnemy : public UObject
{
GENERATED_BODY()
public:
UPROPERTY() int Health = 100;
UPROPERTY() float Speed = 400.f;
UPROPERTY() bool bIsBoss = false;
};
이때 이 클래스의 CDO (Class Default Object) 는 다음과 같은 값을 가집니다.
| 속성 | 기본값 |
|---|---|
| Health | 100 |
| Speed | 400 |
| bIsBoss | false |
| 객체 | Health | Speed | bIsBoss |
|---|---|---|---|
| CDO | 100 | 400 | false |
| EnemyA | 120 | 400 | false |
| EnemyB | 100 | 500 | true |
언리얼이 처리할 때는
| 객체 | 저장되는 내용 |
|---|---|
| EnemyA | Health=120 (CDO와 다른 부분만 저장) |
| EnemyB | Speed=500, bIsBoss=true (CDO와 다른 부분만 저장) |
즉, 공통으로 같은 값 (Health=100, Speed=400, bIsboss=false) 은
이미 CDO에 저장되어 있기 때문에 저장할 필요가 없습니다.