24.1 개요
템플릿 메서드 패턴은 단계별로 수행하는 행위에 대한 약속을 기반 클래스에서 정의를 하고 각 단계별로 수행하는 구체적 구현은 파생 클래스에서 재정의하는 형태의 패턴입니다.
비슷한 형태의 프로그램 구현에 필요한 뼈대를 일반화하여 제공을 하는 것은 실무에서 자주 사용하는 기법입니다. 일반화 과정을 통해 작성된 뼈대가 마련이 되어 있다면 실제 프로그래밍을 할 때에는 이를 기반으로 세부적인 기능에 대한 재정의를 통해 효과적인 프로그래밍을 할 수 있습니다. 그리고, 설계 단계에서 프로그램 뼈대를 고민하는 비용을 줄일 수 있게 되고 기술 노하우를 결집 시킬 수 있게 해 줍니다.
이를 위해서 템플릿 메서드 패턴에서는 특정 연산을 구성하는 세부 기능의 흐름에 대한 정의를 기반 클래스에 일반화합니다. 그리고, 이를 기반으로 파생된 클래스에서는 세부 기능의 구체적인 구현을 재정의하는 과정을 거칩니다. 이와 같이 템플릿 메서드 패턴에서는 특정 연산을 수행하는 세부 기능의 흐름에 대한 약속과 세부적인 기능에 대한 구체적 구현을 분리하는 패턴입니다.
” 템플릿 메서드 패턴은 세부 기능의 흐름을 약속과
세부적인 기능의 구체적 구현을 분리하는 패턴”
24. 2 시나리오
EH Camera 회사의 객원 감수를 맡아 여러 작업에 참여를 하다 보니 개발 팀에 새로운 얼굴로 바뀌는 일도 자주 생기네요. 이렇게 개발 팀의 얼굴이 바뀔 때마다 새로운 개발자는 개발에 필요한 기본 기술에 대한 학습 비용이 만만치 않게 들어가는 것을 보게 됩니다. 더구다 예전에 작성했던 프로그램과 비슷한 형태의 프로그램을 제작할 때에도 비용이 크게 줄지 않았습니다. 지난 주에는 이 매핑 씨와 같이 저녁을 먹었는데 경영진에서 개발 팀에 대한 처우 개선에 대한 얘기와 기술 노하우를 축적에 대한 얘기가 나왔다고 하네요.
“우리 회사에서 만드는 프로그램들은 대부분 비슷한 구조를 갖고 비슷한 기술을 사용할 것 같은데 매 번 개발 비용이 줄지 않는 것은 이미 개발 공정과 기술 노하우 축적이 최적화 되어서 그런 걸까요?”
“글쎄, 한 번 검토를 해 봐야 할 것 같은데 당분간 이 문제에 대해서만 신경을 써도 될까요?”
예전부터 이에 대해 검토를 해 봐야 겠다고 생각만 하고 있었는데 좋은 계기가 된 것 같아요. 이 매핑 씨와 저녁을 한 다음 날부터 강의가 없는 시간에는 EH Camera 회사에 방문하여 이제까지 작성한 여러 프로그램의 설계 문서들을 살펴보았어요. 그리고, 비슷한 여러 프로그램이 동작하는 기본 흐름이 비슷함에도 불구하고 사용되는 이름이나 인자 등이 다르다는 것을 알게 되었지요. 저는 프로그램들을 종류에 따라 분류를 하고 비슷한 종류의 프로그램들의 기본적인 흐름들에 대한 공통점들을 추리는 작업을 시작했어요. 그리고, 이를 간단한 형식으로 정의를 하고 이를 기반으로 데모 응용을 작성을 하였습니다. 마지막으로 이에 대한 기술 문서를 작성하고 개발 팀장에게 보여주었죠.
몇 일이 지난 뒤에 개발 팀에서는 개발 노하우를 축적할 방안을 경영진에 제시하였고 경영진에서는 개발 팀의 처우를 어떻게 개선할 지에 대한 검토가 들어갔다고 하네요.