Unreal Engine

[UE]언리얼 오브젝트

programmer-faust 2025. 8. 28. 20:23
  • 순서
    1. 오브젝트란?
    2. UObject의 특징
    3. 주요 UObject 하위 개념
    4. 오브젝트의 생명 주기
    5. Class Default Object란?
  • 오브젝트란?
    1. 모든 클래스의 최상위 Base 클래스임
    2. 언리얼에서 사용하는 대부분의 것은 UObject를 상속받아 만들어짐.
    3. 주요 하위 개념
    4. 언리얼의 리플렉션 시스템, GC, 에디터와의 연동 등을 가능하게 해주는 핵심 클래스임
  • UObject의 특징
    1. 리플렉션 지원: UCLASS(), UPROPERTY(), UFUNCTION()같은 매크로를 붙이면 언리얼이 해당 객체를 에디터/블루프린트에서 인식할 수 있음.
    2. GC: 일반 C++ 포인터 관리와 다르게 UObject 기반 클래스에서 UPROPERTY()로 등록된 포인터는 언리얼의 GC가 추적하여 자동으로 메모리를 관리함
    3. 에디터 및 블루프린트 통합: UObject를 상속하면 블루프린트에서 인스턴스를 만들거나 에디터에서 노출하여 관리할 수 있음.
  • 주요 UObject 하위 개념
    1. UObject: 가장 기본적인 오브젝트로, 화면에 직접 존재하지 않고 데이터/로직 용도로 쓰임 (데이터 에셋, 매니저 객체 등)
    2. AActor: 월드에 존재할 수 있는 오브젝트.
    3. UActorComponent: 액터에 붙여서 기능을 추가하는 오브젝트. (카메라 컴포넌트, 스켈레탈 메쉬 컴포넌트 등)
    4. UStruct/UClass/UInterface: 언리얼 리플렉션 시스템 안에서 메타데이터를 제공하는 또 다른 형태의 오브젝트
  • 오브젝트의 생명 주기
    1. 생성 > 초기화 > 사용 > 파괴
    2. Actor와 같은 경우는 BeginPlay(), Tick(), EndPlay()같은 생명주기 함수가 따로 제공됨.
    3. UObject는 보통 NewObject<T>() 혹은 ConstructObject<T>() 같은 함수로 생성됨.
  • Class Default Object란?
    1. UClass가 딱 1개씩만 갖는 해당 클래스 인스턴스들의 초기 기본값 템플릿이다.
    2. 새 객체를 만들 때, 엔진은 CDO를 기준으로 속성들을 복제해 기본값을 채움.
  • Class Default Object의 역할
    1. 기본값 저장소: C++ 생성자와 블루프린트 Class Defaults에서 지정한 값들이 모두 CDO에 모임
    2. 인스턴스 생성 템플릿: NewObject, SpawnActor 시 객체는 CDO의 값을 복제 받아 초기화함. (복사 생성자가 아니라, 리플렉션 기반으로 속성 단위 복제)
    3. 저장/에디터 최적화: 에셋이나 블루프린트는 부모 CDO와 다른 값만 저장함. 이로인해 차이만 기록하여 용량과 충돌을 줄임.
  • Class Default Object의 생성/초기화 타이밍
    1. 클래스 로드 시 엔진이 그 클래스의 CDO를 1개 생성함
    2. C++ 생성자에서 지정한 값, CreateDefaultSubobject로 만든 기본 서브오브젝트들이 먼저 CDO 만들어짐.
    3. 실제 인스턴스를 만들면, 인스턴스는 CDO의 속성과 디폴트 서브오브젝트를 복제해서 출발함.
    4. 같은 C++ 생성자가 인스턴스에도 호출되지만, CreateDefaultSubobjeect 호출은 FObjectInitializer가 가로채서 CDO에 있던 것을 복제/매핑 함 > 이러한 이유로 클래스 생성자에서 보통 조건문 없이 CreateDefaultSubobject를 그냥 호출해도 안전함
    5. 인스턴스 생성 시 생성자의 동일 코드가 호출 되어도, 엔진이 CDO의 서브오브젝트를 복제해 매핑하기 때문에 중복 생성되지 않음.

'Unreal Engine' 카테고리의 다른 글

[UE] 언리얼 엔진의 GC  (1) 2025.08.28
[UE] 언리얼의 클래스들  (0) 2025.08.28
[UnrealEngine] Enhanced Input System  (0) 2025.08.01
[Unreal Engine] Unreal Engine_C++ 매크로  (5) 2025.07.16
[Unreal Engine] 리플렉션 시스템  (0) 2025.07.09