trait object 통과 기준

트레이트 객체 사용

컴파일 시점 타입이 하나로 정해지는 제네릭과 달리, trait object는 여러 구현체를 한 컬렉션에 담는 유연성을 준다.

trait

공통 메서드

먼저 여러 타입이 공유해야 할 최소 동작을 trait으로 작게 정의한다.

계약
box

크기 지우기

구체 타입 크기가 다르므로 Box, Rc, Arc 같은 포인터 뒤에 dyn Trait을 둔다.

indirection
dispatch

동적 호출

메서드 호출은 vtable을 통해 런타임에 결정되며 약간의 비용이 있다.

runtime dispatch
object safe

객체 안전성

제네릭 메서드나 Self 반환처럼 객체 안전성을 깨는 항목을 피한다.

object safety
choose

트레이트 객체 사용 선택 기준

동일 타입 반복은 제네릭, 서로 다른 타입 혼합은 trait object가 자연스럽다.

generic vs dyn