리플렉션 시스템이란?
*리플렉션(Reflection)은 프로그램이 실행시간에 자기 자신을 조사하는 기능입니다. 이는 엄청나게 유용한 데다 언리얼 엔진 테크놀로지의 근간을 이루는 것으로, 에디터의 디테일 패널, 시리얼라이제이션, 가비지 콜렉션, 네트워크 리플리케이션, 블루프린트/C++ 커뮤니케이션 등 다수의 시스템에 탑재된 것입니다. 그러나 C++ 는 어떠한 형태의 리플렉션도 지원하지 않아, 언리얼에는 자체적으로 C++ 클래스, 구조체, 함수, 멤버 변수, 열거형 관련 정보를 수집, 질의, 조작하는 별도의 시스템이 구축되어 있습니다. 전형적으로 이러한 리플렉션은 '프로퍼티 시스템'이라고 부르는데, '리플렉션'은 그래픽 용어이기도 하기 때문입니다.**리플리케이션 시스템은 옵션입니다. 리플렉션 시스템에 보이도록 했으면 하는 유형이나 프로퍼티에 주석을 달아주면, Unreal Header Tool (UHT)가 그 프로젝트를 컴파일할 때 해당 정보를 수집합니다.*
오브젝트가 리플렉션을 가지게 하려면 C++ 클래스 헤더 파일에 아래와 같이 특수한 include를 추가해야 한다.
보통은 엔진에서 C++ 클래스를 생성 시 자동으로 추가해준다.
text
// MyActor.h
...
#include "MyActor.generated.h" // 리플렉션 시스템을 사용
// 헤더에서 선언된 마지막 include여야 컴파일러에서 오류가 나지 않음.
UCLASS() // 리플렉션된 클래스
class UE5Template AMyActor : public AActor
{
GENERATED_BODY()
...
public:
...
UFUNCTION(BluepirntCallable) // 리플렉션된 함수
void Testfunction();
UPROPERTY(EditAnywhere) // 리플렉션된 변수
int32 variable;
};
USTRUCT(Atomic, BlueprintType) // 리플렉션된 구조체
struct FCustomStruct
{
GENERATED_BODY()
};
UENUM()
enum class ECustomEnum // 리플렉션된 열거형
{
....
};이렇게 리플렉션이 된 오브젝트는 언리얼 엔진에 존재하는 다양한 시스템들에 활용이 가능하도록 해준다.
- 네트워크 리플리케이션
- 블루프린트와 C++의 연동
- 에디터 내부 기능 활용
- 시리얼라이제이션
- 가비지 컬렉션 등