공유할 것은 동작인가
같은 메서드 계약이면 트레이트와 기본 구현을 먼저 검토한다.
클래스 상속을 그대로 찾기보다 데이터와 동작의 결합, 공개 범위, 코드 공유, 다형성을 각각 어떤 러스트 장치로 해결하는지 분리해서 본다.
struct, enum, impl이 같은
역할을 나눠 맡는다.
pub 선택으로 경계를 세운다.
같은 메서드 계약이면 트레이트와 기본 구현을 먼저 검토한다.
공통 필드가 핵심이면 내부 구조체를 포함하는 조합이 단순하다.
런타임에 다양한 구현을 섞어야 하면 dyn Trait이 후보가
된다.
정적 디스패치가 맞으면 제네릭과 트레이트 바운드로 단형화한다.
필드는 감춰져 있고, 호출자는 메서드와 트레이트 계약만 안다.
단순 재사용을 위해 깊은 타입 계층을 흉내 내고 있다.
코드 공유는 기본 메서드, 데이터 공유는 조합, 대체 가능성은 트레이트로 분리한다.