choisun / spring-study

0 stars 0 forks source link

DI를 어디에 사용할까요 #2

Open choisun opened 7 years ago

cdecl commented 7 years ago

What is dependency injection?

일반적인 사용 (개인적인 생각)

cdecl commented 7 years ago

토비의스프링3

  1. 소프트웨어 개발에서 절대로 바뀌지 않는 것은 없기 때문이다. 클래스 대신 인터페이스를 사용하고, new 를 이용해 생성하는 대신 DI를 통해 주입받게 하는 건 아주 단순하고 쉬운 작업이다.
  2. 클래스의 구현 방식은 바뀌지 않는다고 하더라도 인터페이스를 두고 DI를 적용하게 해두면 다른 차원의 서비스 기능을 도입할 수 있기 때문이다.
  3. 테스트 때문이다.
    단지 효율적인 테스트를 손쉽게 만들기 위해서라도 DI를 적용해야 한다. 그러기 위해서는 가능한 한 작은 단위의 대상에 국한해서 테스트 해야한다.
cdecl commented 7 years ago

DI의 기원과 본질

로드 존슨이 DI를 생각한 이유는 기본적으로 그것이 유연한 객체지향설계의 가장 대표적인 기법이었기 때문이고, DI를 지원하는 프레임워크를 만든 이유는 그 기법을 제대로 적용하기 위해서 그 단점을 극복하려고 했기 때문이다.

나는 DI의 기원을 GoF패턴의 전략패턴(strategy pattern)에서 찾는다. 물론 DI는 패턴을 스코프로 분류했을 경우에 object scope에 해당하는 모든 패턴에 다 들어맞는다. 상속을 확장을 위해서 사용하는 class scope구조에는 DI가 적용되지 않는다(DI를 적용하다보니 가끔 필요한 경우가 있긴 하다. method injection은 상속을 통한 확장기법의 특별한 사례이다).

DI가 뭐 거창하고 대단한 것이라고 오해하기 쉬운데 가장 원시적이며, 핵심적인 DI란 오브젝트 합성 구조를 통한 확장성을 보장받기 위해서 그 둘(context, strategy) 말고 제3의 존재(클라이언트든 뭐든)가 필요하고 그 제3의 존재가 런타임 의존관계(링크)를 제공해줘야 한다는 뜻이다

Strategy pattern