- 인프런 김영한님 강의를 본인의 이해를 바탕으로 작성한 글이므로 틀린 부분이 존재할 수 있습니다.
- 구체적인 예시를 함께 보시면 이해가 더 빠를 수 있습니다.
1. 적용 원칙
1 - 1. IoC(Inversion of Control, 제어의 역전)
- SOLID 방식을 적용하기 이전에는 클라이언트 코드에서 프로그램 제어 흐름을 조종하는 역할도 동시에 수행
- ex)
@Service
public class BuisinessService() {
@Autowired
BuisinessServiceImpl bussinessService = new 구현객체();
}
1 - 2. DI(Dependency Injection, 의존관계 주입)
1) 선제 조건
- 추상화를 통한 구현 객체 제어
- 각 클래스 별 단일 원칙 책임 준수
2) 정적 클래스 의존 관계
- 애플리케이션을 실행하지 않은 경우에도 분석 가능
- Impl에서 인터페이스를 호출하여 의존 관계 성립
- 해당 의존관계에서 실제 어떤 구현 객체가 주입되는지 확인은 불가능
- ex)

3) 동적 객체 인스턴스 의존 관계
- 의존관계 주입 : 실행 시점에서 외부에서 구현 객체를 생성하고 클라이언트에 전달하여 서버와의 실제 의존관계가 연결되는 것을 의미
- 의존관계 주입 방식을 통해 클라이언트 코드를 변경하지 않고 호출하는 대상의 인스턴스 변경 가능
1 - 3. 컨테이너
- AppConfig와 같이 객체 생성과 의존관계를 연결해 주는 것을 IoC 컨테이너 혹은 DI 컨테이너라고 지칭
- 최근에는 의존관계 주입에 초점을 두고 DI 컨테이너라고 주로 지칭