러스트는 상속의 두 목적을 트레이트의 서로 다른 기능으로 분리한다

상속은 코드 재사용과 타입 대체를 한 계층에 묶는다. 러스트는 필요한 동작만 계약으로 표현해 불필요한 부모 상태와 메서드까지 물려받지 않는다.

필요 1 공통 구현을 재사용한다

여러 타입이 같은 기본 동작을 공유하되 필요할 때 바꾸고 싶다.

트레이트 기본 메서드

trait가 기본 구현을 주고 각 타입은 필요한 메서드만 재정의한다.

필요 2 여러 타입을 같은 자리에서 쓴다

공통 능력을 가진 값을 하나의 함수나 컬렉션에서 다루고 싶다.

제네릭·트레이트 객체

T: Trait는 정적 다형성, dyn Trait는 런타임 대체를 제공한다.

먼저 “구현을 공유하려는가, 타입을 대체하려는가”를 묻는다. 목적을 나누면 기본 메서드, 트레이트 바운드, 트레이트 객체 중 필요한 도구만 선택할 수 있다.