| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- jpa
- 서버
- web
- 스프링
- 디자인 패턴
- 미니정리
- 쿼리
- 프로그래머스
- SQL
- 코드 테스트
- 정리
- 프런트엔드
- 프론트엔드
- 자바
- spring
- 오라클
- jsp
- MySQL
- java
- 스프링부트
- 알고리즘
- 자바스크립트
- 코드테스트
- 백엔드
- 데이터베이스
- Next.js
- JavaScript
- node.js
- BACK-END
- oracle
- Today
- Total
참치코더의 꿈 메모장
Spring / 다양한 DI(의존 관계 주입) 방법 본문
생성자 주입
- 생성자를 통해서 의존 관계를 주입 받는 방법이다.
- 생성자 호출시점에 딱 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)

'Spring' 카테고리의 다른 글
| Spring / 롬복과 @Autowired 필드 명, @Qualifier, @Primary (3) | 2025.08.08 |
|---|---|
| Spring / DI 옵션 처리, 생성자 주입 선택해야 하는 이유 정리 (0) | 2025.08.06 |
| Spring / 컴포넌트 스캔 정리 및 중요한 점(스프링 프레임워크 관점) (3) | 2025.08.04 |
| spring / 컴포넌트 스캔과 의존관계 자동 주입 (1) | 2025.08.01 |
| 스프링 내 @Configulation 및 @Bean 사용시 주의점 (1) | 2025.07.30 |