GoF 디자인 패턴에서 느끼는 DI의 향기

책도 문서도 없는 맨땅에서 처음엔 이해하느라 애먹었던 IoC/DI를 지금은 하도 많이 쓰다보니 별 생각없이 자연스럽게 사용하게 된다. 사실 DI는 코드를 몇번 적용해보면 생각보다 사용하기는 쉽다.

하지만 그 가치를 충분히 이해하고, 그것을 맨땅에 있는 사람들에게 설명해주는 작업은 생각보다 쉽지 않다.

내가 발견한 DI를 설명하는데 자주 사용하는 툴은 디자인패턴과 객체지향설계 원칙이다. 로드 존슨의 빨간 책을 보면 그가 어떻게 디자인패턴을 스프링에 녹여놨는지에 대한 힌트를 얻을 수 있다. 또한 그가 설명한 대표적인 디자인 패턴은 객체지향설계원칙의 OCP와 잘 들어맞는다.

특히 전략패턴은 DI의 핵심을 가장 잘 담은 디자인패턴이라고 볼 수 있다.

무려 90년대 중반에 쓰인 이 책을 여러번 다시 읽다가 DI를 설명하기 좋은 문구를 발견했다.

A context forwards requests from its clients to its strategy. Clients usually create and pass a ConcreteStrategy object to the context; thereafter, clients interact with the context exclusively. There is often a family of ConcreteStrategy classes for a client to choose from.

- Design Pattern. Elements of Reusable OO Software. GoF

Client – Context – Strategy 라는 구조 만큼 DI를 설명하기 좋은 것이 있을까. 물론 Client의 그 특별한 행위(Concretestrategy를 선택하고 만들고 전달하는)를 다시 독립시키는 것이 필요하겠지만, 여기 충분히 그 메카니즘과 그 필요성이 잘 드러나 있다. 저 pass를 inject로 바꾸기만 하면 된다. ConcreteStrategyPass가 결국 DependencyInjection이 되는 거니깐.Create까지 뭉뚱그려서 보면 IoC가 되는 것이고.

1 Comment

기파리June 15th, 2009 at 4:40 pm

형님 연락 좀 주삼.
길래형님 DNS 관련 설정 좀 도와줘요.
ㅋㅋ 위 글과는 무관한 덧글이 되었구려…
여긴 심플한데 방명록 같은게 없나봐염.ㅋㅋ

Leave a comment

Your comment