이펙티브 자바 - 21. 인터페이스는 구현하는 쪽을 생각해 설계하라
on JAVA
이펙티브 자바 - 21. 인터페이스는 구현하는 쪽을 생각해 설계하라
잘 설계된 시스템의 핵심은 정보 은닉, 그리고 캡슐화다. 내부 구현과 API를 깔끔히 분리한 컴포넌트는 다른 컴포넌트와 쉽게 분리할 수 있다. 이렇게 독립한다면, 개발/테스트/최적화/적용/분석/수정을 개별적으로 할 수 있어 유연한 시스템이 된다.
디폴트 메서드는 오류를 일으킬 가능성이 있다. 디폴트 메서드는 컴파일에 성공하더라도 기존 구현체에 런타임 오류를 일으킬수 있다. 때문에 기존 인터페이스에 디폴트 메서드로 새 메서드를 추가하는일은 피해야한다.
반면, 새로운 인터페이스를 만드는 경우라면 표준적인 메서드 구현을 제공하는데 아주 유용한 수단이며, 그 인터페이스를 더 쉽게 구현해 활용할 수 있게끔 해준다.
인터페이스 설계시 주의가 필요하다. 디폴트 메서드라는 도구가 생겼지만 인터페이스를 설계할 때는 여전히 주의를 기울일 필요가 있다. 기존 인터페이스에 디폴트 메서를 추가할 시 어떤 위험이 딸려올지 알 수 없기 때문이다.
인터페이스 릴리즈전에 테스트를 거치자.
새로운 인터페이스라면 릴리스 전에 반드시 테스트를 거쳐야한다. 최소 서로 다른 세가지 방식으로 구현해보고, 다양한 클라이언트를 만들어 테스트해봐야 한다.
인터페이스를 릴리스 한 후라도 결함을 수정하는게 가능할 경우도 있겠지만, 그 가능성에 기대서는 안된다.
정리
디폴트 메서드라는 도구가 생겼더라도 인터페이스를 설계할 때는 여전히 세심한 주의를 기울여야 한다.