본문 바로가기
개발자 기술 면접/Spring

[Spring] DI(Dependency Injection), 의존성 주입 3가지 방법

by se-black 2023. 12. 28.
1. 생성자 주입 방식
  • 생성자를 통해서 의존 관계를 주입받는 방법입니다.
  • 생성자에 @Autowired를 하면 스프링 컨테이너에 @Component로 등록된 빈에서 생성자에 필요한 빈들을 주입합니다.
  • 스프링 공식 문서에서 권장하고 있는 방식.
    • 특징
      • 생성자 호출 시점에 1번만 호출되는 것을 보장한다.
      • 불변과 필수 의존 관계에 사용한다.
      • 생성자가 1개만 존재하는 경우 @Autowired를 생략해도 자동 주입된다.
      • NPE(NullPointerException)를 방지할 수 있다.
      • 주입받은 필드를 final로 선언 가능하다.
    • ※ 생성자 주입을 사용해야 하는 이유
      1. 객체의 불변성 확보
      2. 테스트 코드의 작성
      3. final 키워드 작성 및 Lombok과의 결합

[출처] https://hy-ung.tistory.com/193

 

 

2. 수정자 주입 방식
  • setter라 불리는, 필드의 값을 변경하는 수정자 메소드를 통해서 의존 관계를 주입하는 방법입니다.
  • @Component를 통해 실행하는 클래스를 스프링 빈으로 등록하고 의존 관계를 주입하게 됩니다.
  • @Autowired가 있는 수정자들을 자동으로 의존 관계를 주입합니다.
    • 특징
      • 선택과 변경 가능성이 있는 의존 관계에 사용합니다.
        • But) 실제로 변경이 필요한 경우는 극히 드물다.
      • 자바 빈 프로퍼티 규약의 수정자 메소드 방식을 사용하는 방법입니다.
      • set필드명 메소드를 생성하여 의존 관계를 주입합니다.
      • @Autowired를 입력하지 않으면 실행이 되지 않습니다.

 

3. 필드 주입 방식
  • 필드에 @Autowired를 붙여서 바로 주입하는 방법입니다.
    • 특징
      • 코드가 간결해집니다.
      • 단, 외부에서 접근이 불가능하여 테스트하기 어려운 단점이 있습니다.
      • DI 프레임워크가 없으면 아무것도 할 수 없습니다.
      • 애플리케이션의 실제 코드와 상관없는 특정 테스트를 하고 싶을 때 사용합니다.
728x90