Open choisun opened 7 years ago
로드 존슨이 DI를 생각한 이유는 기본적으로 그것이 유연한 객체지향설계의 가장 대표적인 기법이었기 때문이고, DI를 지원하는 프레임워크를 만든 이유는 그 기법을 제대로 적용하기 위해서 그 단점을 극복하려고 했기 때문이다.
나는 DI의 기원을 GoF패턴의 전략패턴(strategy pattern)에서 찾는다. 물론 DI는 패턴을 스코프로 분류했을 경우에 object scope에 해당하는 모든 패턴에 다 들어맞는다. 상속을 확장을 위해서 사용하는 class scope구조에는 DI가 적용되지 않는다(DI를 적용하다보니 가끔 필요한 경우가 있긴 하다. method injection은 상속을 통한 확장기법의 특별한 사례이다).
DI가 뭐 거창하고 대단한 것이라고 오해하기 쉬운데 가장 원시적이며, 핵심적인 DI란 오브젝트 합성 구조를 통한 확장성을 보장받기 위해서 그 둘(context, strategy) 말고 제3의 존재(클라이언트든 뭐든)가 필요하고 그 제3의 존재가 런타임 의존관계(링크)를 제공해줘야 한다는 뜻이다
What is dependency injection?
일반적인 사용 (개인적인 생각)