|
RTTI에 대해 공부를 하였습니다
RTTI가 실행중에 객체의 정보를 얻는 것을 말하는것 같은데
근데 이해가 안되는게 몇가지 있습니다
1. 왜 RTTI가 필요한가??
-> 다형성 (같은 이름 다름 기능) 즉 virtual와 같은 가상함수를 자식 클래스에서 각각 재정의했을경우
그리고 부모 클래스에 자식클래스를 할당 했을 경우
즉) MainClass* main = new chaildClass; 이런식으로 선언을 했을 경우 RTTI를 사용해서 main이
chaildClass의 객체라는 것을 알려주는 것인데...이게 왜 굳이 필요한건가요??
애초에 정의를 할 때 자식 클래스를 할당을 했는데 굳이 이것이 내가 맞게 자식 클래스를 할당했을지
단순히 확인을 위해 사용된다는데(인터넷 찾아보니 RTTI설명한 것중에 나와있었음) 단순히 이 이유만은 아닐 것
같아서요...
그런데 MFC 속성 창을 보니 런타임 형식 정보 사용을 예라고 설정되어 있더라구요 즉 이말은
MFC에서는 RTTI를 사용하겠다는 소리이고.. RTTI를 사용하는 곳이 BEGIN_MESSAGE_MAP, END_MESSAGE_MAP 뭐
이런 define문에서 사용되는것 같은데 맞나요?? (RTTI 예제 중 define처리해서 표현한게 있길래 추측입니다)
그렇다면 왜 MFC에서는 RTTI를 어떤 경우에 왜 사용을 하는것인지 궁금합니다...
사용방법이나 예제 같은건 쉽게 구해서 공부를 했는데 정작 이것이 왜 필요한지 왜 사용되는지는 잘 설명이
되어 있질 않더라구요...
2. RTTI는 가상테이블에만 존재한다??
-> 가상함수를 사용하는 클래스에 국한되어 사용되도록 되어 있으니 가상함수테이블에 RTTI가 저장되는건
이해가 갑니다 그런데 이 RTTI를 어떤식으로 호출하게되는건가요??
가상함수를 정의되어 있는 클래스를 b라고 객체선언을 했을 경우 메모리상에 가상테이블을
가리키는 포인터 값을 가지고 있고 이 포인터 값을 따라가면 가상함수테이블 해당 클래스가 가지고 있는
가상함수의 주소를 배열처럼 쭉 가지고 있는데 그럼 RTTI는 가상함수 주소값 처럼 RTTI주소값(?)이 가상함수
테이블에 나타나 있는건가요?? RTTI가 가상함수 테이블에 어떤 형태로 저장되어 있는지 궁금합니다...
3. 용어 정리
-> RTTI가 실행중에 객체의 정보를 얻는 것을 말하는것이라는데 RTTI 자체가 어떤 건가요?
클래스 타입인건가요?? 아니면 그냥 용어인가요?? 아니면 객체(?)인가요??
RTTI라는 새로운 개념에 대해 이것저것 알아가고 있는데 위의 질문에 대한 답은 잘 없네요...
3번 질문에 대해서 어떤 분이 언어의 기능, 혹은 컴파일러의 기능을 칭하는 명칭이라고도 하는데...이게 무슨뜻인지
이해가가질 안아서 같이 문의드립니다...
|