[C++] RTTI (RunTime Type Information, 실시간 타입 정보)란?
정의
RTTI란 실시간 타입 정보의 약자로, 프로그램 실행 중에 데이터 타입에 대한 정보가 필요할 때 사용하는 기능입니다.
즉, 런타임에 개체의 형식이 결정될 수 있도록 하는 메커니즘이라고 볼 수 있습니다.
RTTI를 사용하면 런타임에 객체의 타입을 식별하거나, 클래스 계층에서 특정 클래스가 다른 클래스의 하위 클래스인지 확인하는 등의 작업을 수행합니다.
RTTI는 클래스 타입 관련 정보가 vtable(가상함수 테이블)에 같이 저장되기 때문에, 가상 함수가 있는 클래스에 대해서만 작동합니다. 다르게 말하면 가상함수가 없는 클래스는 실행 중에 타입 정보를 알아야 할 필요가 없다고 볼 수 있습니다.
또한, 컴파일러는 컴파일 번역 작업이 끝나면 타입 이름을 실행파일에 남길 필요가 없어 RTTI로 정보를 가져옵니다.
RTTI를 통해 데이터 타입을 얻어올 때 사용하는 것이 type-id 연산자입니다.
> 추가자료
- RTTI는 C++언어가 제공하는 표준이므로 호환성과 이식성이 확보되어 있다.
- RTTI가 제대로 작동하기 위해선 모든 클래스에 타입과 관련된 정보를 작성해야 하므로 프로그램이 느려지고 용량이 커지는 문제가 있다. 따라서 C++에는 RTTI 기능을 사용할 것인지 아닌지에 대한 옵션 조정이 가능하다.
RTTI에 포함된 정보
RTTI에는 타입정보(type_info)와, 동적 캐스팅 정보(dynamic_cast), 예외처리 정보(exception) 등이 있습니다.
타입정보인 type_info 객체는 typeid 연산자를 사용하여 얻을 수 있습니다. 이는 객체의 타입을 문자열로 반환하는 name() 메서드를 가지고 있습니다.
동적 캐스팅은 dynamic_cast 연산자를 통해 이루어지며 특정 타입의 객체를 다른 타입으로 캐스팅할 수 있습니다.
C++의 예외 처리 시스템은 RTTI 정보를 사용합니다. throw 문에서 발생한 예외 객체의 실제 타입을 확인하고, catch 문에서 적절한 핸들러를 찾는 데 RTTI 가 사용됩니다.
typeid 연산자
RTTI는 type-id 기반으로 실행되는데, type-id는 해당 타입에 대한 Hash 자료형을 의미합니다.
클래스의 이름이나 객체, 또는 객체를 가리키는 포인터를 피연산자로 취하며 피연산자의 타입을 조사합니다.
typeid를 사용하기 위해선 #include <typeinfo> 헤더파일을 포함해야 합니다.
캐스팅 연산자 구문에서 type-id는 static_cast<type-id>(expression) 과 같이 사용하고, 리플렉션이 실제로 이러한 type-id를 기반으로 만들어졌습니다.
> RTTI와 리플렉션(언리얼)
RTTI와 리플렉션은 객체의 메모리를 참조하여 객체에 대한 정보를 얻어온다는 궁극적인 목표는 같다.
그러나, 리플렉션은 좀 더 고 수준의 언어로 C++에서는 사용할 수 없고, 언리얼 C++에서 사용되는 개념이다.
또한, 언리얼 C++에서는 자체적으로 구현한 리플렉션 시스템을 사용하므로 C++의 RTTI 기능을 비활성화한다. 대신 더 넓은 범위의 기능을 제공하면서도, RTTI가 가져올 수 있는 추가적인 오버헤드를 줄이기 위해 리플렉션 시스템을 사용하는 것이다.
typeid 연산자의 결과로는 const std::type_info& 가 반환되며 type_info는 타입의 정보를 가지고 있는 클래스입니다. type_info의 name() 이라는 멤버함수를 통해 타입의 이름을 얻을 수 있습니다.
> typeid 예제

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=rhkdals1206&logNo=221559828570
C++ :: 타입 정보 (RTTI , 캐스트 연산자)
* RTTI (RunTime Type Indormation) (출처 : soen.kr) * RTTI이란? * 실 시간 타입 정보라는 ...
blog.naver.com
https://blockdmask.tistory.com/526
[C++] RTTI, 타입 정보 얻기
안녕하세요. BlockDMask입니다. 오늘은 RTTI라는 것에 대해서 알아보려고 하는데요, 간단히 말해서 실행시간에 타입의 정보를 얻을 때 사용하는 것입니다. 즉 타입을 알아올 때 사용. 1. C++ RTTI란? 2. C
blockdmask.tistory.com