본문 바로가기

Unreal Engine 4/블루프린트

<Unreal BP> UObject와 CDO(Class Default Object)

언리얼 오브젝트(UObject)


 

 

클래스에 UObject가 상속됬다면 이는 클래스가 언리얼 오브젝트로 선언되었다는 것을 의미한다.

언리얼 오브젝트는 언리얼 엔진의 관리를 받는 특수한 객체이다.

 

U가 붙은 이유는 일반 C++ 클래스와 UClass를 구분하기 위함이며

일반 C++ 클래스와는 다르게 객체를 생성하기 위해서는 NewObject<클래스>()를 사용한다.

    // C++객체가 언리얼 오브젝트가 될경우 아래와 같은 기능이 추가로 붙게된다.

 

 

        ∝ CDO(Class Default Object)

                        : 객체의 초기 값을 자체적으로 관리한다.

 

        ∝ 리플렉션(Reflection)

                        : 객체 정보를 런타임에서 실시간 조회가 가능하다.

 

        /*

            리플렉션이란 컴퓨터 언어에서 런타임에서 객체 자신에 대한 정보와 속성을 검색하고,

            스스로의 구조를 수정할 수 있는 기능이다. VM기반인 C#과 java는 제공하지만 C++에서는 제공하지 않으며

            언리얼에서는 UClass라는 매개체를 활용해 리플렉션 기능을 지원한다.

        */

 

        ∝ GC(Garbage Collection)

                        : 참조되지 않는 객체를 메모리에서 자동 해제할 수 있다.

 

        ∝ Serialization

                        : 객체와 속성 정보를 통으로 안전하게 보관하고 로딩한다.

 

        ∝ 델리게이트(Delegate)

                        : 함수를 묶어서 효과적으로 관리하고 호출할 수 있다.

 

        ∝ Replication

                        : 네트워크 상에서 객체간에 동기화를 시킬 수 있다.

 

        ∝ Editor Integration

                        : 언리얼 에디터 인터페이스를 통해 값을 편집할 수 있다.

 

 

 


 

 

 

언리얼 오브젝트가 만들어지기 위해서는 실제 컴파일 전에

언리얼 헤더 툴에 의해 헤더 파일을 분석하는 과정이 선행된다.

 

이 과정이 완료 되면 Intermediate폴더에 언리얼 오브젝트의 정보를 담은 메타 파일이 생성된다.

메타 파일을 생성 하는 목적은 C++ 문법에서 제공하지 못하는 런타임에서의 빠른 클래스 정보의 검색이다.

 

이 메타 정보는 UClass라는 특별한 클래스를 통해 보관되고 UClass에는 언리얼 오브젝트에 대한

클래스 계층 구조 정보와 멤버 변수, 함수에 대한 정보를 모두 기록하고 있다.

 

또한 런타임에서 특정 클래스를 검색해 형(Type)을 알아내 인스턴스의 멤버 변수 값을 변경하거나

특정 인스턴스의 멤버 함수를 호출하는 것이 가능해진다.

        // 리플렉션(Reflection)

 

 

 

 

 


 

 

 

 

 

CDO(Class Default Object)


 

컴파일 단계에서 오브젝트마다 UClass가 생성된다면, 실행 초기의 런타임 과정에서는

언리얼 오브젝트마다 UClass의 인스턴스와 함께 언리얼 오브젝트의 인스턴스가 생성된다.

 

이 특별한 언리얼 오브젝트의 인스턴스는 언리얼 오브젝트의 기본 세팅을 지정하는데 사용되며

이를 클래스 기본 객체(Class Default Object) 줄여서 CDO라고 부르는 것이다.

 

// 언리얼 오브젝트 클래스에서 생성자는 인스턴스를 초기화해 CDO를 제작하기 위한 목적으로 사용된다.

// 게임 플레이에 사용할 초기화 함수는 생성자 대신 Init이나 BeginPlay함수로 따로 제공한다.

 

 

 

 

 

    CDO를 만드는 이유

        언리얼은 언리얼 오브젝트를 생성할 때마다 매번 초기화 시키지 않고

        기본 인스턴스를 미리 만들어 놓고 복제하는 방식으로 메커니즘이 구성되어 있기 때문이다.

                // 복잡한 기능을 수행할 정도로 기능이 확장되면 객체의 덩어리가 커지게 되는데,

                   이럴경우 복제 후 속성 값만 변경하는게 효과적이기 때문

 

 

 

 

 

 


 

 

 

 

 

출처


 

    ∝ cafe.naver.com/unrealenginekr/13883




본문 출처 : https://hombody.tistory.com/280?category=861819 

 

[Unreal] - UObject와 CDO(Class Default Object)

언리얼 오브젝트(UObject) 클래스에 UObject가 상속됬다면 이는 클래스가 언리얼 오브젝트로 선언되었다는 것을 의미한다. 언리얼 오브젝트는 언리얼 엔진의 관리를 받는 특수한 객체이다. U가 붙은

hombody.tistory.com