제어? 스프링 IOC 와 DI

wisdom·2022년 7월 26일
0

프레임워크와 라이브러리

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

IOC

DI

  • 의존성 주입 -> 의존성을 주입 받는다.
  • Dependency + Injection 도 있는 구조
  • 내가 Control은 하지만 관리하는 컨테이너에서 받아(Inversion) 사용해야 함
  • 의존 관계 주입, Dependency Injection
  • 의존 관계는 정적인 클래스 의존 관계와, 실행 시점에 결정되는 동적인 객체(인스턴스) 의존 관계 둘을 불리해서 생각해야 한다.
    • 아래 코드를 보면 OrderServiceImpl 은 memberRepository 와 discountPolicy 에 의존한다는 것을 알 수 있지만 실제로 어떤 객체가 OrderServiceImpl에 주입될지는 모른다.
    • 정적인 클래스 의존 관계
      • 클래스가 사용하는 import 코드만 보고 의존 관계를 쉽게 판단할 수 있다.
    • 동적인 객체 의존 관계
      • 애플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존 관계
  • 실행 시점(런타임) 에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서 클라이언트와 서버의 실제 의존 관계가 연결되는 것을 의존 관계 주입이라 한다.
 public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
        this.memberRepository = memberRepository;
        this.discountPolicy = discountPolicy;
    }

IOC 컨테이너, DI 컨테이너

  • 객체를 생성하고 관리하면서 의존관계를 연결해주는 역할!

스프링 컨테이너

  • ApplicationContext

스프링 빈

  • 스프링 컨테이너에 등록된 객체

회고

  • IOC, DI 많이 들어는 봤는데 너무 추상적 느낌이 강했었다. 그런데 IOC는 DI를 통해 발생하는 추상적인 개념일 뿐이라 추상적인 느낌이 드는 게 당연한 단어였던 거 같다. 하지만 DI는 전보다 좀 더 알겠다. 스프링 컨테이너 안에 스프링 빈으로 불리는 객체들이 들어있고, 스프링이 대신해서 의존 관계를 주입해준다. 그 덕분에 확장에는 열려 있고 기존 코드의 변경에는 닫혀 있게 만들어주는 것이다.
profile
문제를 정의하고, 문제를 해결하는

0개의 댓글