디자인 패턴을 소프트웨어 공학의 구성요소로 볼 수 있는가? 이 분야에 패턴이 적합한지 판단할 수 있는가? 각 패턴이 얼마나 서로 어울리는지 장담할 수 있는가? 패턴은 가져다 쓰기만 하면 되는 냉동식품인가? 패턴을 종합적인 방법으로 접근할 수 없다면 우리는 이에 대한 답을 내릴 수 없다. 엘리멘틀 디자인 패턴은 패턴을 네 가지 카테고리로 나누며, 패턴을 종합적인 관점에서 볼 수 있는 도구를 제공한다.
디자인 패턴이 언어의 결점을 보완한다고 믿는가?
언어에 따라 쉽게 구현할 수 있는 패턴이 있고, 이해하기 어려운 패턴이 있다고 어떤 언어가 더 우월한 것은 아니다. 구체적인 개념이 언어 자체 기능으로 들어 있든 구체적인 기능을 개발자가 직접 구현해야 하든, 이는 디자인 패턴과 무관하다. 소프트웨어 설계와 구현은 별개이다. 설계는 개념이고, 개념을 특정 언어로 구체화하는 작업이 구현이다. 다른 언어에서 표현되는 차이를 두고 근본적인 차이라고 오해해서는 안 된다. 이 책에서는 C, C++, Java, Objective-C 등의 다양한 언어로 패턴을 설명한다.
디자인 패턴은 암기해야 하는가?
패턴은 문제의 맥락에서 변형하고, 구부려서 틀에 맞추고, 특정 집단의 필요성에 맞출 수 있게 만들어졌다. 원리를 이해하지 못하고 패턴 예제를 그대로 적용하면 잘못된 설계를 저지르기 쉽다. 이 책에서는 원리와 개념을 중심으로 패턴을 설명한다.
어떤 독자를 위한 책인가?
디자인 패턴을 배우고 사용했으나 원리를 정확하게 이해하지 못하는 독자
디자인 패턴을 습관처럼 사용했지만 응용하지 못하는 독자
디자인 패턴을 깊이 이해하고 싶은 독자
저자소개
저자
제이슨 맥컴 스미스
노스 캐롤라이나 대학에서 컴퓨터 과학 전공 박사 학위를 받았고 수년간 물리학 시뮬레이션 기사 겸 컨설턴트로 일했으며 물리학과 수학 전공으로 복수 이학사 학위를 취득했다. 주요 프로젝트로는 수중 음파탐지기와 해양 환경 시뮬레이션, 전자공학 시뮬레이션, 민간/군용 항공기 시뮬레이션, 실시간 그림 교육 시스템 등이 있다. 이후 그가 맡은 SPQR(패턴 질의/인식 시스템) 프로젝트의 일부가 엘리멘틀 디자인 패턴의 모체가 됐다. UNC-CH에서 이뤄진 연구에 대해 두 개의 미국 특허(SPQR 관련 기술, FaceTop 분산 문서 협업 시스템)를 획득했다.
역자
김지원
여가 시간에는 플래시 아이템 제작, 컴퓨터 음악 작곡 등을 하며, 때로는 구성이 잘 된 웹디자이너들의 사이트를 탐색하면서 아이디어를 구상하기도 한다. 뜨거운 감자인 웹 표준에 관해서도 큰 관심을 갖고 있으며, 이와 관련해서 유용한 보충 자료를 수집해 블로그를 통해 제공할 예정이다. 최근 우리말 번역에 있어서 기술 용어의 일관성에 대해 고민하고 있다. 건국대학교 신소재공학과를 졸업한 후, 기술문서, 매뉴얼 등을 위주로 번역해왔으며 유비쿼터스 IT 관련 논문들의 번역 작업에 참여했다. 2004년부터 현재까지 정보기술, 건축, 화학, 디자인, 사운드 등의 분야에서 프리랜서 번역가로 활동 중이다.
6장 중간 합성 패턴 약정 이행 메서드 Fulfill Method 새 객체 가져오기 Retrieve New 공유 객체 가져오기 Retrieve Shared 객체화 클래스 Objectifier 객체 되부름 Object Recursion
7장 GoF 합성 패턴 7.1 생성 패턴 추상 팩토리 Abstract Factory 팩토리 메서드 Factory Method 7.2 구조 패턴 데커레이터 Decorator 프록시 Proxy 7.3장 기능 패턴 책임 연쇄 Chain of Responsibility 템플릿 메서드 Template Method 7.4 이 장의 포인트
부록 A. Rho 계산법( -calculus) A.1 의존 연산자 A.2 이행성과 동위원소 A.3 유사도 A.4 EDP 공식 A.5 합성 공식과 환원 공식 A.6 패턴 인스턴스 표현법과 역할 A.7 EDP 정의 객체 생성 Create Object 가져오기 Retrieve 상속 Inheritance 추상 인터페이스 Abstract Interface 위임 Delegation 리디렉션 Redirection 병합 Conglomeration 되부름 Recursion 메서드 되돌림 Revert Method 메서드 확장 Extend Method 병합 위임 Delegated Conglomeration 되부름 리디렉션 Redirected Recursion 위임 신탁 Trusted Delegation 리디렉션 신탁 Trusted Redirection 위임 대행 Deputized Delegation 리디렉션 대행 Deputized Redirection A.8 중간 합성 패턴 정의 약정 이행 메서드 Fulfill Method 새 객체 가져오기 Retrieve New 공유 객체 가져오기 Retrieve Shared 객체화 클래스 Objectifier 객체 되부름 Object Recursion A.9 GoF 합성 패턴 정의 추상 팩토리 Abstract Factory 팩토리 메서드 Factory Method 데커레이터 Decorator 프록시 Proxy 책임 연쇄 Chain of Responsibility 템플릿 메서드 Template Method
처음 접했을때 "흔한" 디자인 패턴 관련 책인가 싶었다. 다양한 디자인 패턴을 소개하는 정도일 것이라고 생각 했다.
그러나, 곧 생각은 바뀌게 되었다. 디자인 패턴을 다른 관점으로 보는 방법을 소개하고, 그 관점으로 디자인 패턴을 소개 한다. 구글링을 해보니 이 새로운 관점은 오래전에 발생되었던것 같다. 해외 개발자 커뮤니티에서 관심을 가지지 않는 내 자신에 대해, 그리고 이제서야 이 책이 번역되서 나오고 이제서야 읽게 되는 것인지 후회스럽다.
초반에 Elemental Design Patterns (이하 EDP) 에 대한 소개로 부터 시작하는데, EDP는 단지 책 제목이 아니다. 디자인 패턴을 새롭게 바라보는 관점에 대한 이름이다.
이 책 EDP는 원소 수준에서 디자인 패턴을 보는 방법을 알려 준다. 그리고 그 원소들이 결합된 아미노산 수준에서, 아미노산들이 결합하여 단백질의 수준에서 디자인패턴을 보는 방법도 알려 준다.
디자인 패턴을 새로운 관점으로 볼 수 있게 되니 내가 작성한 코드에서 사용된 디자인 패턴들의 장단점들이 보이고 더 나은 패턴들을 적용할 수 있게 되었다.
프로젝트 초기에 2주 이상 걸릴 것이라고 포기했던 디자인 패턴들을 새로운 관점으로 적용해 보았다. 2일 정도밖에 걸리지 않았다. 지레 겁을 먹었던 것이다. 중복 코드들의 증가의 위협으로 인해 더 이상 "날림" 디자인을 유지할 수 없었던 까닭이기도 하였다.
이 책은 다른 디자인 패턴 책에 비해 읽기가 어렵다. 새로운 관점을 요구하기 때문이다. 그래서 몇개의 챕터는 3번 정도를 읽고 나서야 내 머리에 각인이 가능 하였다.
책이 어려웠던만큼 이 책을 어떻게 소개해야 하는지도 역시 어렵게 느껴진다.
(소개 순서는 챕터의 순서와 관계 없다)
먼저, 디자인 패턴에 대한 기존 개발자간에 형성된 집단적 오해나 미신에 대한 근거를 제시하고, 이를 바꿀 것을 요구한다.
두번째, 소스 코드나 UML을 통해 디자인 패턴을 발견, 분류, 분해 하는 방법을 알려준다.
세번째, Pattern Instance Notation (PIN)을 소개하고, 디자인 패턴에 대한 모델화를 통해 분석하는 방법을 알려 준다.
네번째, EDP를 통해 디자인 패턴을 리팩토링하고 코드에 적용하는 방법을 소개 한다.
다섯번째, EDP 카탈로그에서 EDP의 방법으로 예시, 개선점, 패턴간의 비교, 장단점, 소스 코드, 다이어그램들을 통해 디자인 패턴, 중간 합성 패턴, GoF 합성 패턴들을 소개한다.
일곱번째, EDP의 이론적 토대가 되는 Rho p-calculus를 소개와 함께 PIN + UML을 통해 소개된 디자인 패턴에 대한 공식을 소개한다.
사람의 지능은 10살 정도이면 완성이 된다고 한다. 그러나 나이를 먹어감에 따라 역량에 차이가 커져가는 것은 그 사람의 경험이 영향을 주는 것이라고 한다. 책을 읽는 것도 하나의 경험이다. 좋은 경험을 가질 수 있는 기회를 준 한빛미디어에 감사 드린다.
이 책을 코딩과 설계를 "더" 잘하고 싶은 모든 개발자들에게 권한다. 이미 다른 책을 통해 디자인 패턴 을 공부 하였더라도! 복습도 하며 새로운 관점을 가지게 된다.
이도서는 디자인 패턴이란 단어앞에 Elemental 이란 단어가 붙어 있어서 디자인 패턴의 근본을 설명하고 그 원리를 좀더 논하는 책일 것이라 생각했다.
결론을 내리자면, 책 표지의 " 디자인 패턴은 기술인가, 과학인가?" 이 주제를 다루는 다루는 도서같다.
외국 번역서라는 특징과 외국인의 정서가 녹아있는 프로그래머가 아닌 사람한테는 어렵게 느껴지는 도서였다.
과연 프로그래머라도 이해가 용이할까 라는 생각이 들었다. 도리어 자연 과학서를 읽고있는 느낌....
패턴을 원소주기율표처럼 요소로 분해하고 조합하며, 디자인패턴 인스턴스 표현법, EDP 활용법을 논하고 있다.
즉, 신종 EDP를 소개하는 개론서이자 연구주제를 알려주는 책이기도 했다.
개인적으로는 내용이 어려웠다. 일단 해석서라는 특징으로 용어의 제목과 설명이 와닿지 않았다.
어디서 부터 어떻게 책의 느낌을 논할지는 모르겠지만, 책이 전달하고자 하는 내용을 정리하면,
- 모든 패턴이 원소 패턴으로 구성되어 있다고 한다. 예를 들어, "팩토리 메서드"패턴은 네 EDPS 로 분해 될 수있다."Create Object "를""Fulfill Method", "와""Fulfill Method", "Retrieve". 그리고 UML은 네 개의 하위 패턴과 큰 패턴의 시각화에 도움이 된다는 점이다.
- 다양한 방법으로 주어진 특정 패턴을 설명하고 있고, C, C++, Java, Objective-C 등의 다양한 언어로 패턴 구현법도 명시했다.
- 그리고 PIN을 통해 각 디자인 패턴을 더 간략히 표현할수 있다고 설명하고 있다.
- 디자인 패턴 (EDPS)은 객체 지향 프로그래밍의 기본 개념의 카탈로그로서, Create Object, Retrieve, nheritance, Abstract Interface, Redirection, Conglomeration, Recursion, Revert Method, Extend Method,Delegated Conglomeration, Redirected Recursion, Trusted Delegation, Trusted Redirection, Deputized Delegation, Deputized Redirection, Fulfill Method, Retrieve New, Retrieve Shared, Objectifier, Object Recursion 등을 설명한다. 각 카탈로그들을 PIN으로 표현하고, GOF 패턴에 매핑하여 설명하고 있다.
전문 지식이 없어서, 각각에 대한 설명을 쉽게 이해되지는 않았다.(해석서의 제한이기도 한것 같다.)
이도서를 연구서라고 느낀것은 EDP의 4개 요소(Conglomeration, Recursion, Delegation, Redirection)을 "객체유사도", "타입유사도", "메서도 유사도"의 3차원 공간에 다름과 유사함으로 구분하여 설명한것이 흥미로웠다.
책의 후반부에 GOF의 패턴들을 이 원리로서, PIN으로 표현하여 설명한 부분에서 이해가 조금씩 가기 시작했다.
전체적으로 해석판의 용어 정리와 디자인패턴 원리 설명이 전반부에 쉽게 풀어졌다며, 후반부에 좀더 재미있게 느껴졌을 것이고, 좀더 분석적인 리뷰를 적을수 있을것 같은데, 아쉬운 생각이 든다.
그리고 개인적으로 디자인패턴책을 다시 펴보게 되었다. 다음 개정판이 나오게 된다면, 다시한번 접해보고 싶은 생각도 든다.