Advanced C# 3. 디자인 패턴(DP)과 Simple Factory Pattern | ||
등록: 한빛미디어(주) (2003-02-05 19:24:12) | ||
저자: 한동훈(traxacun at unitel.co.kr) 디자인 패턴을 짧게 얘기하면 '프로그래머가 지향해야할 이상향의 목록'이라 할 수 있다. 디자인 패턴은 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides 이상 4명의 저자가 공동집필한 『Design Patterns』를 시작으로 다양한 디자인 패턴 관련 책들이 출간되었다. 많은 프로그래머들이 사용하는 무의식속의 프로그래밍 스타일을 하나하나 끄집어낸 책이 "『Refactoring』"이었다면, 프로그래머들이 무의식속에 사용해왔던 또는 숙련된 개발자들이 사용해 온 객체 지향 설계 기법들을 정리한 책이 『Design Patterns』이다. 검색 엔진을 찾아보면 다양한 자료가 많고, 수십종의 책이 출간되어 있기 때문에 보다 자세한 내용들은 직접 찾아볼 것을 권한다. 그러나 한 가지만 지적한다면 객체 지향 프로그래머의 한 손에 "리팩토링"이라는 도구를 들었다면, 다른 한 손에는 "디자인 패턴"이라는 도구를 손에 들고 있어야할 것이다. 안티 패턴이라는 것은 디자인 패턴과 반대로 '프로그래머가 하지 말아야할 것들의 목록'이다. 디자인 패턴은 처음부터 분석과 설계를 통해 짜임새있게 적용해 나가야한다는 것인데 이것이 나처럼 멍청한 개발자에게는 보통 어려운 일이 아니다. 디자인 패턴이 출간된 이후 William J. Brown에 의해서 출간된 『AntiPatterns』를 통해 현재 작성중인 코드의 문제점을 살펴볼 수 있을 것이다. 남의 실패로부터 뭔가를 배우는 것만큼 즐거운(?) 일은 없을 것이다. 디자인 패턴을 저술한 4명의 저자들을 "Gang of Four"라 하기 때문에 흔히들 'GoF책'이라 부른다. 이 책에서는 23가지의 대표적인 패턴들을 설명하고 있다. Simple Factory는 GoF 책에 설명되어 있지 않지만 AbstractFactory, Builder를 비롯한 다양한 패턴에서 찾아볼 수 있고, 실제로 이러한 패턴들을 몰라도 많은 객체 지향 프로그래머들이 사용해왔던 방법을 Simple Factory라 한다. 그래서 간단히 Simple Factory에 대해서만 소개하는 것으로 마치려한다. Simple Factory
대부분의 생성 패턴과 마찬가지로 Simple Factory 역시 Conceptual Subclass인 경우에 유용하게 사용할 수 있다.(Conceptual Class에 대해서는 2회를 참고하기 바란다.) 실행결과는 다음과 같다.
나머지 소스 코드는 다음과 같다.
디자인 패턴이나 리팩토링, 어느 것 하나 만만하게 넘어갈 수 있는 산(?)이 아님은 분명하다. 그러나 이들이 정복해야할 대상이나 지긋지긋한 존재로 생각하는 대신에 이들을 즐겨야할 대상으로 본다면 세상은 훨씬 행복하지 않을까 싶다. 주위에 공부는 하지 않고 투덜대는 사람들은 많다. 하지만 넘어가야할 대상이라면 즐거운 마음으로 산행을 하는 것도 좋을 것 같다. 함께 산행할 동료라도 있다면 행복하지 않을까? :) 당부하고 싶은 것은 디자인 패턴을 위한 디자인 패턴과 같은 순수주의(Purism)나 이상론(Idealism)은 피하고, 실제로 자신만의 프로그램을 작성하면서 이들에 대해서 고민할 시간을 가졌으면 좋겠다. 다음부터는 각 패턴들에 대해서 설명할 것이다. 그러나 무지한 내가 각 패턴에 대해서 설명하는 것은 제대로 알지도 못하면서 아는 척 하는 '오만함'이며, 이미 책에 있는 내용들을 다시 반복하게 될 것이 분명하다. 따라서 GoF 패턴에 대해서는 자세한 설명을 하지 않고 UML 다이어그램과 순수 구현 코드만을 나열하려한다.(단 3회로 끝내고 싶지만 한 회의 분량이 길어지면 편집하는 분이 싫어하기도 하고 독자도 지칠 듯 해서 각 패턴별로 한 회씩이다!) 보다 자세한 설명은 GoF의 책과 그외 잘 알려진 책들을 참고했으면 한다. GoF의 책에 설명된 패턴들을 모두 C#으로 재생산하는 작업을 한 것은 순전히 개인적인 즐거움 때문이다. UML 클래스 다이어그램은 완전한 형태로 나열할 것이므로 코드를 보기전에 직접 코드로 옮겨보는 연습을 하다보면 클래스 다이어그램에 대한 이해도 함께 얻을 수 있을 것이다. 닷넷에서 마땅한 디자인 패턴 책이 없어서 어려워하는 분들에게 도움이 되었으면 한다. 끝으로 내가 살펴본 책들 중에 좋은 책들을 몇 권 옮겨둔다.(대부분의 책들이 UML, OOAD에 대한 설명으로 책의 절반을 탕진한 다음에야 본론을 시작하고 있기 때문에 이것이 '독자에 대한 배려'인지 페이지 수를 부풀리기 위한 고질적인 '출판사의 관행'인지는 모르겠다.) 참고자료
|
'알고리즘' 카테고리의 다른 글
Advanced C# 4. DP - Monostate, Utility, Singleton Pattern (0) | 2008.01.08 |
---|---|
Advanced C# 5. DP - Factory Method (0) | 2008.01.08 |
Advanced C# 2. 인터페이스 (0) | 2008.01.08 |
Advanced C# 1. UML (0) | 2008.01.08 |
IDisposable 살펴보기(CLR Inside Out) (0) | 2007.07.13 |