IoC, DI

HYUNBIN CHO·2021년 4월 13일
0

spring

목록 보기
3/23
post-thumbnail

🔷 IoC(Inversion of Control) : 제어의 역전

🔸 의존관계 주입 : 애플리케이션 실행시점(런타임)에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서 클라이언트와 서버의 실제 의존관계가 연결되는 것
의존관계 주입을 사용하면 -> 클라이언트 코드를 변경하지 않고도 클라이언트가 호출하는 대상의 타입 인스턴스를 변경할 수 있다.
-> 정적인 클래스 의존관계를 변경하지 않고 동적인 객체 인스턴스 의존관계를 쉽게 변경할 수 있다. 객체의 생성부터 생명주기의 관리까지 객체에 대한 모든 제어권이 자신이 아닌 외부의 다른 대상에게 있는 것.

🔸 보통의 자연스러운 흐름 : 구현객체가 필요한 서버 구현 객체를 생성, 연결 실행
➡️ 구현객체가 프로그램의 흐름을 제어한다.

🔸 AppConfig의 등장으로 제어의 흐름이 바뀌었다.
➡️ 구현객체의 입장에서는 인터페이스만 호출할 뿐, 어떤 구현객체들이 실행되는지 알 수 없다.
➡️ 구현객체는 단지 자신의 로직을 실행하는 역할만 하고, 프로그램의 제어권은 AppConfig에 있다.

🔷 프레임워크와 라이브러리

🔸 프레임 워크 : 내가 작성한 코드를 대신 실행하고 제어함(Junit)
🔸 라이브러리 : 내가 작성한 코드가 직접 제어의 흐름을 담당함

🔷 DI(Dependency Injection) : 의존관계 주입

🔸 의존관계 주입 :
애플리케이션 실행시점(런타임)에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서 클라이언트와 서버의 실제 의존관계가 연결되는 것

🔸 의존관계 주입을 사용하면
➡️ 클라이언트 코드를 변경하지 않고도 클라이언트가 호출하는 대상의 타입 인스턴스를 변경할 수 있다.
➡️ 정적인 클래스 의존관계를 변경하지 않고 동적인 객체 인스턴스 의존관계를 쉽게 변경할 수 있다.

정적인 클래스 의존관계와 실행시점에 결정되는 동적인 객체의 의존관계를 분리해서 생각해야 한다.
- 정적인 의존관계 : import만 보고도 의존관계를 파악할 수 있다.
(OrderServiceImpl -> MemberRepository, DiscountPolicy)
- 동적인 객체 인스턴스 의존관계 : 애플리케이션의 실행시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존관계
(OrderServiceImpl -> MemoryMemberRepository, RateDiscountPolicy)

🔷 DI컨테이너(IOC컨테이너)

🔸 AppConfig처럼 객체를 생성하고 관리하면서 의존관계를 연결해주는 것
쉽게 말해, 의존관계 역전을 일으키는 주체. (=어샘블러, 오브젝트 팩토리)






https://www.inflearn.com/course/스프링-핵심-원리-기본편#

profile
백견이 불여일타

0개의 댓글