본문 바로가기
Java

[Java] AutoWired는 무엇이며 왜 사용하지 않는가

by 세류오 2025. 12. 30.

예전부터 이해가 잘되지 않았던 AutoWired는 무엇이며 왜 쓰고 지금은 왜 사용하지 않는지에 대해 알아보자.


📌 @Autuwired 한 줄 요약

➡️ @Autowired는 "Spring에게 대신 객체를 만들어서 넣어달라고 하는 표시"이다

@Autuwired가 없을 경우

OrderService orderService = new OrderService();

 

@Autowired가 있는 경우

@Autowired
OrderService orderService;


SpringBoot에서는 객체를 미리 만들어서 보관하는데 이것을 Bean이라고 한다.
@Autowired가 붙어있으면 "여기에 Bean(객체)을 넣어줘야 하는구나"라고 SpringBoot가 이해한다.


📝 예제

@Service
public class OrderService {
    public String order() {
        return "주문 완료!"
    }
}
@RestController
public class OrderController {

    @Autowired
    private OrderService orderService;

    @GetMapping("/order")
    public String order() {
        return orderService.order();
    }


예제를 보면 OrderService객체를 구현하는데 @Autowired를 이용하기 때문에 "new OrderService()"를 선언하지 않는것을 확인 할 수 있다.

그렇다면 위 예제에서 @Autowired가 없다면 어떻게되는가?

➡️ order에서 orderService.order를 리턴값으로 반환할 때 NullPointerException을 반환하게 된다


권장되는 방식(생성자 주입) 예제

@RestController
public class OrderController {

    private final OrderService orderService;

    public OrderController(Orderservice orderService) {
        this.orderService = orderService;
    }

    @GetMapping("/order")
    public String order() {
        return orderService.order();
    }

}

왜 @Autowired를 사용하지 않는게 권장되는가?

➡️ 컴파일 시점에는 에러가 발생하지 않기 때문
      실제로 실행하여 에러가 발생하기 전까지는 모르기 때문이다.
➡️ final을 사용하지 못한다.
     final을 사용하지 못한다는 말인 즉 불안정한 객체로서 나중에 바뀔 수 있는 가능성이 존재하는 것이다.