더북(TheBook)

예제 1을 위한 리팩토링 제안

JDK에 들어 있는 ButtonModel 예제를 위해 ButtonModel 인터페이스 자체에 getGroup() 메서드를 정의하는 리팩토링 방식을 제안한다. 하지만 JDK는 공개 API이므로, 인터페이스에 메서드를 추가하면 해당 인터페이스를 구현한 기존 클래스를 망가뜨릴 것이다(인터페이스에 선언된 모든 메서드는 인터페이스를 구현하는 클래스에 반드시 정의해야 한다는 사실을 기억하자). 따라서 기존 클라이언트를 망가뜨리지 않으려고 getGroup() 메서드를 JDK 버전 1.3에 있는 파생 클래스인 DefaultButtonModel에 추가했다(그림 3.10 참조).

 

▲ 그림 3.10 JDK 1.3에서 ButtonModel 인터페이스를 위한 리팩토링(예제 1)

 

따라서 이 예제에서 얻은 교훈을 정리하면 이렇다. 인터페이스는 진화하기가 어려우므로 API를 설계할 때 불완전한 추상화와 같은 악취를 인식해서 피하는 작업이 필요하다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.