posted by 방랑군 2009. 10. 6. 16:47



DI (Dependency Injection)은 크게 보면 객체간 의존성을 객체에게 맡기는 것이 아니라, 컨테이너가 필요한 시점에 필요한 관련 객체를 만들어 의존성을 해소시켜주는 것이며, 이 과정에서 자연스럽게 생성한 객체들의 라이프 싸이클을 관리하는 기능도 제공하게 된다. 따라서 DI 컨테이너를 사용할 경우에는 이를 사용하지 않을 때에 비해 성능상 약간의 영향을 받게 된다. DI 컨테이너를 사용치 않았을 때는, 다른 객체를 필요로하는 주체가 필요한 객체의 생성자를 직접 호출하여 사용하였기 때문에 직관적이며 이렇게 생성된 코드는 다른 사람이 이해할 때 훨씬 쉬운 면이 있다. DI 컨테이너가 개입되면 객체 생성이 간접적으로 이루어지기 때문에 성능상 약간의 오버헤드도 감안해야 하며, 컨테이너 자체에 대한 교육이나 이해가 필요하게 되어  전반적으로 프로젝트의 복잡도는 약간 증가하게 된다. 따라서, 유행처럼 DI 컨테이너에 대한 관심이 증가하고 있지만, 개발하는 프로그램의 성격상 객체간 의존성이 많지 않고, 의존성이 있다손 치더라도 그다지 복잡하지 않은 경우에는 DI 컨테이너의 사용은 추천할만한 것이 못된다. 객체간 혹은 클래스가 의존성이 많고 복잡하며 이의 해소를 컨테이너에 의지하여 추상화하고자 할때 혹은 런타임시에 이들 객체간 의존성을 변경할 필요가 있을 시에는 Unity와 같은 DI 컨테이너의 적용을 고려해볼 만 하다.

'GET > FrameWork' 카테고리의 다른 글

방랑이가 생각하는 Spring.NET...  (0) 2009.10.06
Spring.NET - 레퍼런스 문서 한글화 사이트..  (0) 2009.09.30
객체의 생명주기  (0) 2009.09.30
Spring 컨테이너와 아키텍처 구성  (0) 2009.09.30
Spring.NET 생명 주기  (0) 2009.09.30