UObject 3

[언리얼 엔진] 스마트 포인터 정리

언리얼 엔진 C++ 코드를 보다 보면 UObject 계열 객체를 raw pointer로 참조하는 코드를 볼 수 있다.하지만 UE5에서는 UObject* 같은 raw pointer 대신 TObjectPtr 사용을 권장하는 경우가 많다.처음에는 UPROPERTY만 붙이면 GC 추적 대상이 되는데, 왜 굳이 TObjectPtr을 사용하는지 궁금했다.그래서 관련 내용을 찾아보니 TObjectPtr 외에도TWeakObjectPtr, TSoftObjectPtr, TStrongObjectPtr 같은 포인터들이 있었다.또 일반 C++에서 사용하는 shared_ptr, unique_ptr과 비슷해 보이는TSharedPtr, TUniquePtr 같은 타입도 따로 존재했다.그래서 이번 글에서는 언리얼 엔진에서 사용하는 포인..

언리얼 엔진 2026.06.15

[언리얼 엔진] UCLASS와 USTRUCT의 차이 정리

이전 글에서는 UObject, 언리얼 객체 시스템의 기반이라는 내용을 정리했다.이번에는 그와 이어서 UCLASS와 USTRUCT의 차이를 정리해보려고 한다.일반 C++에서는 class와 struct의 차이가 기본 접근 지정자 정도이다.class는 기본이 private, struct는 기본이 public이라는 차이가 있을 뿐문법적으로는 거의 같은 방식으로 사용할 수 있다.하지만 언리얼 엔진에서 사용하는 UCLASS와 USTRUCT는 단순히 접근 지정자만 다른 개념이 아니다.실제로 코드를 작성하다 보면 객체로서 관리해야 하는 타입은 UCLASS로 만들고,데이터를 값처럼 다루는 타입은 USTRUCT로 만드는 경우가 많다.처음에는 둘 다 리플렉션을 위한 매크로 정도로 생각했지만,공부하면서 사용 목적과 동작 방식..

언리얼 엔진 2026.06.08

[언리얼 엔진] UObject, 언리얼 객체 시스템의 기반 정리

언리얼 엔진에서 C++ 클래스를 만들다 보면UObject가 여러 클래스들의 기반이 되는 최상위 클래스로 존재한다는 것을 볼 수 있다.예를 들어 월드에 배치할 수 있는 AActor나,Actor에 부착해서 기능을 분리하는 UActorComponent는 UObject를 기반으로 만들어진 클래스이다.처음에는 UObject를 단순히 언리얼에서 사용하는 기본 클래스 정도로 생각했다.하지만 공부해보니 UObject를 상속받으면서언리얼 엔진의 여러 기능을 사용할 수 있다는 것을 알게 되었다.대표적으로 리플렉션, 가비지 컬렉션, 직렬화, 블루프린트 연동, CDO 같은 개념들이 있다.이전에 리플렉션, GC, CDO 같은 개념을 따로 정리한 적이 있기 때문에이번 글에서는 이 기능들이 UObject와 어떻게 연결되는지 간단히..

언리얼 엔진 2026.06.05