Advanced Traits
고급 트레이트는 호출자가 보게 될 타입 계약을 다듬는 도구다
연관 타입, 기본 제네릭, 완전 정규화 문법, 슈퍼트레이트, 뉴타입은 모두 API 표면과 구현 가능 범위를 조정한다.
계약
호출자가 어떤 타입과 메서드를 기대할지 먼저 정한다.
충돌
같은 이름의 메서드는 완전 정규화 문법으로 분리한다.
제한
뉴타입은 외부 타입에 새 의미와 새 구현 지점을 만든다.
Assoc Type
출력 타입을 트레이트에 묶기
구현마다 하나의 Item 타입을 명확히 고정한다.
Default Generic
흔한 타입은 기본값으로
대부분의 호출은 간단하게 두고, 필요한 경우만 바꾼다.
FQS
모호한 호출을 명시
어느 트레이트의 메서드인지 경로로 분명히 쓴다.
Newtype
외부 타입에 새 껍질 씌우기
고아 규칙을 피하고 원하는 기능만 노출한다.
도구 쓸 때 주의점
슈퍼트레이트 한 트레이트가 다른 트레이트 기능을 전제로 할 때 구현자가 만족해야 할 경계가 늘어난다.
완전 정규화 타입 메서드와 트레이트 메서드 이름이 겹칠 때 호출 경로를 길게 쓰더라도 모호성을 제거한다.
뉴타입 외부 타입에 외부 트레이트를 구현해야 할 때 내부 타입의 메서드를 자동으로 모두 갖지는 않는다.
API부터 보기
구현 편의보다 호출자가 읽을 타입 계약을 먼저 정한다.
모호성 제거
이름 충돌은 추론에 맡기지 말고 경로로 분리한다.
노출 범위 조절
뉴타입은 내부 타입을 그대로 공개할지 제한할지 결정하게 해준다.