C++에서의 Struct와 Class는 문법은 다르지만 기능적으로 동일하며, 기본 접근 제어자만 다르다.
하지만, Unreal에서는 Struct(USTRUCT)는 데이터 컨테이너, Class(UCLASS)는 객체 기반 구조와 로직 처리용으로 명확히 용도가 분리된다.
USTRUCT는 Unreal Engine에서 데이터를 담기 위한 값 타입 데이터 구조체이다. 일반적인 C++의 struct처럼 필드만을 담는 단순한 구조체로, 함수보다는 데이터의 집합을 정의하는 데 주로 사용된다.
USTRUCT는 가비지 컬렉션을 지원하지 않으며, 스택 기반으로 동작하여 메모리 사용이 효율적이다. 하지만 상속이 불가능하고 다형성도 지원하지 않기 때문에 로직보다는 데이터 컨테이너로만 사용하는 것이 일반적이다.
FVector, FRotator, FTransform, 사용자 정의 데이터 묶음 등
UCLASS는 Unreal Engine에서 객체 지향 프로그래밍을 위한 참조 타입의 클래스 구조를 정의하는 데 사용된다. 모든 UCLASS는 UObject 또는 AActor를 기반으로 상속되어야 하며, 가비지 컬렉션(GC), 다형성, 상속, 컴포넌트 시스템, 블루프린트 연동 등 다양한 기능을 제공한다.
UCLASS() 매크로와 GENERATED_BODY()는 Unreal의 리플렉션 시스템과 블루프린트 시스템에 통합되기 위해 필수적으로 사용되며, 게임 로직, 이벤트 처리, UI 요소 등 복잡한 시스템을 구현할 때 사용된다.
AActor, UObject, UUserWidget, UGameInstance, UComponent 등
| 구분 | USTRUCT | UCLASS |
|---|---|---|
| 목적 | 데이터 저장 | 게임 오브젝트/로직 처리 |
| 메모리 관리 | 값 타입 (복사됨, 스택 기반) | 참조 타입 (가비지 컬렉션 지원, 힙 기반) |
| 상속 | 불가능 | 가능 (다형성 O) |
| 기능 확장 | 제한적 (데이터 중심) | 다양 (함수, 이벤트, 컴포넌트 등) |
| 블루프린트 | 변수만 제한적으로 노출 | 변수, 함수, 이벤트 전부 노출 가능 |