반응형
1. 동적 바인딩
- 함수와 함수가 서로 호출 및 피호출 관계가 되는 것을 바인딩이라 지칭한다.
- 바인딩 시점이 Compile-time 이면 Static binding 이라고 한다.
- 바인딩 시점이 Run-time 이면 Dynamic binding ( Lately binding ) 이라고 한다.

2. 가상 함수 테이블 (vtable)
- vtable은 클래스 멤버 함 수 중 가상화 된 함수들에 대한 포인터의 배열이다.
- 가상 함수는 함수 포인터 배열을 참조해 호출할 함수를 결정한다. (Dynamic binding)
- 상속관계일 때 vtable의 값은 파생 클래스 생성자가 호출되는 시점에 업데이트 되는 것이 특징이다.

Ex) 기본 클래스에서 파생 클래스를 생성하고 virtual 형식으로 소멸자 함수와 onSetData 함수를 생성하면, 기본 클래스가 실행되는 순간 vtable에 소멸자 함수와 onSetData 함수의 주소가 등록된다.
여기서 파생 클래스에 onSetData를 재정의 했을 경우, 파생 클래스가 실행되는 순간 vtable의 소멸자 함수 자리에 자신의 소멸자 함수, onSetData 함수의 주소에 자신의 onSetData 함수를 Overwrite 시킨다.
* 개인적인 생각 : 가상 함수는 제작자가 미래 시점의 사용자들을 위해서 남겨둔 안배와 같은 것이다. 따라서 vtable에 virtual 선언된것들이 임시로 담겨있다가 외부의 수정이 발생하는 그때그때 변경되는 것이고, 이에 따라서 생성자와 소멸자도 호출되는 순서가 다른것이다.
반응형
'All Development' 카테고리의 다른 글
| C++) 상속과 형변환 (2) | 2024.05.01 |
|---|---|
| C++) 순수 가상 클래스 (0) | 2024.04.17 |
| C++) 가상 함수 (0) | 2024.04.03 |
| C++) 상속의 생정자와 소멸자 (3) | 2024.03.29 |
| C++) 메서드 재정의 (0) | 2024.03.27 |