1. 클래스 분리

image.png

클래스를 변경해야 할 때 PaymentService 에 관련된 기능들을 모두 건드려야되는 단점이 존재

해결하기위해서는 독립적인 인터페이스를 도입하면 됨

인터페이스 도입

image.png

인터페이스 타입으로 PaymentService 쪽에서 사용하게 만들면

메서드 이름이 달라진다고 PaymentService를 고쳐야되는 상황은 피할 수 있게 됨

ExRateProvider

public interface ExRateProvicer {
    BigDecimal getWebExRate(String currency) throws IOException;
}

참고로 인터페이스는 기본적으로 모든 메서드가 public

인터페이스를 적용하게 되면

새로운 환율을 가져오는 코드를 추가하더라도 최소한의 부분만 수정하더라도 잘 작동하는 것을 위의 PaymentService를 통해 확인할 수 있었음

하나의 클래스에서 의존하는(사용하는) 다른 클래스들이 있을 때 그 안에 인터페이스를 정해두고 인터페이스 타입으로 사용하게 만들면

그 인터페이스를 구현한 다른 클래스를 추가할 때 적용해야되는 코드를 최소화 할 수 있음