가령 다양한 마이너스 통장(overdraft) 정책을 지원해야 하는 뱅킹 애플리케이션을 구축한다고 합시다. 계좌 잔고 한도 및 초과 인출된 계좌에 부과되는 수수료는 은행 정책마다 다릅니다. 이 문제는 디자인 패턴 교과서에 나오는 전략 패턴(Strategy pattern)으로 해결할 수 있습니다. 전략 패턴에 따르면 이 문제의 솔루션은 다음 세 가지로 구성됩니다.
• 초과 인출 알고리즘을 캡슐화한 전략 인터페이스 Overdraft
• 하나 이상의 전략 구상 클래스(concrete class)(각각 특정 맥락(context)을 표현함)
• 알고리즘을 사용하는 Account 클래스
전략 패턴은 객체 지향 디자인 패턴이므로 솔루션의 엘리먼트는 클래스입니다. 여러 서비스가 협동하는 고수준의 디자인 패턴은 이 절 뒷부분에서 다룹니다.
패턴은 자신이 적용되는 맥락을 반드시 기술해야 한다는 점에서 가치가 큽니다. 패턴이 제시한 솔루션이 어떤 맥락에서는 통하지만 또 다른 어떤 맥락에서는 전혀 통하지 않을 수도 있다는 생각 덕분에 더 나은 방법으로 기술을 논할 수 있게 되었습니다. 예를 들어 넷플릭스 정도 규모의 대기업에서 사용했던 솔루션이 소수의 사용자만 쓰는 애플리케이션에서도 잘 통하리란 보장은 없죠.
물론 패턴은 맥락을 고려하게 만드는 것 외에도, 매우 중요하지만 자주 간과되는 솔루션의 측면도 함께 기술하도록 강제한다는 점에서 효용성이 큽니다. 상용 패턴의 구조는 대략 다음 세 부분으로 구성됩니다.
• 강제 조항(forces)
• 결과 맥락(resulting context)
• 연관 패턴(related patterns)