DI는 객체 간의 의존성을 외부에서 주입하는 패턴입니다. 이를 통해 객체 간의 결합도를 낮춥니다.

class OrderService {
private PayPalPaymentProcessor payPalPaymentProcessor;
public OrderService() {
this.payPalPaymentProcessor = new PayPalPaymentProcessor();
}
public void placeOrder() {
// 주문 로직
payPalPaymentProcessor.processPayment(); // 결제 처리
}
}
OrderService 가 구체 클래스인PayPalPaymentProcessor 의존함OrderService 가 PayPalPaymentProcessor 와 강하게 결합되어, 코드를 변경하지 않고 결제 프로세서를 변경하기 어려움OrderService 도 수정해야 함interface PaymentProcessor {
void processPayment();
}
class CreditCardPaymentProcessor implements PaymentProcessor {
public void processPayment() {
System.out.println("Processing payment through credit card.");
}
}
class PayPalPaymentProcessor implements PaymentProcessor {
public void processPayment() {
System.out.println("Processing payment through PayPal.");
}
}
class OrderService {
private PaymentProcessor paymentProcessor;
// 생성자 주입을 통해 의존성 전달
public OrderService(PaymentProcessor paymentProcessor) {
this.paymentProcessor = paymentProcessor;
}
public void placeOrder() {
// 주문 로직
paymentProcessor.processPayment(); // 결제 처리
}
}
OrderService 는 자신이 사용할 객체를 스스로 생성하지 않음OrderService 는 추상화된 PaymentProcessor 에 의존함PaymentProcessor 구현체와 호환 가능함 public class FrameWork {
public static void main(String[] args) {
PaymentProcessor processor = new CreditCardPaymentProcessor();
OrderService orderService = new OrderService(processor);
orderService.placeOrder();
}
}
FrameWork 는 OrderService 인스턴스를 생성할 때 CreditCardPaymentProcessor 객체를 생성하고 이를 OrderService의 생성자 인자로 전달함