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

심규환·2022년 1월 29일
0

Effective Java

목록 보기
20/29

자바 8전에는 인터페이스에 새로운 메서드를 추가하려면 이를 구현한 구현 클래스를 깨트리지 않고는 추가할 방법이 없었다. 만약 그렇지 않고 메서드를 추가하면 컴파일 에러가 발생할 것이다. 왜냐하면 구현 클래스에는 추가 메서드를 재정의하지 않았기 때문이다.
이를 위해 디폴트 메서드가 생겼지만, 디폴트 메서드로 기존 인터페이스에 새로운 메서드를 추가하려면 쉽지가 않다.
자바 7까지의 모든 클래스가 "현재의 인터페이스에 새로운 메서드가 추가될 일은 영원히 없다'고 가정하고 작성됐기 때문이다. 그러니 디폴트 메서드를 새로 추가할 때 무슨 문제가 생길지 예측할 수가 없다.

만약 컴파일에 성공하더라도 기존 구현체에 런타임 오류를 일으킬 수 있다. 흔한 일은 아니지만 일어나지 않는다는 보장도 없다. 그러니 기존 인터페이스에 새 메서드를 추가하는 일은 꼭 필요한 일이 아니라면 권장하지 않는다.
아예 새 인터페이스를 만들때 디폴트 메서드를 사용하는 것이라면 아주 좋은 방법이다.
핵심은 간단하다 인터페이스를 설계할 때 세심한 주의를 기울여야 한다.

새로운 인터페이스라면 릴리스 전에 반드시 테스트를 거쳐야 하고 최소 세 가지는 구현 클래스를 만들어봐야 하고 각 인터페이스의 인스턴스를 사용하는 클라이언트도 여러 개 만들어서 테스트를 해봐야 한다.
가능하면 릴리스 전에 완전하게 만들도록 하라

profile
장생농씬가?

0개의 댓글