의존성 주입 컨테이너(Dependency Injection Container)
-
객체의 생성과 수명 주기를 관리하고, 의존성을 자동으로 주입해준다.
-
컨테이너가 객체의 인스턴스를 생성하고 관리한다.
-
객체가 필요로하는 다른 객체(의존성)을 자동으로 주입한다.
-
객체의 생성부터 소멸까지 라이프사이클을 관리한다.
-
예시 프레임워크
- InversifyJS, TypeDI
- Spring Framework
특징
-
느슨한 결합
- 객체 간의 의존성을 낮추어, 유연성과 재사용성을 높인다.
-
테스트 용이성
- 의존성을 쉽게 모의 객체(모킹)으로 대체할 수 있어, 단위 테스트가 용이해진다.
-
설정의 중앙화
- 의존성 설정을 한 곳에서 관리할 수 있다.
-
즉, 객체가 필요로하는 의존성을 해당 객체가 직접 가지고 있는게 아니라, 외부에서 해당 의존성을 주입하는 것
// 의존성 주입 없이
class UserService {
private UserRepository repository = new MySQLUserRepository();
public User getUser(int id) {
return repository.findById(id);
}
}
// 의존성 주입 사용
class UserService {
private UserRepository repository;
// 생성자를 통한 의존성 주입
public UserService(UserRepository repository) {
this.repository = repository;
}
public User getUser(int id) {
return repository.findById(id);
}
}
// 사용 예
UserService service = new UserService(new MySQLUserRepository());
// 또는
UserService testService = new UserService(new MockUserRepository());