Trait Object

Trait Object Dynamic Dispatch

dyn Trait 값은 데이터 포인터와 vtable 포인터를 함께 들고, 런타임에 실제 타입의 메서드 구현을 찾아 호출한다.

Box<dyn Trait> 호출이 실제 구현으로 가는 경로

vtable

Fat Pointer

트레이트 객체는 데이터 주소와 vtable 주소를 함께 가진다.

VTable

drop, size, align, 메서드 함수 포인터 정보가 들어 있다.

Dynamic Dispatch

컴파일 시 타입 하나로 고정하지 않고 런타임 표를 따라 호출한다.

Tradeoff

유연성은 얻지만 인라인 최적화와 정적 디스패치 장점은 줄어든다.

Box<dyn Trait>data ptrvtable ptrmethod lookupcall
행동 계약

트레이트 객체는 여러 구체 타입을 한 컬렉션에 담을 때 유용하다. 대신 호출 비용과 객체 안전성 조건을 함께 봐야 한다.