아이템 21 - 인터페이스는 구현하는 쪽을 생각해 설계하라.
JAVA ·- 기존 인터페이스에 디폴트 메서드 구현을 추가하는 것은 위험한 일이다.
- 디폴트 메서드는 구현 클래스에 대해 아무것도 모른 책 합의 없이 무작정 “삽입”될 뿐이다.
- 디폴트 메서드는 기존 구현체에 런타임 오류를 일으킬 수 있다.
- 인터페이스를 구현하고 클래스를 상속받았을 때, 둘 다 같은 메서드를 가지고 있다면
클래스가 인터페이스보다 우선이다. 그러므로, 인터페이스에 default 메서드가 있더라도
클래스에서 private 메서드를 가진다면 런타임 오류가 일어날 수 있다. - 비슷한 예로, 디폴트 메서드로 Object 메서드를 재정의 할 수 없다.
- 인터페이스를 구현하고 클래스를 상속받았을 때, 둘 다 같은 메서드를 가지고 있다면
- 디폴트 메서드라는 도구가 생겼더라도 인터페이스를 설계할 때는 세심한 주의를 기울여야 한다.
- 기존 인터페이스에 새로운 메서드(디폴트 메서드)를 추가하면 커다란 위험도 딸려 온다.
- 인터페이스를 구현할 때, 서로 다른 방식으로 최소한 세 가지는 구현을 해보자.