@Autowired는 스프링 프레임워크가 의존성 주입(Dependency Injection, DI)을 자동으로 처리하도록 돕는 어노테이션이다.
의존성 주입이란,
객체가 필요한 다른 객체를 직접 만들지 않고도 사용할 수 있도록
외부에서 객체를 연결해주는 방식이다.
쉽게 말해, 스프링이 필요한 부품을 알아서 조립해주는 것과 같다.
이 덕분에 코드가 더 유연해지고, 확장성이 높아지며, 테스트하기 쉬워진다.
@Autowired 어노테이션을 필드, 생성자, 또는 메서드에 붙이면, 스프링 컨테이너가 해당 타입의 객체를 찾아 자동으로 연결해준다.
예를 들어, OrderService 클래스가 OrderRepository와 PaymentService라는 두 가지 '부품'을 필요로 할 때, @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());
// 배송 처리 등 추가 작업 수행
// ...
}
}
위 코드처럼 생성자에 @Autowired를 붙이면,
스프링이 OrderService를 만들 때 OrderRepository와 PaymentService를 자동으로 주입해준다.
그러면 OrderService는 이 부품들을 사용해 주문 저장, 결제 처리 같은 작업을 수행할 수 있다.
주의할 점:
@Autowired가 제대로 작동하려면 주입받으려는 객체들(OrderRepository, PaymentService 등)이 @Service, @Repository 같은 어노테이션을 통해 스프링 빈으로 등록되어 있어야 한다.
이렇게 @Autowired를 사용하면 객체 간의 의존성이 낮아져 더 깔끔하고 관리하기 쉬운 코드를 작성할 수 있다.