[Spring] 생성자 주입을 선택하라

2023. 10. 8. 13:21Spring

주입 방식은 4가지가 있다. 그 중 생성자 주입을 선택하자.

1. 어플리케이션이 시작하고 끝날 때까지 의존관계가 변하지 않는 불변이라면 더없이 좋은 선택이다.

더 이상 private final로 객체를 선언하기 때문에 값을 바꿀 수가 없다.

2. 누락이 발생할 수 있는 상황을 막아준다.

의존관계 주입을 수정자 주입으로 하고 아래와 같이 하면 실행은 된다.

 @Test
 void createOrder() {
     OrderServiceImpl orderService = new OrderServiceImpl();
     orderService.createOrder(1L, "itemA", 10000);
 }

그러나 NPE(NullPointerException)이 발생하는데 이렇게 되면 디버깅에 어려움이 생길 수 있다. 생성자 주입에서 이렇게 하면 이러한 상황을 컴파일 오류에서 막아준다. 따라서 순수 자바 코드에서의 단위 테스트에도 어려움이 생긴다. 의존관계를 주입하지 않아도 컴파일 오류가 안나기 때문이다.

컴파일 오류는 세상에서 가장 빠르고, 좋은 오류다

3. 생성자 주입을 하면 private final로 해야 하는데 이러면 생성자에서의 누락도 막을 수 있다.

그러나 수정자 주입을 하게 되면 final이 붙지 않게 되므로 생성자에서 누락이 있어도 final이 컴파일 오류를 내지 않으므로 그냥 넘어가게 되어서 디버깅에 어려움을 줄 수 있다.

즉, 생성자 주입 외에 다른 방법으로 주입을 하게 되면 final을 붙일 수가 없고 따라서 위의 문제가 생길 여지를 제공하게 된다.

 

결론적으로 수정해야 할 사항이 있을 거 같다면 수정자 주입을 사용하고 그렇지 않은 경우에는 생성자 주입을 디폴트로 사용하자!!!

 

Reference


https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8&unitId=55375 

 

학습 페이지

 

www.inflearn.com