Intro.

디폴트 메소드를 사용하면 기존 코드를 바꾸도록 강요하지 않으면서도 인터페이스를 바꿀 수 있다.

스크린샷 2021-09-13 오전 11.13.40.png

List 인터페이스 내부에 있는 sort메소드를 보면 디폴트 메서드로 구현되어있다.

**default** void sort(Comparator<? super E> c) { <- 디폴트로 선언
    Collections.sort(this, c);
}

변화하는 API

스크린샷 2021-09-13 오전 11.19.34.png

  1. API를 사용하는 사람들이 relativeSize를 직접 만들어서 사용하다가 기능을 추가해달라고 요청을 한다.
  2. 다음 버전에서 개발자가 setRelativeSize 메소드를 추가하였다.
  3. 기존 사용자들은 위 메소드를 구현하지 않으면 컴파일에러가 발생한다.
  4. 버전을 2개 만들어서 관리하자니 메모리 사용과 로딩시간에 문제가 발생한다.
  5. 디폴트 메소드를 사용하여 문제를 해결할 수 있다.

디폴트 메소드 활용하기

스크린샷 2021-09-13 오전 11.27.39.png

선택형 메서드

인터페이스를 구현하는 클래스에서 필요없는 메서드의 내용이 비어있는 경우가 있다. (사용할 필요가 없는데 인터페이스에 정의되어있으므로)

디폴트 메서드를 이용하면 기본 구현을 제공할 수 있으므로 빈 구현을 제공하지 않아도되므로 필요없는 코드를 줄일 수 있다.