참치코더의 꿈 메모장

Spring / 다양한 DI(의존 관계 주입) 방법 본문

Spring

Spring / 다양한 DI(의존 관계 주입) 방법

참치깡 2025. 8. 5. 15:00
728x90

생성자 주입

- 생성자를 통해서 의존 관계를 주입 받는 방법이다.
- 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다
- 불변, 필수 의존관계에 사용
- 생성자가 1개만 있으면 @Autowired를 생략해도 자동 주입 된다. 물론 스프링 빈에만 해당한다.

주입 시점 : 객체 생성 시점에 주입됨 

불변성 : final 사용 가능, 이후 수정 불가

필수 의존성 : 강제할 수 있음

테스트 편의성 : 테스트 시 의존성 명확하게 주입 가능

스프링 공식 문서에서 가장 권장되는 방식


수정자 주입(setter 주입)

- setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입하는 방법이다.
  (setter에 @Autowired 붙이면 생성자를 사용하지 않고 setter로 값을 주입시켜 준다 생성자 안써도 됨 )

- 선택, 변경 가능성이 있는 의존관계에 사용
  (@Autowired(required = false)라고 하면 꼭 필수로 값을 넣지 않아도 된다(오류 발생 가능성이 높아짐)
   필수로 바꾸고 싶으면 반대로 @Autowired(required = true)를 사용)

- 자바빈 프로퍼티 규약의 수정자 메서드 방식을 사용하는 방법이다.
   (생성자가 아닌 getter setter 메서드로 데이터를 변경하는 방식 )

주입 시점 : 객체 생성 이후에 스프링이 setter 메서드를 호출해 주입

 

선택적 의존성 가능 : 특정 의존성은 주입하지 않아도 동작할 수 있음

변경 가능성 :  주입 후에도 값 변경 가능 -> 불변성 보장 (데이터베이스 교체 등 특수한 경우 가능하지만 불안정)

테스트 복잡도 : 테스트 시 반드시 setter 호출해줘야 함 


필드 주입

- 필드에 바로 주입하는 방법이다.

- 코드가 간결해 지지만 외부에서 변경이 불가능해서 테스트 하기 힘들다는 치명적인 단점이 있다.

- DI 프레임워크가 없으면 아무것도 할 수 없다

- 애플리케이션의 실제 코드와 관계 없는 테스트 코드

- 스프링 설정을 목적으로 하는 @Configuration 같은 곳에서만 특별한 용도로 사용

- Spring 테스트 컨텍스트(@SpringBootTest, @ContextConfiguration)를 사용하면 테스트 가능하기는 한데

  통합 테스트 개념이라 테스트가 정확하지 않음


일반 메서드 주입

- 일반 메서드를 통해서 주입 받을 수 있다.

- 일반적으로 잘 사용하지 않는다

- 의존관계 자동 주입은 스프링 컨테이너가 관리하는 스프링 빈이어야 동작한다. 
  (컴포넌트 스캔이나 @Configuration으로 설정한 class 아래에 수동으로 등록한 @Bean)

 

올해 봄에 찍은 벚꽃

728x90
Comments