[Effective Java 3/e] 아이템 21 - 인터페이스는 구현하는 쪽을 생각해 설계하라
아이템 21 - 인터페이스는 구현하는 쪽을 생각해 설계하라
- 모든 상황에서 불변식을 해치지 않는 디폴트 메서드를 작성하기란 어렵다.
- 디폴트 메서드는 기존 구현체에 런타임 오류를 일으킬 수 있다.
- 인터페이스를 설계 할 때는 세심한 주의를 기울여야 한다.
자바 8의 Collection 인터페이스에 추가된 디폴트 메서드
default boolean removeIf(Predicate<? super E> filter) {
Objects.requireNonNull(filter);
boolean result = false;
for (Iterator<E> it = iterator(); it.hasNext();) {
if (filter.test(it.next())) {
it.remove();
result = true;
}
}
return result;
}
- 아파치 SynchronizedCollection는 모든 메서드에 주어진 락 객체로 동기화한 후 내부 컬렉션 객체에 기능을 위임하는 래퍼 클래스
- removeIf를 재정의 하지 않았으므로 락 객체 사용 불가