더북(TheBook)

09 Collection으로부터 Collection2라는 서브클래스를 만들고, filtertrue를 리턴하는 각 요소를 대상으로 액션(action)을 적용하는 디폴트 메서드인 void forEachIf(Consumer<T> action, Predicate<T> filter)를 추가하라. 이 디폴트 메서드를 어떻게 사용할 수 있는가?

10 Collections 클래스의 메서드들을 살펴보자. 만일 하루 동안 왕이 된다면 어느 인터페이스에 각 메서드를 둘 것인가? 각 메서드는 디폴트 메서드가 될 것인가, 정적 메서드가 될 것인가?

11 두 인터페이스 IJ를 구현하는 클래스가 있다고 가정하자. 각각은 void f() 메서드를 포함한다. fI의 추상 메서드, 디폴트 메서드 또는 정적 메서드인 경우와 J의 추상 메서드, 디폴트 메서드 또는 정적 메서드인 경우 정확히 무슨 일이 일어나는가? 클래스가 슈퍼클래스 S를 확장하고 인터페이스 I를 구현하며, 둘 모두 void f() 메서드를 포함하는 경우에 대해서도 무슨 일이 일어나는지 설명하라.

12 과거에는 인터페이스에 메서드를 추가하면 기존 코드를 망가뜨릴 수 있기 때문에 잘못된 형태라고 했다. 하지만 이제는 디폴트 구현을 함께 제공한다면 새로운 메서드를 추가하는 것도 괜찮다고 한다. Collection 인터페이스의 새로운 stream 메서드가 레거시 코드 컴파일을 실패하게 하는 시나리오를 설명하라. 바이너리 호환성은 어떠한가? JAR 파일에 들어 있는 레거시 코드는 여전히 실행될 것인가?

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.