메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

Advanced C# 3. 디자인 패턴(DP)과 Simple Factory Pattern

한빛미디어

|

2003-02-05

|

by HANBIT

11,704

저자: 한동훈(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


[그림 1] Simple Factory

운영체제에 따라서 동작이 바뀌는 경우에 위와 같이 표현할 수 있고, 실제로 이렇게 상속받은 클래스를 사용하는 경우는 흔하다. 그리고 실제 위 클래스를 사용하는 코드는 다음과 같이 작성하곤 한다.


[그림 2] Tester 클래스

위 소스처럼 #define을 정의해서 코딩하는 방법대신 보다 깔끔하게 할 수 있는 생성패턴들이 있지만 여기서는 간단하게 하기 위해 위와 같은 코드를 작성하였다. :) (보통 Simple Factory에 대한 예제로 Person 클래스의 FirstName과 LastName을 예로 들고 사람의 이름에 MiddleName이 있느냐에 따라 두 종류의 FirstName 파생 클래스 중에 하나를 선택해서 사용하는 것으로 설명하고 있다.)

대부분의 생성 패턴과 마찬가지로 Simple Factory 역시 Conceptual Subclass인 경우에 유용하게 사용할 수 있다.(Conceptual Class에 대해서는 2회를 참고하기 바란다.) 실행결과는 다음과 같다.

Mona.DesignPattern.Windows.Disk()

press any key to end...



나머지 소스 코드는 다음과 같다.


[그림 3] OperatingSystem 클래스


[그림 4] Linux 클래스


[그림 5] Windows 클래스

마치며

디자인 패턴이나 리팩토링, 어느 것 하나 만만하게 넘어갈 수 있는 산(?)이 아님은 분명하다. 그러나 이들이 정복해야할 대상이나 지긋지긋한 존재로 생각하는 대신에 이들을 즐겨야할 대상으로 본다면 세상은 훨씬 행복하지 않을까 싶다. 주위에 공부는 하지 않고 투덜대는 사람들은 많다. 하지만 넘어가야할 대상이라면 즐거운 마음으로 산행을 하는 것도 좋을 것 같다. 함께 산행할 동료라도 있다면 행복하지 않을까? :)

당부하고 싶은 것은 디자인 패턴을 위한 디자인 패턴과 같은 순수주의(Purism)나 이상론(Idealism)은 피하고, 실제로 자신만의 프로그램을 작성하면서 이들에 대해서 고민할 시간을 가졌으면 좋겠다.

다음부터는 각 패턴들에 대해서 설명할 것이다. 그러나 무지한 내가 각 패턴에 대해서 설명하는 것은 제대로 알지도 못하면서 아는 척 하는 "오만함"이며, 이미 책에 있는 내용들을 다시 반복하게 될 것이 분명하다. 따라서 GoF 패턴에 대해서는 자세한 설명을 하지 않고 UML 다이어그램과 순수 구현 코드만을 나열하려한다.(단 3회로 끝내고 싶지만 한 회의 분량이 길어지면 편집하는 분이 싫어하기도 하고 독자도 지칠 듯 해서 각 패턴별로 한 회씩이다!) 보다 자세한 설명은 GoF의 책과 그외 잘 알려진 책들을 참고했으면 한다. GoF의 책에 설명된 패턴들을 모두 C#으로 재생산하는 작업을 한 것은 순전히 개인적인 즐거움 때문이다. UML 클래스 다이어그램은 완전한 형태로 나열할 것이므로 코드를 보기전에 직접 코드로 옮겨보는 연습을 하다보면 클래스 다이어그램에 대한 이해도 함께 얻을 수 있을 것이다. 닷넷에서 마땅한 디자인 패턴 책이 없어서 어려워하는 분들에게 도움이 되었으면 한다.

끝으로 내가 살펴본 책들 중에 좋은 책들을 몇 권 옮겨둔다.(대부분의 책들이 UML, OOAD에 대한 설명으로 책의 절반을 탕진한 다음에야 본론을 시작하고 있기 때문에 이것이 "독자에 대한 배려"인지 페이지 수를 부풀리기 위한 고질적인 "출판사의 관행"인지는 모르겠다.)

참고자료
  • 『Simple Factory Pattern』, c-sharpcorner
  • 『Simple Factory Pattern』, .Net Extreme
  • 『IT EXPERT, 자바 디자인 패턴과 리팩토링』
    또 자바에 대한 내용으로 가득하지만 지나치게 자바에 한정된 몇 가지 주제들을 무시하더라도 이 책에는 객체지향 프로그래밍과 보다 좋은 프로그램을 만들기 위해 코드를 진보시켜나가는 자세한 과정들을 담고 있기 때문에 UML, 디자인 패턴, 리팩토링이 두려운 분들에게 좋은 출발점이 될 것이다.
    이외에도 UML에 대한 도서는 많이 있으며 여러분의 구미에 맞는 도서를 직접 선택하기 바란다.
  • 『GoF의 디자인 패턴』
    『Design Patterns』의 번역서다. C++ 코드로 설명되어 있고, 부분부분 Smalltalk로 설명된 부분이 있다. 오래된 책이지만 그럼에도 많은 사람들이 보게되는 책이다.
  • 『AntiPatterns』
    안티 패턴에 대한 책이며 원서가 어렵거나 편하게 볼 수 있는 책을 원한다면 『Bitter Java』를 권한다.
  • 『쓰디쓴 자바』
    : 자바 안티패턴 이야기들

    자바 출판물로 잘 알려진 Manning의 Bitter Java의 번역서다.
이외에도 다양한 출판물이 있지만 선택은 독자의 몫이다. 『IT Expert, 자바 디자인 패턴과 리팩토링』은 GoF의 책이 어려웠던 분들(원인은 C++에 익숙하지 않은 경우가 아닐까 짐작해보지만)에게 좋은 출발점이 되리라 생각한다.(하룻밤 꼬박 세워서 읽었지만 결국 서평은 안쓰고 말았다. :)
TAG :
댓글 입력
자료실