Spring

[Spring] 다양한 주입방법

곱창국수 2022. 8. 14. 15:44
생성자 주입
  • 생성자를 통해서 의존 관계를 주입 받는 방법
  • 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다.
  • 불변, 필수 의존 관계
  • 생성자가 1개라면@Autowired 생략이 가능하다. 

생성자 주입

 

수정자 주입
  • setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입하는 방법이다.
  • 선택, 변경 가능성이 있는 의존관계에 사용
  • @Autowired( required = false )로 지정하면 주입할 대상이 없어도 오류가 발생하지 않고 동작가능하다.

수정자 주입

필드주입
  • 필드에 바로 주입하는 방법
  • 코드가 간결해서 많은 개발자들을 유혹하지만 외부에서 변경이 불가능해서 테스트하기 힘듬
  • DI프레임워크가 없으면 아무것도 할 수 없다.
  • 실제 애플리케이션에서는 사용하지 않는게 좋다. -> 테스트코드에서 간결하게 사용하는 정도..

필드 주입

 


 

3가지 주입 방법을 알아봤는데 결국 그중에 생성자 주입을 사용하는 것이 가장 좋다.

 

생성자 주입을 사용하는 이유

과거에 수정자 주입이나 필드 주입을 사용하는 경우가 있었지만, 최근에는 DI프레임워크 대부분이 생성자 주입을 권장한다.

 

불변

대부분의 의존관계 주입은 한번 일어나면 애플리케이션 종료시점까지 의존관계를 변경할 일이 없다. 오히려 대부분의 의존관계는 애플리케이션 종료 전까지 변하면 안된다. 수정자 주입을 사용하여 수정 할 수 있게끔 설계를 하는 것은 좋은 설계방향이 아니다. 누군가 실수로 변경할 수 있음 

 

누락

프레임워크 없이 순수한 자바 코드를 단위 테스트 하는 경우에 수정자 의존 관계인 경우 주입이 누락되는 경우가 발생할 수 있다.

 

final 키워드

final 키워드를 사용할 수 있다. 해당 키워드를 사용하게되면 혹시나 생성자에서 값이 설정되지 않는 경우 오류를 컴파일 시점에서 막아준다.

this.discountPolicy = discountPolicy 누락

 

정리: 항상 생성자 주입을 선택해라!! 가끔 옵션이 필요하면 수정자 주입을 선택하고, 필드주입은 사용하지 말자!