티스토리 뷰

인터페이스에 새로운 메서드를 추가하는 방법

  • 자바 8 이전
    • 기존 구현체를 깨뜨리지 않고는 인터페이스에 메서드 추가할 방법이 없다.
  • 자바 8 이후
    • 디폴트 메서드가 추가되어 기존 인터페이스에 메서드 추가할 방법이 생겼다.
    • 하지만 생각할 수 있는 모든 상황에서 불변식을 해치지 않는 디폴트 메서드를 작성하기란 어렵다.

디폴트 메서드의 문제점

  • 디폴트 메서드는 (컴파일에 성공하더라도) 기존 구현체에 런타임 오류를 일으킬 수 있다.
  • 디폴트 메서드는 인터페이스로부터 메서드를 제거하거나 기존 메서드의 시그니처를 수정하는 용도로 사용한다면 반드시 기존 클라이언트를 망가뜨리게 된다.

결론

  • 기존 인터페이스에 디폴트 메서드로 새 메서드를 추가하는 일은 꼭 필요한 경우가 아니면 피해야 한다.
  • 디폴트 메서드라는 도구가 생겼더라도 인터페이스를 설계할때는 여전히 세심한 주의를 기울여야 한다는 것이다.
  • 새로운 인터페이스라면 릴리즈 전에 반드시 테스트를 거쳐야 하는데 서로 다른 방식으로 최소한 3가지는 구현해봐야 한다.
  • 인터페이스를 릴리즈한 후라도 결함을 수정하는게 가능한 경우도 있겠지만, 절대 그 가능성에 기대지말고 릴리즈 전에 결함을 찾아내자.