이번에는 생성자 주입을 권장하는지에 대한 이유에 대해 공부해보았다.

 

불변

- 대부분의 의존관계 주입은 한번 일어나면 애플리케이션 종료 시점까지 의존관계를 변경할 일이 없다

오히려 대부분의 의존관계는 애플리케이션 종료 전까지 변하면 안된다.

- 수정자 주입을 사용하면 setXxx 메서드를 public으로 열어두어야한다.

- 누군가 실수로 변경할 수 도 있고, 변경하면 안되는 메서드를 열어두는것은 좋은 방법이 아니다.

- 생성자 주입은 객체를 생성할 때 1번만 호출되므로 이후에 호출되는 일이 없다.

 


 

누락

- 프레임워크 없이 순수한 자바 코드를 단위 테스트 하는 경우가 많다.

OrderServicImpl만 테스트 한다고 하면 

- 만약에 수정자 의존관계를 쓴다고 가정하자

널포인터익셉션을 발생시킨다.

테스트를 짜는 입장에서는 의존관계가 뭐가 들어가는지 눈에 보이지 않기 때문에 실수가 일어나기 쉽다.

- 생성자 주입을 쓴다고 가정하자

컴파일 오류가 발생하며

테스트를 짜는 입장에서 의존관계를 바로 파악할 수 있다.

 


 

final

- 생성자 주입을 쓰게 되면 final 쓸 수 있다.

생성자에서만 값을 세팅할 수 있다. 나머지는 값을 수정할 수 가없게된다.

개발자가 실수로 생성자안에 코드를 누락한다고 하자, 그때 테스트코드에서 널포인터익셉션을 발생시킨다.

final을 쓴다면 컴파일러 오류를 통해 누락된것을 알려준다.

 


 

수정자 주입을 포함한 나머지 주입 방식은 모두 생성자 이후에 호출되므로, 필드에 final 키워드를 사용할 수 없다.

 

생성자 주입 방식을 선택하는 이유는 여러가지가 있디만, 프레임워크에 의존하지 않고 순수한 자바 언어의

특성을 잘 살리는 방법이다.

 

항상 생성자 주입을 선택하고 옵션이 필요하다면 수정자 주입을 선택하자. 필드 주입은 사용하지 말자!!

'웹프로그래밍 > Spring 핵심 원리' 카테고리의 다른 글

38. 조회 빈이 2개 이상 - 문제  (0) 2021.08.17
37. 롬복과 최신 트렌드  (0) 2021.08.16
35. 옵션 처리  (0) 2021.08.13
34. 다양한 의존관계 주입 방법  (0) 2021.08.12
34. 중복 등록과 충돌  (0) 2021.08.10

+ Recent posts