개발자 면접 공부/언리얼 엔진

RTTI vs Reflection

chogyujin 2024. 3. 11. 16:28
728x90

1. 개요

오늘은 RTTI vs Reflection 에대해서 알아보도록 하겠습니다.


2. RTTI

RTTI 는 Run Time Type Information 의 약자로 C++에 핵심 기술입니다.
보통 virtual 함수를 통해 실행시간에 클래스의 정보를 가져오는 역할을 합니다.
실행시간에 정보를 가져온다는 점이 특징이며, RTTI는 객체의 정보 및 함수 오버라이딩을 할수있어 다양성 성격을 띄우지만 변수를 가져오지 못합니다.

https://chogyujin-study.tistory.com/25

 

C++ RTTI 에 대해

오늘은 RTTI에 대해 공부하겠습니다. RTTI란? Run Time Type Information의 약자로 프로그램 실행 중에 개체의 형식이 결정될 수 있도록 하는 매커니즘입니다. 다시 말해 실행중 포인터가 가르키는 객체의

chogyujin-study.tistory.com


3. Reflection

리플렉션 기능은 컴파일 시간에 객체들의 정보들을 수집하여 실행시간에 타입 및 정보등을 얻을수 있는 시스템입니다.
RTTI보다 상위 호완이며 C++에서는 사용을 할수가 없습니다.
대신 C#, JAVA에서는 사용할수 있습니다.
그래서인지 언리얼엔진에서는 이 리플렉션 기능을 추가했는데 프로퍼티 시스템이라고 불립니다.
UPROPERTY나 UCLASS, UFUNCTION 을 통해 맴버 변수, 맴버 함수, 객체 정보등을 얻을수 있습니다.

https://chogyujin-study.tistory.com/71

 

언리얼 엔진의 리플렉션 (프로퍼티)

오늘은 언리얼 엔진의 리플렉션에 대해 알아보도록 하겠습니다. 1. 리플렉션? 리플렉션이라는 것은 자바나 C#등에서 지원하지만, 언리얼 엔진에서 사용되는 C++은 지원을 하지 않습니다. 그럼 어

chogyujin-study.tistory.com


4. 뭔 차이냐 ?

그래서 결국 RTTI 랑 Reflection이랑 차이가 무엇이냐면

  1. 정보를 얻는 시점이 컴파일시간때냐 아니면 실행시간때이냐(정확히 말하면 RTTI 즉 virtual Function으로 얻는것은 일단 함수 자체는 코드에 저장된다. 하지만 가상함수 포인터는 생성자 실행때 가르키게된다.)
  2. 맴버 변수도 정보를 얻을수 있냐 없냐

이러한 차이가 있습니다.

아래의 표를 보면서 확인해보겠습니다.

구분/기술 RTTI Reflection
언제 정보를 얻는가? 실행 시간때 정보를 얻음(가상 함수 포인터) 컴파일 때(언리얼은 프로퍼티 시스템이라고 부름)
맴버 변수를 얻을수있냐? 불가능(맴버 함수랑 객체 정보만 얻을수 있음) 가능(맴버 변수까지 실시간에 알수있음)