Preloader image
DDD

자바

@Autowired vs 생성자

작성자 관리자 (admin)
조회수 219
입력일 2023-05-15 08:36:23

@Autowired와 생성자는 Spring Framework에서 의존성 주입(Dependency Injection)을 할 때 사용되는 방법 중 두 가지입니다.
이 두 가지 방법 모두 의존성 주입을 위한 것이지만, 각각의 장단점과 상황에 따라 적절한 방법을 선택해야 합니다.

@Autowired
필드나 메소드에 애노테이션을 붙여서 사용하는 방법으로, Spring이 런타임 시에 해당 타입의 객체를 찾아서 주입해줍니다. 이 방법의 장점은 코드 양이 적어서 간편하게 사용할 수 있으며, 필요한 의존성을 주입해줄 수 있는 Bean 객체가 반드시 존재해야 하는 것이 아니라는 점입니다. 그러나 의존성 주입이 필요한 필드나 메소드가 많아지면 코드의 가독성이 떨어질 수 있고, 해당 필드나 메소드가 final일 경우에는 @Autowired를 사용할 수 없습니다.

생성자
의존성 주입은 클래스의 생성자에서 필요한 의존성을 파라미터로 받아서 사용하는 방법입니다. 이 방법의 장점은 의존성 주입이 필요한 객체를 반드시 생성자를 통해 주입받아야 하기 때문에 컴파일 타임에서 오류를 발견할 수 있고, 의존성이 많은 클래스에서도 가독성이 좋다는 점입니다. 또한, 해당 클래스를 사용할 때 반드시 필요한 의존성을 모두 전달받아야 하기 때문에 의존성이 누락되는 오류를 미연에 방지할 수 있습니다.

따라서, 단순한 경우에는 @Autowired를 사용하는 것이 간편하고 좋지만, 필드나 메소드가 많은 경우에는 생성자를 이용한 의존성 주입이 가독성 면에서 우수합니다. 또한, 생성자를 사용하면 코드의 테스트 용이성이 높아지기 때문에 단위 테스트 등에서 유용하게 사용할 수 있습니다.

^