언리얼 엔진의 구조체 | 언리얼 엔진 5.5 문서 | Epic Developer Community
구조체 (UStructs)는 관련 프로퍼티를 체계화 및 조작할 수 있는 데이터에 특화된 자료 구조 형태이다.
즉, 데이터 저장 및 전송에 특화된 가벼운 객체이다.
또한 구조체는 접두사F를 사용한다.
USTRUCT(BlueprintType)
// U가 아닌 접두사 F이다 !
struct FMyStruct
{
GENERATED_BODY()
UPROPERTY(EditAnywhere,BlueprintReadWrite,Category = "Test")
int32 MyIntegerMemberVariable;
// 일반 c++ 변수 (블프에서 접근 불가)
int32 NavtiveOnlyMember;
// 블루프린트, 그래프에 액세스 할 수 없으나
// UE4의 리플렉션, 스마트 포인터, 가비지 컬렉션 시스템에서 관리됨
UPROPERTY()
UObject* SafeObjectPointer;
}
구조체의 사용법은 UClass와 크게 다르지 않다.
언리얼 오브젝트 포인터를 선언할 경우에는, UPROPERTY() 매크로를 붙여줘야지만 자동으로 메모리 관리를 한다는 것을 명심하자!
$$ \color{gray}\footnotesize\textsf{c++도 사실 구조체와 클래스는 거의 같다고 보면 되니까! c++을 기반으로 한 언리얼도 그렇지 싶다!} $$
UStruct는 데이터 저장 및 전송에 특화된 가벼운 객체이다.
대부분 GENERATED_BODY 매크로를 선언한다.
왜냐하면 리플렉션, 직렬화 같은 유용한 기능을 지원하기 때문이다.
해당 매크로를 선언한 경우 내부적으로는 UScriptStruct 클래스로 구현된다.
→ 이 경우에는 제한적으로 리플렉션을 지원한다. UPROPERTY()만 선언할 수 있고, 함수 UFUNCTION()은 선언할 수 없다. 이것이 언리얼 오브젝트와의 큰 차이점이다.
언리얼 엔진의 구조체 이름은 F로 시작한다. ⇒ 이는 곧 언리얼 엔진이 메모리를 관리해주지 않음을 뜻한다 !
왜 이렇게 설계했을까? 왜냐하면, 말 그대로 데이터 용도의 가벼운 객체로만 사용하는 용도이기 때문이다.