[Spring] 왜 생성자 주입을 해야하나?

노아카프카·2022년 6월 9일
0

Spring

목록 보기
2/5

대부분의 블로그나 강의를 보면, 의존성 주입에서 생성자 주입을 권장한다.
왜일까?
이유를 알아보자.

불변

1. 대부분의 DI는 한 번 일어나면 애플리케이션 종료시점까지 의존관계가 변경될 일이 없다.

  • 오히려, 종료전까지 변하면 안되는 경우들이 대부분이다.

2. Setter 주입을 사용하면, set 메서드를 Public으로 열어놓아야 한다.

  • 종료 전까지 변하면 안되는 경우, set 메서드로 변경이 될 수 있기 때문에 좋은 설계가 아니다.

누락

만약 Setter 주입을 쓴다면 누락된 의존성 주입을 확인하기가 힘들다. 예를 들면 아래와 같다.

class OrderServiceImplTest{
	@Test
    void createOrder(){
    	OrderServiceImpl orderService = new OrderServiceImpl();
        ...
        ...
    }
}

이렇게 짜게 되면 OrderServiceImpl 안에서 어떤 의존성 주입이 필요한지 알 수 없다.
실제로 OrderServiceImpl 안에 Setter주입으로 Repository에 대한 의존성 주입이 필요하면, 이를 소스를 까보지 않고는 모른다.

반면, 생성자 주입을 하면 new OrderServiceImpl() 로 생성자를 만드는 시점에서, 컴파일 오류가 나기 때문에 누락된 의존성 주입을 확인할 수 있다.

+ 생성자 주입을 쓰면, final 키워드로 누락을 체크할 수 있다.

0개의 댓글