TObjectPtr vs TSubclassOf

Unreal Engine에서 TObjectPtrTSubclassOf는 각각 다른 목적과 사용 방식을 가진 템플릿 클래스입니다. 간단히 말하면 인스턴스와 클래스에 대한 접근 시 사용하는 클래스입니다. 아래에서 두 개념을 비교 및 설명합니다.

구분TObjectPtrTSubclassOf
목적UObject 인스턴스(객체) 포인터 관리특정 클래스 타입(클래스 정보) 저장
주 용도객체 참조 및 메모리 관리클래스 타입 지정 및 타입 체크
대표 사용 예시TObjectPtr<UStaticMesh>TSubclassOf<AActor>
설명실제 UObject 인스턴스를 가리킴특정 부모 클래스를 상속한 모든 클래스 타입을 저장 가능
에디터 노출인스턴스(객체) 선택클래스(타입) 선택
블루프린트객체를 직접 할당블루프린트 클래스 타입 할당

TObjectPtr

  • Unreal Engine 5에서 도입된 스마트 포인터로, 기존의 UObject* 대신 사용을 권장합니다.
  • UObject의 포인터를 안전하게 관리하며, 가리키는 객체가 유효한지 자동으로 검사하고, 객체의 참조 카운트를 관리합니다.
  • 주로 실제 인스턴스(예: 특정 메쉬, 사운드 등)를 가리킬 때 사용합니다.
  • 예시: cppUPROPERTY() TObjectPtr<UStaticMeshComponent> Box;
  • 객체 인스턴스를 직접 참조합니다.

TSubclassOf

  • 특정 클래스를 상속받은 모든 클래스의 타입(즉, UClass 정보)을 저장할 수 있는 템플릿 클래스입니다.
  • 객체 인스턴스가 아니라 클래스 타입 자체를 변수로 저장합니다.
  • 에디터나 블루프린트에서 클래스 타입을 선택할 수 있게 해줍니다.
  • 주로 SpawnActor 등에서 어떤 타입의 객체를 생성할지 지정할 때 사용합니다.
  • 예시: cppUPROPERTY() TSubclassOf<AActor> ActorClass;
  • 타입 정보만 저장하며, 실제 인스턴스는 아닙니다.

주요 차이점

  • TObjectPtr: 실제 객체(인스턴스)를 가리키는 포인터. 메모리 관리와 안전성 보장.
  • TSubclassOf: 특정 부모 클래스를 상속한 클래스의 타입 정보(UClass*)를 저장. 객체가 아닌 타입 자체를 다룸.

쉽게 말해,

  • TObjectPtr은 “이 객체를 가리킨다.”
  • TSubclassOf는 “이런 타입(클래스)을 가리킨다.”
    즉, 인스턴스 vs. 타입 정보의 차이입니다.

예시 코드

cpp// 객체 인스턴스 참조 (TObjectPtr)
UPROPERTY()
TObjectPtr<UStaticMeshComponent> MeshComp;

// 클래스 타입 참조 (TSubclassOf)
UPROPERTY()
TSubclassOf<AActor> ActorBlueprintClass;

이처럼 두 타입은 의도와 용도가 다르므로 상황에 맞게 선택해서 사용해야 합니다.

  • 객체를 직접 다룰 땐 TObjectPtr
  • 클래스를 지정하고 싶을 땐 TSubclassOf를 사용합니다.
Back to top