Spring - IoC & DI


1. 의존성

  • 파라미터나 리턴값 또는 지역변수 등으로 다른 객체를 참조하는 것

  • 예를들면, MemberService 는 MemberRepository 를 참조한다.



2. IoC (Inversion of Control)

  • IoC는 제어의 역전이다.

  • 우리가 Service에 대한 Interface를 만들 때, 해당 Interface가 어떤 구현체를 의존하는지 Controller에서 알지 못하게 하고, DI 컨테이너나 AppConfig와 같은 외부에서 조립하고 알 수 있게 제어권을 넘긴다. 이러한 것을 IoC라고 한다.



3. DI (Dependency InjectionDependency Injection)

  • DI는 의존관계 주입을 말하는데 예를들어 Controller에서 Service를 의존할 때,

      private final Service service;
    
    • 라고만 선언한다.
  • 실제 저 Service에 어떤 구현체가 연결될 지 모른다는 것이다.

  • 하지만 RunTime에 외부(Spring의 DI 컨테이너나 AppConfig)에서 구현 객체를 생성하고 클라이언트에 전달해서 서버의 실제 의존관계가 연결되는 것을 DI라고 한다.



4. 결론

  • IoC와 DI는 이처럼 미묘한 차이가 있는데, 어디에 Focus를 맞추느냐에 따라 다르다고 생각하면 된다.

  • 어떤 구현체를 의존하게 되는지는 외부에서 결정되는데, 외부에서 결정되는 것에 Focus를 맞추면 IoC이고, 런타임에서 해당 의존관계가 외부로부터 정해져서 서버의 실제 연결되는 것에 Focus를 맞추면 DI라고 한다.

    • 우리가 Junit 처럼, Test를 할 때 제어권을 아예 Junit에게 넘기는데 그걸 IoC라고도 한다.

    • 하지만 저게 DI는 될 수 없다. 의존관계를 주입해주는건 아니기 때문이다.






results matching ""

    No results matching ""