그냥 게임개발자

리플렉션 시스템이란? 본문

Unreal스터디

리플렉션 시스템이란?

sudoju 2024. 1. 1. 15:44

리플렉션 시스템

 

 

리플렉션(Reflection)은 프로그램이 실행시간에 자기 자신을 조사하는 기능.

이는 엄청나게 유용하고 언리얼 엔진 테크놀로지의 근간을 이룸

에디터의 DetailPanel, Serialization, GC, Network Reflication, Blueprint 등 다수의 시스템에 탑재된 것

 

C++은 어떠한 형태의 Reflection도 지원하지 않아, 언리얼에서는 자제척으로 c++ class, Struct, 함수, 멤버 변수, Enum 관련 정보를 수집, 질의, 조작하는 별도의 시스템이 구축되어 있다.

 

리플렉션은 '프로퍼티 시스템'이라고도 부른다, 이유는 '리플렉션'이라는 용어는 그래픽 용어이기도 하기 때문이다.

 

Reflication 시스템은 옵션이다.

Riflection 시스템에 보이도록 했으면 하는 유형이나 프로퍼티에 주석을 달아주면 UHT가 그 프로젝트를 컴파일 할 때 해당 정보를 수집함.

 

헤더에 리플렉션이 있는 유형으로 마킹 하려면, 파일 상단에 특수한 include를 추가해줘야 함.

시스템 구현에도 필요함을 UHT에 알려준다.

#include "FileName.generated.h"

이러면 이제 UENUM(), UCLASS(), USTRUCT(), UFUNCTION(), UPROPERTY()를 사용하여 헤더의 다양한 유형과 멤버 변수 주석을 달 수 있다.

 

 

UPROPERTY()를 굳이 선언해도 되지 않지만, UPROPERTY()를 선언하지 않으면

  • 리플렉션된 프로퍼티가 아닌 것은 해당 리플렉션에 의존하는 시스템 전부에 보이지 않는다는 점만 주의(즉, 리플렉션 되지 않은 UObject 포인터 그대로를 저장하면 보통 가비지 콜렉터가 레퍼런스를 확인할 수 없기 때문에 위험한 일이다.)

결국 UPROPERTY()를 사용하지 않으면 언리얼에 메모리 관리를 맡기지 않고 자기가 직접 메모리 관리를 해줘야 한다.

 

UHT는 실제 C++ 파서가 아니다.

이것은 언리얼 엔진이 코드를 자동으로 생성하는 데 필요한 기능만 제공하는거지 실제 C++ 언어를 UHT가 분석해 가지고 뭔가 컴파일을 진행하는 것이 아니라는 것을 의미.

그렇기 때문에 정교하지 않음

 

프로퍼티 시스템에 대한 유형 계층 구조

UField
 UStruct
  UClass(C++ class)
  UScriptSturct(C++ struct)
  UFunction(C++ function)
 UEnum(C++ enumeration)
 UProperty(C++ member variable of function parameter)

 

UStruct는 기본적인 종합 구조체(C++ 클래스, 구조체, 함수와 같이 다른 멤버를 포함하는 모든 것)이며, (UScriptStruct 인) C++구조체와 헷갈리지 않아야 한다.

UClass는 그 자손으로 함수나 프로퍼티를 포함할 수 있는 반면, UFunction  UScriptStruct는 프로퍼티로만 제한됨.

'Unreal스터디' 카테고리의 다른 글

인터페이스란?  (0) 2024.01.01
Assert(어썰트)  (0) 2024.01.01
언리얼 오브젝트 처리  (1) 2024.01.01
언리얼 오브젝트란  (1) 2024.01.01
캐릭터 인코딩 문서 파악  (1) 2024.01.01