오브젝트 팩토리

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

현재 client는 클라이언트로서의 책임과 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);
    }
}

 

 

 

ObjectFactory클래스를 이용해 Client가 사용 할 PaymentService를 얻어온다.

 

ObjectFactory

package tobyspring.hellospring;

public class ObjectFactory {
    public PaymentService paymentService() {
        return new PaymentService(exRateProvider());
    }
    
    public ExRateProvider exRateProvider(){
        return new WebApiExRateProvider();
    }
}

 

Client

package tobyspring.hellospring;

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

public class Client {
    public static void main(String[] args) throws IOException {
        ObjectFactory objectFactory = new ObjectFactory();
        PaymentService paymentService = objectFactory.paymentService();
        Payment payment = paymentService.prepare(100L,"USD", BigDecimal.valueOf(50.7));
        System.out.println(payment);
    }
}

 

 

클라이언트의 관계설정 책임을 가진 코드를 ObjectFactory라는 이름으로 분리한다. ObjectFactory는 사용할 클래스를 선 정하고 오브젝트를 만들면서 의존관계가 있다면 이를 생성자에 전달해서 만드는 기능을 담당한다.

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

스프링 컨테이너와 의존관계 주입  (0) 2024.07.03
원칙과 패턴  (0) 2024.07.03
관계설정 책임의 분리  (0) 2024.07.03
인터페이스 도입  (0) 2024.07.03
클래스의 분리  (0) 2024.07.03