KoreanFoodie's Study

언리얼 오브젝트 (UObject) 의 이해 본문

Game Dev/Unreal C++ : Study

언리얼 오브젝트 (UObject) 의 이해

GoldGiver 2022. 3. 30. 14:20

언리얼 오브젝트

언리얼 오브젝트는 언리얼 엔진의 관리를 받는 객체이다. 언리얼이 객체를 관리하게 되는 이점은 여러가지가 있는데, 먼저 클래스의 타입체킹을 빠르고 간편하게 할 수 있다는 것, 그리고 가비지 컬렉션을 자동으로 해 주는 것 등이 있겠다.

언리얼 오브젝트는 U 로 시작하고, 일반 C++ 오브젝트는 F 로 시작하는 것을 권장하고 있다.

 

언리얼 오브젝트의 전체 특징은 다음과 같다 :

  1. CDO(Class Default Object) : 객체의 초기 값을 자체적으로 관리
  2. Reflection : 객체 정보를 런타임에서 실시간 조회가 가능
  3. GC(Garbage Collection) : 참조되지 않는 객체를 메모리에서 자동 해제할 수 있음
  4. Serialization : 객체와 속성 정보를 통으로 안전하게 보관하고 로딩
  5. Delegate : 함수를 묶어서 효과적으로 관리하고 호출할 수 있음
  6. Replication : 네트워크 상에서 객체간에 동기화를 시킬 수 있음
  7. Editor Integration : 언리얼 에디터 인터페이스를 통해 값을 편집할 수 있음

 

언리얼 오브젝트는 UPROPERTY 등의 '언리얼 오브젝트를 만들겠다'는 규칙에 맞는 클래스나 함수, 변수들을 UHT(Unreal Header Tool) 이 파싱한 후, 컴파일해 만들어지게 된다.

언리얼 오브젝트의 선언 규칙은 여러가지가 있다. 

위에서 맨 마지막에 "클래스이름.generated.h" 를 include 하는 것, UCLASS( ) 접두사를 사용한 것, 클래스 이름을 U로 시작하게 만드는 것(액터는 A, 슬레이트만 S), UObject 를 상속받게 만드는 것, GENERATED_BODY( ) 매크로를 선언한 것이 있다.

MYGAME_API 은 모듈이름이고, 생성자는 추후 CDO 를 생성할 때 한 번 호출된다.

 

멤버 변수에는 UPROPERTY( ) 를, 멤버 함수에는 UFUNCTION( ) 을 붙여주면 된다. 멤버 변수는 메모리 관리를 자동으로 엔진에서 해주게 되며, 함수의 경우 델리게이트나 리플리케이션 등의 기능을 활용할 수 있게 된다.

 

 UObject 는 Level, World, Engine, GameInstance 등... 모든 녀석들의 기반 클래스가 된다! 😮

Comments