Spring DI @Autowired 는 필드가 아니라 생성자에 주입하자!

2019. 10. 25. 11:56프로그래밍/Spring

출처 : https://leejisoo860911.tistory.com/2

 

Spring DI의 모든 방법 @Autowired / 생성자 주입

Spring에서 등록된 Bean을 사용하기 위해서 DI(Dependency Injection)를 처리하는 방법은 크게 3가지가 있다. Field Injection , Setter Injection , Contructor Inject 이다. Spring 3.x버젼까지만 해도 Setter I..

leejisoo860911.tistory.com

지금까지 @Autowired를 필드에 직접 붙이는 방식이 보기에도 편하고 선호했었는데 생성자로 주입하는 것이 훨씬 좋다는 것을 알게 됐다.

주입하는 방식은 의존성 구조를 이해하기도 어렵고 무엇보다 주입된 객체가 null 일 경우 컴파일시 이 오류를 잡아내지 못하고 실행을 해서 NullPointerException이 발생해야 알 수 있다는 치명적인 단점이 있는데 생성자에 주입할 경우 빌드시 이를 잡아낼 수 있어서 아주 유용할 듯 하다.

물론 이 외에도 생성자를 사용하는 것의 장점은 많지만 우선적으로 눈에 띄인 부분이었다.

그리고 Lombok을 사용할 경우 다음과 같은 애노테이션을 사용해서 생성자를 만들지 않아도 된다는 꿀팁도 알게 됐다.

@RequiredArgsConstructor 초기화 되지 않은 final 필드와 @NonNull 어노테이션이 붙은 필드에 대한 생성자 생성@AllArgsConstructor 모든 필드에 대한 생성자 생성.