본문 바로가기
개발일지/Unreal&C++

[Unreal] 리플렉션(Reflection)? 작동 원리 및 장단점

by 쫌눈 2025. 4. 4.
728x90
반응형

언리얼 엔진의 리플렉션(Reflection)은 프로그램이 런타임에 클래스, 구조체, 함수, 멤버 변수 등 객체의 메타데이터를 조사하고 조작할 수 있는 시스템이고 언리얼 엔진의 핵심 기능이다.
엔진은 리플렉션 시스템에 의존하므로, 언리얼 엔진에서 효율적으로 개발하려면 사실상 사용이 필수적이다.

에디터, 블루프린트, 직렬화(Serialization), 네트워크 리플리케이션 등 다양한 시스템에서 사용된다.

 

리플렉션의 주요 목적

  1. 런타임 타입 정보 접근
    • 실행 중 특정 객체의 클래스 타입 정보 확인.
         - 예: `GetClass()`를 통해 클래스 정보를 조회.
  2. 동적 객체 생성
  3. 메타데이터 접근 및 조작
    • 변수와 함수의 속성 및 설명을 코드에서 활용.
         - 예: `UPROPERTY()`와 같은 매크로를 통해 변수에 메타데이터를 추가.
  4. 블루프린트와 C++ 연동
    • C++에서 작성된 클래스와 함수, 속성을 블루프린트에 노출하여 비주얼 스크립팅에서 사용할 수 있도록 지원.
  5. 엔진 기능 지원
    • 엔진의 다양한 기능 사용.
      • 직렬화(Serialization) : 객체 데이터를 파일로 저장하거나 네트워크로 전송하기 위한 작업
        • 게임 저장 시스템에서 객체의 상태를 파일로 저장하거나 복원하려면 리플렉션을 통해 변수 정보를 자동으로 처리 UPROPERTY() 매크로
      • 네트워크 리플리케이션(Network Replication)
        • 온라인 멀티플레이어 게임 개발에서 객체의 상태를 서버와 클라이언트 간에 동기화할 때 필요
        • UPROPERTY(Replicated) 매크로를 사용하여 변수의 동기화를 자동으로 처리
        • 네트워크 코드 작성이 간소화 및, 효율적으로 데이터 동기화 구현
      • 가비지 컬렉션(Garbage Collection)
        • 가비지 컬렉션 시스템을 지원하는데 필요
        • UObject기반 클래스들은 가비지 컬렉션 대상

 

리플렉션 시스템의 작동 원리

  1. Unreal Header Tool (UHT)
    • 프로젝트 컴파일 시 UHT가 헤더 파일을 스캔하여 리플렉션 데이터 수집
    • 리플렉션 정보를 기반으로 `.generated.h` 파일을 생성하여 메타데이터와 헬퍼 코드 제공
  2. 매크로 사용
    • UCLASS, UPROPERTY, UFUNCTION 등의 매크로를 사용해 클래스와 멤버를 리플렉션 시스템에 등록
    • 이를 통해 해당 요소들이 블루프린트 및 엔진 시스템에서 인식 및 조작 가능
  3. 런타임 데이터 접근
    • 런타임 중 StaticClass() / GetClass()를 통해 클래스 정보 조회및 활용 가능

 

리플렉션의 장점

  • 런타임에 객체 정보를 동적으로 조회하고 생성할 수 있어, 코드의 확장 및 유연성이 높아진다.
    • StaticClass()/NewObject()
  • c++로 작성된 요소들을 블루프린트에서 사용할 수 있다.
  • 에디터 확장 및 커스터마이징
    • UPROPERTY(EditAnywhere)을 사용하면 에디터에서 조정 가능하도록 표시된다.
  • 가비지 컬렉션 및 직렬화 등의 시스템을 자동으로 관리해 준다.

리플렉션의 단점

  • UHT가 헤더파일을 확인하고. generated.h파일을 생성하는 과정이 추가되므로, 컴파일 시간이 증가한다.
  • 런타임 중 메타데이터 조회 및 조작은 성능 비용 이슈가 있다.
  • 매크로와. generated.h가 많아지면 코드가 복잡해질 수 있다.

 

 

출처

https://www.unrealengine.com/ko/blog/unreal-property-system-reflection

728x90
반응형