🧐강의🧐
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard
✨ 제어의 역전 IoC (Inversion of Control)
프로그램의 제어 흐름을 직접 제어하는 것이 아닌 외부에서 관리하는 것
· 기존 프로그램 : 클라이언트 구현 객체가 스스로 필요한 구현 객체를 생성 & 연결 & 실행
· AppConfig 등장 이후 : 클라이언트 구현 객체는 실행 역할만 담당
》ex. OrderServiceImpl : 필요한 인터페이스들을 호출하지만, 어떤 구현 객체가 실행될지 모름
》프로그램의 제어 흐름 → AppConfig 담당
· AppConfig
》프로그램 제어 흐름에 대한 권한
》OrderServiceImpl 생성
》OrderService 인터페이스의 다른 구현 객체 생성 및 실행
· 프레임워크 vs. 라이브러리
》프레임워크 : 내가 작성한 코드를 제어하고 대신 실행 (ex. JUnit)
》라이브러리 : 내가 작성한 코드가 직접 제어의 흐름을 담당
✨ 의존 관계 주입 DI (Dependency Injection)
· 의존 관계 : 정적인 클래스 의존 관계 or 동적인 객체 의존 관계
· OrderServiceImpl : DiscountPolicy 인터페이스에 의존, 어떤 구현 객체가 사용될지는 모름
· 정적인 클래스 의존 관계
➡️ 클래스가 사용하는 import 코드만으로 의존 관계 파악 용이 (애플리케이션을 실행하지 않아도 분석 가능)
➡️ OrderServiceImpl →(의존)→ MemberRepository, DiscountPolicy
· 동적인 클래스 의존 관계
➡️ 애플리케이션 실행 시점에서 실제 생성된 객체 인스턴스의 참조가 연결되는 의존 관계
➡️ 객체 인스턴스 생성 후, 그 참조값을 전달해서 연결
➡️ 의존 관계 주입 사용 시
- 클라이언트 코드 변경 X : 클라이언트가 호출하는 대상의 타입 인스턴스 변경
- ⭐ 정적인 클래스 의존 관계 변경 X : 동적인 객체 인스턴스 의존 관계 쉽게 변경
✨ IoC 컨테이너, DI 컨테이너
· 객체 생성 & 관리 → 의존 관계 연결 (ex. AppConfig)
· 의존 관계 주입에 초점을 맞춰, 최근에는 주로 DI 컨테이너라 함 (or 어셈블러, 오브젝트 팩토리)
'Spring > 스프링 핵심 원리 - 기본편' 카테고리의 다른 글
[스프링 컨테이너와 스프링 빈] 스프링 컨테이너 생성 (0) | 2023.11.20 |
---|---|
[이해2 - 객체 지향 원리 적용] 스프링으로 전환하기 (0) | 2023.11.19 |
[이해2 - 객체 지향 원리 적용] SOLID 中 적용된 3가지 원칙 (0) | 2023.11.14 |
[이해2 - 객체 지향 원리 적용] 기획자 AppConfig (+ 새로운 할인 정책 적용 문제 해결) (0) | 2023.11.13 |
[이해2 - 객체 지향 원리 적용] 새로운 할인 정책 도입 (+ 문제점) (0) | 2023.11.09 |