2026-04-05
DI와 IoC
1. IoC (Inversion of Control, 제어의 역전)
객체의 생성과 관리 주도권이 개발자가 아니라 스프링 컨테이너로 넘어가는 것
원래는 개발자가 직접
Service service = new Service();
이렇게 객체를 만들고 관리했는데,
IoC에서는 스프링이 객체를 생성하고 관리한다.
핵심
- 객체 생성
- 객체 생명주기 관리
- 의존성 연결
이걸 스프링이 대신 해준다.
2. DI (Dependency Injection, 의존성 주입)
필요한 객체를 직접 생성하지 않고 외부에서 주입받는 것
예를 들어 Service가 Repository를 필요로 할 때
class UserService {
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
}
이때 UserRepository를 직접 만들지 않고 스프링이 넣어준다.
관계
- IoC는 큰 개념
- DI는 IoC를 구현하는 대표 방식
제어의 흐름을 스프링에게 맡기는 것이 IoC이고,
그 방법 중 하나가 의존성 주입인 DI다.
왜 쓰나
- 객체 간 결합도 감소
- 테스트 용이
- 구현체 교체 쉬움
- 유지보수성 향상
요약
- IoC = 제어권을 스프링이 가짐
- DI = 필요한 객체를 주입받음