관계설정 책임의 분리

2024. 7. 3. 10:05토비의 스프링 6

런타임에 의존해서 사용해야 할 클래스의 오브젝트를 설정하는 책임이 어디에 있는가?

 

 

의존관계를 설정하는 클래스를 따로 추가한다.

 

PaymentService

package tobyspring.hellospring;

import java.io.IOException;
import java.math.BigDecimal;
import java.time.LocalDateTime;

public class PaymentService {
    private final ExRateProvider exRateProvider;

    public PaymentService(ExRateProvider exRateProvider) {
        this.exRateProvider = exRateProvider;
    }

    public Payment prepare(Long orderId, String currency, BigDecimal foreignCurrencyAmount) throws IOException {

        BigDecimal exRate = exRateProvider.getExRate(currency);
        BigDecimal convertedAmount = foreignCurrencyAmount.multiply(exRate); // * 사용안하고 multiply사용
        LocalDateTime validUntil = LocalDateTime.now().plusMinutes(30);

        return new Payment(orderId,currency,foreignCurrencyAmount,exRate,convertedAmount,validUntil);
    }

}

 

  • PaymentService를 생성할 때 ExRateProvider 인터페이스를 매개변수로 받는다.

Client

package tobyspring.hellospring;

import java.io.IOException;
import java.math.BigDecimal;

public class Client {
    public static void main(String[] args) throws IOException {
        PaymentService paymentService = new PaymentService(new WebApiExRateProvider());
        Payment payment = paymentService.prepare(100L,"USD", BigDecimal.valueOf(50.7));
        System.out.println(payment);
    }
}
  • 메인메서드에서 PaymentService를 생성할 때 사용 할 구현체를 생성해서 추가해준다.

 

 

기존 코드에서는 PaymentService에서 직접 구현체를 선택해서 작동했지만 Client로 그 책임을 전가함.

'토비의 스프링 6' 카테고리의 다른 글

원칙과 패턴  (0) 2024.07.03
오브젝트 팩토리  (0) 2024.07.03
인터페이스 도입  (0) 2024.07.03
클래스의 분리  (0) 2024.07.03
오브젝트와 의존관계  (0) 2024.07.02