정리
자바 8 전에는 기존 구현체를 깨뜨리지 않고 인터페이스에 메서드를 추가할 방법이 없었다.
하지만 위험이 완전히 사라진 것은 아니다.
자바 8 에서는 핵심 컬렉션 인터페이스들에 다수의 디폴트 메서드가 추가되었다. 주로 람다를 사용하기 위해서다.
생각할 수 있는 모든 상황에서 불변식을 해치지 않는 디폴트 메서드를 작성하기란 어려운법이다.
디폴트 메서드는 컴파일에 성공하더라도 기존 구현체에 런타임 오류를 일으킬 수 있다.
핵싱은 명백하다. 디폴트 메서드라는 도구가 생겼더라도 인터페이스를 설계할 때는 여전히 세심한 주의를 기울여야한다.
'개발 > EffectiveJava' 카테고리의 다른 글
ITEM23 태그 달린 클래스보다는 클래스 계층구조를 활용하라. (0) | 2020.03.10 |
---|---|
ITEM22 인터페이스는 타입을 정의하는 용도로만 사용하라. (0) | 2020.03.10 |
ITEM20 추상 클래스보다는 인터페이스를 우선하라. (0) | 2020.03.10 |
ITEM19 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라. (0) | 2020.03.10 |
ITEM18 상속보다는 컴포지션을 사용하라 (0) | 2020.03.10 |