리플렉션 시스템을 사용하여 런타임중에 해당 오브젝트가 특정 함수를 가지고 있는지 체크도 할수 있고 실행도 가능하다.
UFunction* DoLessonFunc = Teacher->GetClass()->FindFunctionByName(TEXT("DoLesson"));
if (DoLessonFunc)
{
Teacher->ProcessEvent(DoLessonFunc, nullptr);
}
리플렉션 시스템을 사용하여 접근 지시자와 무관하게 값을 설정할 수도 있다 (Getter,Setter 대신에 활용도 가능하다)
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"), *NewTeacherName);
}
언리얼 엔진의 기본 프레임워크는 리플렉션을 활용해 구축되어있으므로 언리얼 엔진을 이해하기 위해서는 리플렉션 시스템을 이해가 필요하다.