아이템21. 인터페이스는 구현하는 쪽을 생각해 설계하라
2021. 8. 24. 11:50ㆍ책/이펙티브자바
인터페이스에 새로운 메서드를 추가하는 방법
- 자바 8 이전
- 기존 구현체를 깨뜨리지 않고는 인터페이스에 메서드 추가할 방법이 없다.
- 자바 8 이후
- 디폴트 메서드가 추가되어 기존 인터페이스에 메서드 추가할 방법이 생겼다.
- 하지만 생각할 수 있는 모든 상황에서 불변식을 해치지 않는 디폴트 메서드를 작성하기란 어렵다.
디폴트 메서드의 문제점
- 디폴트 메서드는 (컴파일에 성공하더라도) 기존 구현체에 런타임 오류를 일으킬 수 있다.
- 디폴트 메서드는 인터페이스로부터 메서드를 제거하거나 기존 메서드의 시그니처를 수정하는 용도로 사용한다면 반드시 기존 클라이언트를 망가뜨리게 된다.
결론
- 기존 인터페이스에 디폴트 메서드로 새 메서드를 추가하는 일은 꼭 필요한 경우가 아니면 피해야 한다.
- 디폴트 메서드라는 도구가 생겼더라도 인터페이스를 설계할때는 여전히 세심한 주의를 기울여야 한다는 것이다.
- 새로운 인터페이스라면 릴리즈 전에 반드시 테스트를 거쳐야 하는데 서로 다른 방식으로 최소한 3가지는 구현해봐야 한다.
- 인터페이스를 릴리즈한 후라도 결함을 수정하는게 가능한 경우도 있겠지만, 절대 그 가능성에 기대지말고 릴리즈 전에 결함을 찾아내자.
'책 > 이펙티브자바' 카테고리의 다른 글
아이템23. 태그 달린 클래스보다는 클래스 계층구조를 활용하라 (0) | 2021.08.24 |
---|---|
아이템22. 인터페이스는 타입을 정의하는 용도로만 사용하라 (0) | 2021.08.24 |
아이템20. 추상 클래스보다는 인터페이스를 우선하라 (0) | 2021.08.18 |
아이템19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 (0) | 2021.08.17 |
아이템18. 상속보다는 컴포지션을 사용하라 (0) | 2021.08.15 |