> For the complete documentation index, see [llms.txt](https://yihyuns-gitbook.gitbook.io/today-i-learned/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yihyuns-gitbook.gitbook.io/today-i-learned/java/effective-java/item_21._interface_default_method.md).

# Item 21. 인터페이스는 구현하는 쪽을 생각해 설계

## 자바 8에 추가된 인터페이스의 디폴트 메서드

* 자바 8 이전까지는 `인터페이스에 새로운 메서드가 추가될 일은 없다`는 가정 하에 클래스가 인터페이스를 구현함
* 자바 8에서 인터페이스에 디폴트 메서드를 추가할 수 있게 되고, 인터페이스에 메서드를 추가하더라도 클래스가 반드시 이를 오버라이딩하지 않아도 되는 길이 열림
* 하지만 이렇게 구현된 디폴트 메서드가 모든 기존 구현체와 잘 연동되리라는 보장은 없음

## 디폴트 메서드를 추가할 때 유의할 점

* 기존 인터페이스에 추가하려는 경우 특히 더 조심해야 함
  * 잘못된 추가는 기존 클라이언트를 망가뜨릴 수 있음
* 새로운 인터페이스에 추가하는 경우, 릴리스 전 충분한 테스트를 거치고 추가해야 함
