언리얼은 객체를 저장(직렬화)할 때, “모든 속성을 전부 저장하지 않고, 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

인스턴스 A, B가 이렇게 있다면

객체 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에 저장되어 있기 때문에 저장할 필요가 없습니다.

그 결과