전통적인 Java에서 인터페이스와 관련 메소드는 한 몸처럼 구성된다.

인터페이스를 구현하는 클래스는 인터페이스에서 정의하는 모든 메서드 구현을 제공하거나 아니면 슈퍼클래스의 구현을 상속받아야 한다.

평소에는 이 규칙을 지키는 데 아무 문제가 없지만 라이브러리 설계자 입장에서 인터페이스에 새로운 메서드를 추가하는 등 인터페이스를 바꾸고 싶을 때는 문제가 발생한다!

Java 8에서는 기본 구현을 포함하는 인터페이스를 정의하는 두 가지 방법을 제공한다.

  1. 인터페이스 내부에 정적 메서드 사용하기
  2. 인터페이스의 기본 구현을 제공할 수 있도록 디폴트 메서드 기능을 사용하기

Java 8에서는 List 인터페이스에 sort 메서드가 추가되었다.

default void sort(Comparator<? super E> c) {
		Collections.sort(this, c);
}

→ 사전에 작성한 인터페이스에 디폴트 메서드로 추가함으로써, 이를 구현하는 클래스들은 자동으로 새로운 디폴트 메서드를 상속받게 된다!

스크린샷 2023-05-08 오후 4.31.15.png

<aside> 💡 라이브러리 설계자라면 기존 구현을 고치지 않고도 인터페이스를 바꿀 수 있으므로 디폴트 메서드를 잘 이해하는 것이 중요하다. 디폴트 메서드는 다중 상속 동작이라는 유연성을 제공하면서 프로그램 구성에도 도움을 준다.

</aside>