Unreal Engine 5 - CDO (Class Default Object)

mingu Lee·2025년 9월 16일

Unreal Engine 5

목록 보기
6/9

오늘 UE_Log를 통해 언리얼 엔진의 라이프 사이클을 테스트해보다가 CDO 라는 것을 알게 됐다.

CDO (Class Default Object)는 모든 UCLASS마다 자동으로 하나씩 만들어지는 객체이다.

이름은 보통 Default_ClassName이며 해당 클래스의 기본 상태를 저장하는 템플릿 역할을 한다.

클래스가 로드될 때 리플렉션 시스템이 클래스 정보를 읽어오며, 해당 클래스의 CDO가 자동으로 한 번 생성된다.

실제로 Item이라는 C++ 클래스를 만들고, 생성자에 UE_Log를 출력해보면 컴파일이나 에디터 실행 시 다음과 같은 로그가 출력된다.

C++ 생성자에서 설정한 값, 블루프린트에서 지정한 값이 CDO에 저장되며, 디테일 패널과 블루프린트 Class Default에서 보이는 값은 CDO를 참조한 값이다.

인스턴스 생성 시 CDO 메모리를 memcpy로 복사하여 빠르게 초기화가 가능하므로 최적화에 도움이 된다.

만약 CDO가 없다면 객체를 생성할 때마다 이 변수는 이 값, 저 변수는 저 값, Config는 어디서 로드... 같은 메타데이터 기반 초기화를 해야하기 때문에 인스턴스 생성 속도가 느려지고, 비용이 많이 들어서 성능이 떨어질 것이다.

CDO가 없는 경우와 있는 경우를 간단히 비유하자면 다음과 같다.

  • CDO가 없는 경우
    붕어빵을 만들 때마다 밀가루, 설탕, 물 비율을 계산하고 반죽을 다시 만들고 틀에 부어서 찍어내야함.
  • CDO가 있는 경우
    이미 반죽이 준비되어 있어서, 떠서 찍어내기만 하면 됨.

즉, CDO가 있으면 굉장히 빠른 속도로 인스턴스를 생성할 수 있는 것이다.

결론, CDO는 모든 UCLASS 마다 반드시 하나씩 메모리에 올라가 있으며, 인스턴스 생성 시 해당 클래스의 CDO를 참조하여 생성된다.

profile
Github: https://github.com/dlalsrn

0개의 댓글