상세 컨텐츠

본문 제목

언리얼 C++ 리플렉션 시스템 활용하기 (Part 2)

공부/C++

by micalcomanie 2025. 3. 4. 13:14

본문

728x90
반응형
SMALL

 

1. 리플렉션 시스템이란?

언리얼 엔진의 **리플렉션 시스템(Reflection System)**은 실행 중인 프로그램이 자기 자신의 클래스, 변수, 함수 등의 정보를 조회하고 수정할 수 있는 기능입니다.
이를 통해 개발자는 동적 객체 관리, 에디터 통합, 블루프린트 연동, 네트워크 리플리케이션 등 다양한 기능을 활용할 수 있습니다.

이번 글에서는 리플렉션 시스템을 활용하여 언리얼 오브젝트의 특정 속성과 함수를 이름으로 검색하고 조작하는 방법을 살펴보겠습니다.


2. 리플렉션 시스템을 사용한 속성 및 함수 검색

✅ 특정 속성(Property) 검색하기

리플렉션 시스템을 사용하면 언리얼 오브젝트의 특정 속성을 문자열 이름으로 검색하여 값에 접근할 수 있습니다. 예제 코드를 살펴보겠습니다.

#include "MyGameInstance.h"
#include "Student.h"
#include "Teacher.h"

void UMyGameInstance::Init()
{
    Super::Init();

    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("============================"));
}

✅ 속성 변경 결과

위 코드를 실행하면 UTeacher 클래스의 Name 프로퍼티를 직접 검색하여 값을 변경할 수 있습니다. 이는 private 속성이라도 리플렉션을 사용하면 접근이 가능하다는 것을 의미합니다.


3. 리플렉션을 사용한 함수 호출

리플렉션 시스템을 활용하면 객체의 특정 함수를 동적으로 호출할 수도 있습니다.

UFunction* DoLessonFunc = Teacher->GetClass()->FindFunctionByName(TEXT("DoLesson"));
if (DoLessonFunc)
{
    Teacher->ProcessEvent(DoLessonFunc, nullptr);
}

위 코드에서는 UTeacher 객체의 DoLesson 함수를 FindFunctionByName() 으로 찾고, ProcessEvent() 를 사용하여 실행합니다. 이는 동적 호출이 필요한 경우 유용하게 사용할 수 있습니다.

✅ 실행 결과

홍길동님이 수업에 참여합니다.
3년차 선생님 김선생님이 수업을 듣습니다.

이처럼 ProcessEvent()를 사용하면 특정 오브젝트의 함수를 실행 중에 동적으로 호출할 수 있습니다.


 

  1. 리플렉션 시스템을 사용해 언리얼 오브젝트의 특정 속성과 함수를 이름으로 검색할 수 있다.
  2. 접근 지시자(private, protected 등)와 관계없이 값에 접근하고 수정할 수 있다.
  3. ProcessEvent()를 사용하여 언리얼 오브젝트의 함수를 동적으로 실행할 수 있다.

언리얼 엔진의 리플렉션 시스템을 활용하면 보다 유연하고 동적인 코드 작성이 가능합니다. 특히, 런타임에서 클래스 정보를 탐색하고 수정해야 하는 경우, 리플렉션을 적극 활용하면 개발의 효율성을 높일 수 있습니다.

 

728x90
반응형
LIST

관련글 더보기