Back-End/Spring

[Spring][스프링 기본편] - 22. 생성자 주입을 사용해야 하는 이유(의존관계 설정)

얄루몬 2022. 1. 28. 10:42

[왜 생성자 주입을 선택해야 하는가?]

의존 관계 주입에서는 아래와 같이 4가지의 방법으로 의존 관계를 주입할 수 있는 방법이 있다. 그러나 왜 생성자 주입을 통해서 의존 관계를 설정하라 하는 것일까?

  • 생성자 주입
  • 수정자 주입
  • 필드 주입
  • 일반 메서드 주입

 

 

 

[생성자 주입을 해야 하는 이유]

크게는 3가지의 장점을 이유로 생성자 주입으로 의존 관계 주입을 하라는 것인지를 이야기 할 수 있다.

  • 불변
  • 누락
  • final 키워드

 

 

 

[불변]

  • 대부분의 의존관계 주입은 한번 일어나면 애플리케이션 종료시점까지 의존관계를 변경할 일이 없다. 오히려 대부분의 의존관계는 애플리케이션 종료 전까지 변하면 안된다.(불변해야 한다.)
  • 수정자 주입을 사용하면, setXxx 메서드를 public으로 열어두어야 한다.
  • 누군가 실수로 변경할 수 도 있고, 변경하면 안되는 메서드를 열어두는 것은 좋은 설계 방법이 아니다.
  • 생성자 주입은 객체를 생성할 때 딱 1번만 호출되므로 이후에 호출되는 일이 없다. 따라서 불변하게 설계할 수 있다.

 

 

 

[누락]

프레임워크 없이도 순수 java 코드로만 테스트 하는 경우가 굉장히 많기 때문에 수정자 메소드로 의존관계를 주입한 경우엔 의존관계의 누락이 많기 때문에 이러한 이유로 생성자로 의존관계를 주입해야 한다고 한다. (수정자 메소드를 사용하게 되면 의존관계를 주입을 해주어야 하기때문에 누락이 발생할 수 있다.)

 

 

 

[final 키워드]

  • 생성자 주입을 사용하면 필드의 final 키워드를 사용할 수 있다. 
    • 설정되지 않은 오류를 컴파일 시점에 막아줄 수 있다.
    • 생성자에서만 값을 넣을 수 있다.
    • 생성자만이 final 키워드를 사용할 수 있다.