<aside> 💡 과정 목표
default method에 대해 세밀하게 이해해 봅시다.
기존 인터페이스에 default method를 추가할 시 발생할 수 있는 여러 문제점들을 알아보고 왜 이런 일이 발생하는지를 이해해 봅시다.
아이템의 메인 주제인 인터페이스는 구현하는 쪽을 생각해 설계하라는 말의 의미를 생각하고 알아봅시다.
</aside>
public abstract
로 선언되며 abstract
키워드가 붙기 때문에 인터페이스를 구현한 하위 클래스들은 반드시 새로 추가된 메서드를 구현해야 하기 때문입니다.default type name(param)
과 같이 선언할 수 있으며 내부에 구현 코드를 넣을 수 있습니다.Collection
은 JDK 1.8에 새롭게 추가된 Ramda Expression를 활용하기 위해 많은 수의 default method가 추가되었습니다. 책에서 소개한 예시인 Collection
인터페이스의 removeIf()
메서드를 봅시다.default boolean removeIf(Predicate<? super E> filter) {
Objects.requireNonNull(filter);
boolean removed = false;
final Iterator<E> each = iterator();
while (each.hasNext()) {
if (filter.test(each.next())) {
each.remove();
removed = true;
}
}
return removed;
}
removeIf()
메서드는 filter
라는 Predicate
을 받습니다. 이때 Predicate
는 Boolean Expression으로 조건식을 의미합니다. 이 조건에 값을 넣어 참이 반환된다면 그 원소를 삭제하도록 동작합니다.