I'm going to start by talking about the various forms of dependency injection, but I'll point out now that that's not the only way of removing the dependency from the application class to the plugin implementation
The key benefit of a Dependency Injector is that it removes the dependency that theMovieLister
class has on the concreteMovieFinder
implementation
* 마틴 파울러의 글 링크를 오랜만에 봐서 레퍼런스에서 빠졌나 했더니 아직 첫장에 남아 있네요. 그 만큼 레퍼런스를 잘 안 본다
는 뜻인가봐요. ㅎㅎ
On 6월9일, 오후1시37분, Toby Lee <tobyi...@gmail.com> wrote:
> 이전의 DI 용어 번역 논의에서 한 부분을 차지했던 dependency에 대해서 좀 더 생각해보고 싶습니다.
> Dependency Injection이라는 용어를 처음 만들어서 제안했던 사람은 Martin Fowler입니다. 스프링이 사용한 방식을
> IoC라는 너무 느슨하고 일반적인 용어로 부르는 것보다는 그 특성을 잘 나타낸 구체적인 용어를 사용하는 것이 좋겠다고 생각해서 제안한
> 것이죠.
>
> 그의 IoC/DI 소개 글은 매우 유명합니다. 스프링 레퍼런스 문서에서도 IoC개념을 위해서 1.0 문서 때부터 이 문서를 읽도록
> 권장하고 있습니다.http://www.martinfowler.com/articles/injection.html
>
> 이 글에 나타난 dependency에 대한 설명을 좀 살펴볼 필요가 있습니다.
>
> I'm going to start by talking about the various forms of dependency
>
> > injection, but I'll point out now that *that's not the only way of
> > removing the dependency from the application class* to the plugin
> > implementation
>
> 이 글에 나타난 dependency에 대한 설명을 좀 살펴볼 필요가 있습니다. DI에 대해서 먼저 설명한다고 하면서 그것이 애플리케이션
> 클래스에서 dependency를 제거하는 유일한 방법은 아니다라고 이야하기 하고 있습니다. DL(service locator)도 있다는
> 설명을 위한 것인데, 아무튼 여기서 관건은 *DI란 application class에서 dependency를 제거하는 방법의 일종*이라는
> 것입니다.
>
> 좀 더 구체적인 설명을 보죠.
>
> The key benefit of a Dependency Injector is that it removes* the dependency
>
> > that the **MovieLister** class has on the concrete **MovieFinder**
> > implementation*
>
> 예제에 나온 MovieLister -> MovieFinder(interface) -> MovieFinderImpl 관계를 가지고
> 설명하기를 DI의 장점은 dependency를 제거하는 것인데, *dependency란 MovieList클래스가
> MovieFinderImpl 클래스에 대해서 가지고 있는 것*이라고 되어 있습니다.
>
> 내용은 쉽습니다. MovieList가 MovieFinder라는 인터페이스에만 의존하고 있어야지, MovieFinderImpl에 의존하고
> 있으면 안된다는 것이고, 그 것을 완벽하게 제거하기 위해서는 인터페이스를 도입할 뿐더러, 그 DI를 통해서 외부에서 dependency를
> 주입해주도록 해야 한다는 것입니다.
>
> 자 그럼 여기서 제거 된다는 dependency란 무엇일까요? 그것은 MovieLister안에 가지고 있는 구체적인 클래스에 대한 모든
> 정보를 말합니다. 그 정보를 가지고 있기 때문에 발생하는 모델링 타임의 의존관계(dependency relationship) 또는
> 의존하고 있는 성질(?)이라고 추상적으로 말할 수 있는 의존성(dependency)입니다.
>
> 적어도 여기서 볼때 dependency란 런타임시에 컨테이너가 집어넣어주는 dependent object가 아님을 분명히 알 수
> 있습니다.
> 오히려 그것은 모델링 타임시 코드레벨에서 가지고 있을 수 있는 의존관계(UML에서 쓰는 용어이죠)를 가리킨다는 것이라고 볼 수 있습니다.
> 코드에서는 제거해주고 대신 IoC/DI컨테이너가 대신 부여(주입)해준다는 것이죠.
>
> 즉, MovieLister 코드에 나타날 수 있는 특정 클래스에 대한 의존관계(또는 의존성)을 외부로 제거하는 것이 DI라는
> 설명입니다.
>
> 물론 나중에 DI 방식의 컨테이너가 해주는 일은 구체적로 런타임시 의존객체를 전달해주어서 그것과 런타임 의존관계를 만들어주는 것입니다.
> 구현 메카니즘으로 보면 dependent object injection이라고 할 수 있지만, 그 개념을 보자면 코드레벨에서 구체클래스에
> 의존관계를 가지지 않도록 해주는 것이 DI 라는 것입니다.
>
> 그래서 DI라는 용어를 처음 고안한 Martin Fowler의 아이디어에 따르면
>
> *DI에서 dependency를 의존객체라고 보는 것은 적절치 않습니다.*
> *대신 코드 레벨에서 제거했지만, 런타임시에 가지게 해주는 의존관계 또는 의존성으로 보는 것이 타당하다는 것입니다.*
>
> http://publib.boulder.ibm.com/infocenter/radhelp/v6r0m1/index.jsp?top...
> 에서 볼 수 있 듯이, 한쪽 클래스가 다른 클래스에 의존하고 있는 것을 UML에서는 dependnecy relationship이라고
> 표현합니다.
> 위의 설명에서 제거한다는 dependency란 바로 그것을 말하고 있고(have dependency on a class), 그런면에서
> 의존관계라고 이해하는 것이 DI 개념을 가장 잘 설명한 dependency의 해석이라고 봅니다.
>
> *물론 DI에서 dependency의 뜻이 그렇다는 것이지, 그래서 용어번역도 그래야 맞다고 주장할 생각은 없습니다.*
> *번역이란 또 다른 이유와 목적을 위해서 원개념과 다른 대안번역어를 가질 수 있기 때문이니까요.*
자 그럼 여기서 제거 된다는 dependency란 무엇일까요? 그것은 MovieLister안에 가지고 있는 구체적인 클래스에 대한 모든 정보를 말합니다. 그 정보를 가지고 있기 때문에 발생하는 모델링 타임의 의존관계(dependency relationship) 또는 의존하고 있는 성질(?)이라고 추상적으로 말할 수 있는 의존성(dependency)입니다.
...
DI에서 dependency를 의존객체라고 보는 것은 적절치 않습니다.대신 코드 레벨에서 제거했지만, 런타임시에 가지게 해주는 의존관계 또는 의존성으로 보는 것이 타당하다는 것입니다.
...
물론 DI에서 dependency의 뜻이 그렇다는 것이지, 그래서 용어번역도 그래야 맞다고 주장할 생각은 없습니다.번역이란 또 다른 이유와 목적을 위해서 원개념과 다른 대안번역어를 가질 수 있기 때문이니까요.
물론 나중에 DI 방식의 컨테이너가 해주는 일은 구체적로 런타임시 의존객체를 전달해주어서 그것과 런타임 의존관계를 만들어주는 것입니다. 구현 메카니즘으로 보면 dependent object injection이라고 할 수 있지만, 그 개념을 보자면 코드레벨에서 구체클래스에 의존관계를 가지지 않도록 해주는 것이 DI 라는 것입니다.
. 이러한 메커니즘 이해가 dependency 개념 표현보다 중요하다고 보면 '종속객체 주입'이라는 표현도 그리 나쁘지는 않다 생각합니다.
세종대왕께서 우리말을 만든 뜻
소수의 폐쇄적인 작업으로가 아니라 과정이 투명하게 공개되고, 많은 사람들이 참여하고 또는 피드백을 통해서 기여할 수 있는 그런 번역 또는 용어선정이라는 것이 가능할지 궁금하군요
--
In the midst of the street of it, and on either side of the river, was there the tree of life,
which bare twelve manner of fruits, and yielded her fruit every month: and the leaves of the tree were for the healing of the nations.
Gir won Lee
Dept. of Bioinformatics, Bioneer Corporation
URL: http://www.bioneer.co.kr
http://www.thegreatgoodplace.com
E-mail: leegw700@{bioneer.co.kr|ssu.ac.kr|gmail.com}
Tel: 82-42-930-8755
Phone: 82-10-3323-0868