public class Timer {
public void start(){ // ... }
public void stop(){ // ... }
}
public interface Rechargeable {
void charge();
}
public class IotTimer extends Timer implements Rechargeable {
public void charge(){
// ...
}
}
IotTimer it = new IotTimer();
it.start();
it.stop();
it.charge();
Timer t = it;
t.start();
t.stop();
Rechargeable r = it;
r.charge();
Notifier notifier = getNotifier(); // 어떤 구체 클래스를 사용하는지 몰라도 된다! 인터페이스에 의존
notifier.notify(someNoti);
위 코드도 요구 사항이 변경됨에 따라 주문 취소 코드가 계속 변경 됨을 알 수 있음
Notify 라는 공통점을 찾아 Notifier로 추상화하여 그것을 getNotifier
, notify
로 변경하여 유연함을 가질 수 있게 됨.
어떠한 추상화를 하던간에 추상화를 하는 이유가 무엇때문인지를 생각해야합니다.