IoC, DI란?

Leo·2023년 1월 29일
0

1. 제어의 역전 IoC(Inversion of Control)

  • 기존 프로그램은 클라이언트 객체가 스스로 구현 객체를 생성하고 연결하고, 실행했음
  • AppConfig 등장 이후 구현 객체는 자신의 로직을 실행하는 역할만 담당함. 따라서 프로그램의 제어 흐름은 이제 AppConfig가 가져감으로써 제어의 역전이 발생
  • 이렇듯 프로그램의 제어 흘믕르 직접 제어하는것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)이라 함

    프레임워크가 내가 작성한 코드를 제어하고, 대신 실행하는 것은 프레임워크가 맞음 (JUnit)
    내가 작성한 코드가 직접 제어의 흐름을 담당한다면 그것은 라이브러리

2. 의존관계 주입 DI(Dependency Injection)

  • 클라이언트 객체는 인터페이스에 의존하므로 실제 어떤 구현 객체가 사용될지는 모름
public class OrderServiceImpl implements OrderService{
    private final DiscountPolicy discountPolicy; //인터페이스에 의존함 AppConfig에서 구현객체를 던짐
}
  • 의존관계는 "정적인 클래스 의존 관계(클라이언트 객체)와, 실행 시점에 결정되는 동적인 객체(인스턴스 - AppConfig) 의존 관계" 둘을 분리해서 생각해야 함
  • 어플리케이션 "실행 시점(런타임)"에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서 클라이언트와 서버의 실제 의존관계가 연결 되는 것을 "의존관계 주입" 이라 함

0개의 댓글