0. Introduction

<aside> 💡 과정 목표

  1. default method에 대해 세밀하게 이해해 봅시다.

  2. 기존 인터페이스에 default method를 추가할 시 발생할 수 있는 여러 문제점들을 알아보고 왜 이런 일이 발생하는지를 이해해 봅시다.

  3. 아이템의 메인 주제인 인터페이스는 구현하는 쪽을 생각해 설계하라는 말의 의미를 생각하고 알아봅시다.

</aside>

1. default method

1-1. default method와 인터페이스

1-2. default method 작성의 어려움

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;
    }