@Autowired 어노테이션은 스프링 프레임워크에서 제공하는 의존성 주입(Dependency Injection)을 수행하기 위해 사용되는 어노테이션입니다.
의존성 주입은
객체 간의 의존 관계를 자동으로 설정하는 것을 의미합니다. 이를 통해 객체들은 직접적으로 의존하는 객체를 생성하거나 참조하지 않고도 필요한 의존 객체를 제공받을 수 있습니다. 이는 애플리케이션의 유연성과 확장성을 향상시키고, 테스트 용이성을 제공하는 데 도움이 됩니다.
@Autowired 어노테이션은 주로 스프링의 컨테이너에서 사용됩니다. 이 어노테이션을 필드, 생성자, 메서드의 매개변수 앞에 붙여주면, 해당 의존성이 자동으로 주입됩니다. 스프링은 컨테이너 내에서 해당 타입의 객체를 찾아서 주입해주는 역할을 수행합니다.
@Service
public class OrderService {
private OrderRepository orderRepository;
private PaymentService paymentService;
@Autowired
public OrderService(OrderRepository orderRepository, PaymentService paymentService) {
this.orderRepository = orderRepository;
this.paymentService = paymentService;
}
public void placeOrder(Order order) {
// 주문 저장
orderRepository.save(order);
// 결제 처리
paymentService.processPayment(order.getTotalAmount());
// 배송 처리 등 추가 작업 수행
// ...
}
}
위의 예시에서 OrderService
클래스는 OrderRepository
와 PaymentService
라는 두 개의 의존성을 가지고 있습니다.
생성자에 @Autowired
어노테이션을 사용하여 이 두 개의 의존성을 자동으로 주입받고 있습니다.
주문을 처리하는 placeOrder
메서드에서는 주문을 저장하고 결제를 처리하는 로직을 수행합니다. orderRepository
와 paymentService
는 의존성 주입을 통해 이미 주입되었으므로, 해당 객체들을 사용하여 필요한 작업을 수행할 수 있습니다.
이 예시에서 OrderRepository
와 PaymentService
는 @Service
어노테이션을 통해 스프링 빈으로 등록되어야 합니다. 그렇지 않으면 OrderService
에 자동 주입되지 않습니다.
위와 같이 @Autowired
어노테이션을 사용하면 OrderService
가 필요로 하는 의존성들을 스프링이 자동으로 주입해주기 때문에, 객체 간의 결합도를 낮추고 관리하기 쉬운 코드를 작성할 수 있습니다.