상세 컨텐츠

본문 제목

👾 UStruct , UObject , UClass

Study/UNREAL

by J2on 2024. 2. 7. 22:42

본문

 

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 → 불안전함 + 가벼움

 

 

 

https://unrealcommunity.wiki/garbage-collection-overview-95snds3x

 

Garbage Collection Overview | Unreal Engine Community Wiki

Unreal's game-level memory management system uses reflection to implement garbage collection.

unrealcommunity.wiki

 

 

 

 

 

관련글 더보기

댓글 영역