언리얼 오브젝트 리플렉션 시스템의 활용
- 언리얼 오브젝트 리플렉션 시스템을 사용해 언리얼 오브젝트를 다룸
#include "MyGameInstance.h"
#include "Student.h"
#include "Teacher.h"
UMyGameInstance::UMyGameInstance()
{
SchoolName = TEXT("기본학교");
}
void UMyGameInstance::Init()
{
Super::Init();
UE_LOG(LogTemp, Log, TEXT("============================="));
UClass* ClassRunTime = GetClass();
UClass* ClassCompile = UMyGameInstance::StaticClass();
UE_LOG(LogTemp, Log, TEXT("학교를 담당하는 클래스 이름: %s"), *ClassRunTime->GetName());
SchoolName = TEXT("중앙대학교");
UE_LOG(LogTemp, Log, TEXT("학교 이름: %s"), *SchoolName);
UE_LOG(LogTemp, Log, TEXT("학교 이름 기본값: %s"), *(GetClass()->GetDefaultObject<UMyGameInstance>()->SchoolName));
UE_LOG(LogTemp, Log, TEXT("============================="));
UStudent* Student = NewObject<UStudent>();
UTeacher* Teacher = NewObject<UTeacher>();
Student->SetName(TEXT("학생1"));
UE_LOG(LogTemp, Log, TEXT("새로운 학생 이름 %s"), *Student->GetName());
FString CurrentTeacherName;
FString NewTeacherName(TEXT("명랑코딩"));
FProperty* NameProp = UTeacher::StaticClass()->FindPropertyByName(TEXT("Name"));
if (NameProp)
{
NameProp->GetValue_InContainer(Teacher, &CurrentTeacherName);
UE_LOG(LogTemp, Log, TEXT("현재 선생님 이름 %s"), *CurrentTeacherName);
NameProp->SetValue_InContainer(Teacher, &NewTeacherName);
UE_LOG(LogTemp, Log, TEXT("새로운 선생님 이름 %s"), *Teacher->GetName());
}
UE_LOG(LogTemp, Log, TEXT("============================="));
Student->DoLesson();
UFunction* DoLessonFunc = Teacher->GetClass()->FindFunctionByName(TEXT("DoLesson"));
if (DoLessonFunc)
{
Teacher->ProcessEvent(DoLessonFunc, nullptr);
}
}

정리
- 리플렉션 시스템을 사용해 언리얼 오브젝트의 속성과 함수를 이름으로 검색해서 정보를 가져올 수 있다.
- 리플렉션 시스템을 사용해 접근 지시자와 무관하게 값을 설정할 수 있다.
- 리플렉션 시스템을 사용해 언리얼 오브젝트의 함수를 호출할 수 있다.
- 리플렉션 기능을 사용해서 디자인을 하는 것이 바람직한가라는 것에 대해서는 사용하는 사람에 달려있다.
- 언리얼 엔진의 기본 프레임웍이 리플렉션을 활용해서 많이 구축되어 있기 때문에 언리얼 엔진을 이해하기 위해서는 리플렉션 시스템을 이해하는 것이 필요하다.