관리 메뉴

기억을 위한 기록들

[Unreal] CDO에 관하여 본문

UnrealEngine

[Unreal] CDO에 관하여

에드윈H 2024. 4. 19. 14:41

 

 

 

CDO(CDO: Class Default Object)는  C++ 클래스의 기본 인스턴스를 나타냅니다. 클래스의 CDO는 클래스의 기본 속성을 정의하고, 클래스의 인스턴스화 및 초기화 과정에서 사용됩니다.

 

이는 클래스의 인스턴스를 만들 때 적용되는 초기 속성 값들을 포함합니다. 언리얼 엔진에서는 CDO가 게임 객체의 기본 상태를 정의하는 데 사용됩니다. 예를 들어, 게임에서 사용하는 캐릭터 클래스의 CDO는 이 캐릭터가 소유할 수 있는 초기 속성 값을 정의합니다. 따라서 클래스의 인스턴스를 생성할 때마다 CDO의 초기값이 사용되어 해당 클래스의 객체가 초기화됩니다.

UClass 매크로는 UObject 에게 자신의 언리얼에서 기반으로 삼은 유형에 대해 설명해 주는 UClass 로의 레퍼런스를 넘겨줍니다. 각 UClass 는 Class Default Object, 줄여서 CDO 라 불리는 오브젝트를 하나 유지합니다.

CDO 는 본질적으로 기본 "템플릿" 오브젝트로, 클래스 생성자에 의해 생성된 이후 변경되지 않습니다. 주어진 오브젝트 인스턴스에 대해 UClass 와 CDO 둘 다 구할 수는 있지만, 일반적으로는 읽기 전용으로 간주되어야 합니다. 오브젝트 인스턴스에 대한 UClass 는 GetClass() 함수를 사용하여 언제든 접근 가능합니다.

UClass 에는 클래스를 정의하는 프로퍼티와 함수 세트가 들어있습니다. 이들은 네이티브 코드에서 사용할 수 있는 일반 C++ 함수와 변수이지만, 오브젝트 시스템 안에서의 동작을 제어하는 언리얼 전용 메타데이터가 붙어 있습니다. 태그 시스템 관련 상세 정보는 언리얼 아키텍처 문서를 참고해 주시기 바랍니다.
참고로 UObject 클래스는 그에 상응하는 UClass 에는 존재하지 않는 네이티브 전용 프로퍼티를 포함할 수도 있습니다.

- 공식 문서 중..-

 

요약하자면 시작하면 CDO는 UObject를 상속받는 클래스 객체들의 초기 값을 자체적으로 관리하기 위해 생겨 난 듯 싶다.

 

 

 

 

장점

 

  1. 초기화 및 기본값 설정: CDO는 클래스의 기본값을 설정하고, 클래스의 인스턴스화 및 초기화 과정에서 이를 사용합니다. 이는 객체가 생성될 때마다 동일한 초기 상태로 시작할 수 있도록 보장합니다.
  2. 성능 향상: CDO를 사용하면 게임 오브젝트를 여러 번 생성할 때마다 초기값을 설정할 필요가 없으므로 성능이 향상됩니다. 특히, 게임에서 많은 양의 객체를 생성하는 경우에는 이러한 성능 향상이 더욱 중요합니다.
  3. 일관성 유지: CDO를 사용하면 여러 객체 간에 초기 상태가 일관되게 유지됩니다. 이는 개발자가 프로젝트 전체에서 일관된 동작을 보장하는 데 도움이 됩니다.
  4. 확장성: CDO를 통해 클래스의 기본값을 정의하면 클래스의 동작을 쉽게 변경하고 확장할 수 있습니다. 새로운 속성이나 기능을 추가할 때 클래스의 기본 상태를 적절하게 조정할 수 있습니다.

 

 

그외에 사용함에 있어서 특징으로는 어떤 오브젝트 클래스의 생성자는 인스턴스를 초기화해 CDO를 제작하기 위한 목적으로 사용됩니다. 이 생성자 코드는 초기화에서만 실행되고 실제 게임 플레이에서 생성자 코드는 사용할 일이 없다고 보면 됩니다. 참고로 언리얼 엔진에서 게임 플레이에서 사용할 초기화 함수는 생성자 대신 Init 이나 혹은 BeginPlay 함수를 제공합니다.