
140
이펙티브 러스트
아이템
13
: 디폴트 구현을 사용해 필수 트레이트 메서드를 최소화
하라
트레이트를 설계할 때는 트레이트를 구현하는 프로그래머(구현자 )와 트레이트를 활용하는 프
로그래머 (사용자)라는 두 종류의 사용자를 고려해야 한다. 트레이트 설계가 어려운 이유 중
하나는 바로 두 사용자의 요구 사항이 서로 상반되기 때문이다.
●
구현자의 편의를 위해서는 목적 달성에 필요한 최소한의 메서드만 트레이트에 두는 것이 좋다.
●
활용자의 편의를 위해서는 해당 트레이트를 사용할 수 있는 주된 방법을 모두 포괄하도록 메서드를 다양
하게 제공하는 것이 좋다.
이렇게 상충된 요구 사항을 균형 있게 반영하려면 사용자의 편의를 위해 메서드를 다양하게 제
공하는 동시에, 인터페이스에서 제공하는 메서드 중에서도 기본적인 연산으로도 만들 수 있도
록 디폴트 구현을 제공하면 된다.
이에 대한 간단한 예로 반복할 항목 수를 알고 있는
Iterator
인
ExactSizeIterator
에 정의
된
is
_
empty
()
메서드가 있다.
8
이 메서드의 디폴트 구현은 다음과 같이 트레이트 메서드인
len
()
기반으로 구현돼 있다.
fn is_empty(&self) -> bool {
self.len() == 0
}
디폴트 구현은 어디까지나 디폴트일 뿐이다. 해당 트레이트 구현에서 반복자가 비어 ...