Unreal Framework의 USTRUCT
USTRUCT는 UCALSS 매크로처럼 언리얼에서 구조체에 지정하는 매크로이다.
USTRUCT(BlueprintType)
struct FMyStruct
{
GENERATED_BODY()
// 멤버 변수 및 함수 정의
};
이를 통해 reflection 시스템에 구조체를 등록할 수 있다.
여기에는 FVector, FRotator, FQuat 등의 구조체가 여기에 속한다.
이런 구조체들은 보통 작은 크기의 데이터를 저장하며,
UObject나 UClass 내부에서 선언되고 사용되기에,
보통 GC에 의해 삭제되는 일보다 UObject나 UClass가 종료될 때 사라지는 경우가 많다.
USTRUCT는 보통 저장되는 데이터 정도의 크기를 가지기 때문에,
메모리 공간을 많이 차지하지 않는다는 장점이 있다.
그리고 UStruct는 앞에 F가 붙는다~
ex) FVector, FString 등등
Unreal Framework의 UClass
UCLASS()
class UMyClass : public UClass
{
GENERATED_BODY() // 코드 생성 매크로
};
UClass는 언리얼에서 Class를 생성할 때, 작성하는 매크로로 reflection에 클래스를 등록
UClass는 클래스의 속성, 함수, 블루프린트 정보 등 메타데이터를 저장함
그리고 이를 바탕으로 instance를 생성하는데 이때, UObject가 등장함.
Unreal Framework의 UObject
Unreal Engine의 모든 객체에 해당
우리가 UClass로 작성한 Class에서 instance가 생성될 때, 자동으로 UObject로 인식
UObject Vs UStruct
보통 UStruct나 UObject 내부에 사용된다.
UStruct → 저장된 데이터 사이즈와 비슷한 메모리 공간을 차지하는 것에 비해,
UObject → 메타데이터가 함께 있기에 같은 데이터를 저장하더라도 공간 차지가 크다.
그래서 UStruct가 크기가 크지 않아서, GC가 많은 일을 하지 않아도 된다.
그치만, USturct는 안전하지 않다.
However, UStructs do have their limitations. A direct reference to the member structure of another object is not safe.
(이 제한 사항이 어떤걸 말하는 건지 모르겠네…)
아무튼, UStruct 구조체를 직접적으로 사용하는 것은 안전하지 않다.
(되도록이면, 작은 크기로 빠르게 삭제되게 사용하라는 뜻으로 보인다)
그래서 UObject를 사용하는게 크기는 많이 먹지만, 안전하다.
그래도 수천개 instance를 관리해야 하면, UStruct가 확실히 좋은 성능을 보이니 신중히 선택해야 한다.
결론.
UObject → 안전함(GC) + 무거움
UStruct → 불안전함 + 가벼움
댓글 영역