새발블로그
[Spring] 의존성 주입 (Dependency Injection) 본문
DI란?
객체 간의 의존 관계를 프로그래머가 아닌 프레임워크가 주입해주는 설계 방식. 스프링은 이 DI를 통해 객체 생성과 관리 책임을 분리시킨다.
DI 방법 비교
| 방식 | 특징 | 장점 | 단점 |
| 필드 주입 | @Autowired로 필드에 바로 주입 | 코드 간단 | 테스트/유지보수 어려움 |
| 생성자 주입 | 생성자를 통해 주입 | 불변성 확보, 테스트 용이 | 코드 길어질 수 있음 |
| Setter 주입 | Setter 메서드를 통한 주입 | 선택적 의존성 주입 가능 | 누락 시 런타임 에러 가능성 |
어노테이션 정리
@Autowired
private UserService userService;
@Autowired
public OrderService(UserService userService) {
this.userService = userService;
}
@Autowired
public void setUserService(UserService userService) {
this.userService = userService;
}
- @Autowired: 스프링 컨테이너가 Bean을 자동 주입
- @Qualifier: 같은 타입 Bean 여러 개 있을 때 지정
@Autowired
@Qualifier("userServiceV2")
private UserService userService;
예전 방식의 단점
UserService userService = new UserServiceImpl(); // 강한 결합
- 직접 생성 → 테스트 어려움
- 변경 시 코드 수정 필요
- 외부 설정 불가
DI의 이점 (테스트 & 유지보수 관점)
- Mock 객체 주입 가능 → 테스트 유연성
- 클래스 간 결합도 낮음 → 변경 용이
- 설정만 바꾸면 로직 변경 없이 동작 수정 가능
'Server > Spring' 카테고리의 다른 글
| [Spring] Spring MVC (0) | 2025.07.08 |
|---|---|
| [Spring] Bean Scope & 생명주기 (0) | 2025.07.08 |
| [Spring] Component Scan (컴포넌트 스캔) (0) | 2025.07.08 |
| [Spring] Bean 등록 방식 (수동 vs 자동) (0) | 2025.07.08 |
| [Spring] Spring Container 스프링 컨테이너 (0) | 2025.07.06 |