DI (Dependency Injection) 의존성 주입


<aside> 1️⃣ 의존성과 의존성 주입의 개념

</aside>

// 의존성 주입을 사용한 예시: 주문 서비스 클래스가 결제 서비스 클래스를 주입받음
public class OrderService {
    private final PaymentService paymentService; // 결제 서비스에 대한 의존성을 가지고 있다.
		
    public OrderService(PaymentService paymentService) {
        this.paymentService = paymentService; // 외부에서 주입받은 결제 서비스를 사용한다.
    }

    public void placeOrder() {
        // 주문 처리 로직
        paymentService.processPayment(); // 외부에서 주입받은 결제 서비스 메서드를 호출하여 사용한다.
    }
}

// 외부에 있는 하나의 클래스
public class PaymentService {
    public void processPayment() {
        // 결제 처리 로직
    }
}

의존성 주입을 사용하면 클래스는 외부에서 주입받은 의존성 객체를 사용하므로, 의존성과 클래스 간의 결합도가 낮아지며 유연성과 재사용성이 향상된다. 이는 객체 지향 설계 원칙 중 하나인 "의존성 역전 원칙(Dependency Inversion Principle)"을 따르는 것이기도 하다.

<aside> 2️⃣ Spring Boot에서의 DI(Dependency Injection)

</aside>

@Component
public class OrderService {
    private PaymentService paymentService;

    // @Autowired -> 생성자가 1개일때는 작성해도 괜찮고 안해도 괜찮다.
    public OrderService(PaymentService paymentService) {
        this.paymentService = paymentService;
    }

    public void placeOrder() {
        // 주문 처리 로직
        paymentService.processPayment();
    }
}
@Component
public class PaymentService {
    public void processPayment() {
        // 결제 처리 로직
    }
}

<aside> 2️⃣ -1️⃣ @Autowired란 무엇인가

</aside>