**동적 디스패치(dynamic dispatch)**는 변수의 선언된 타입이 아니라 객체의 실제 타입에 기반하여 어떤 메서드 구현을 실행할지 결정하는 런타임 메커니즘입니다. 대부분의 class 기반 언어는 이를 **가상 메서드 테이블(vtable)**로 구현합니다.
vtable 모델
각 class는 자신의 메서드 구현을 가리키는 포인터 테이블을 가집니다. 각 객체는 자신의 class vtable을 가리키는 숨겨진 포인터를 보유합니다. 가상 호출은 다음이 됩니다: 객체의 vtable에서 메서드를 찾은 다음 그곳으로 점프한다.
text
Animal a = new Dog();
a.speak();
a ──▶ Dog 객체 ──▶ [Dog vtable]
speak() ──▶ Dog.speak() ← 런타임에 선택됨
컴파일러는 Animal.speak을 하드코딩하지 않습니다. "이 객체가 가리키는 vtable의 슬롯 N을 호출하라"를 내보냅니다.
