GoF의 디자인 패턴 개정판 (2015) IT서적 다운 책

디자인 패턴에 관해 가장 처음 읽었던 책은 한빛미디어에서 나온 GoF 디자인 패턴 이렇게 활용한다. 라는 책이었다. 사실 그 당시는 디자인 패턴에 대해 생소하기도 했고 그냥 대충 골라서 읽었던 책이었는데, 그리 큰 감흥은 없었다. 그리고 이 책을 읽고서 많은 혼란을 느꼈었는데 싱글톤 패턴에 대한 내용이었다. 얼마전에도 이 책을 잠시 들쳐봤는데 싱글톤 패턴의 의미가 좀 의아했다. 이 책은 싱글톤 패턴을 최대 N개로 객체 생성을 제한하는 것 이라고 했다. 내가 알고 있는 싱글톤은 생성 객체를 오직 하나로 제한한다는 것이었기에 매우 혼란스러웠다.


오늘 소개할 책은 매우 유명한 책이다. "GoF의 디자인 패턴 개정판"


이 책은 디자인 패턴의 고전이다. 모른다면 꼭 읽어보길 권한다.



이 책에서 싱글톤 패턴의 사용 의도는 다음과 같다.


오직 한 개의 클래스 인스턴스만을 갖도록 보장하고, 이에 대한 전역적인 접근점을 제공한다.


사실 싱글톤에 대한 것을 알고 있었지만 앞서 읽은 책의 내용으로 인해 항상 의문점을 갖고 있었다. 의문을 갖는 것은 좋은 현상이지만 너무나 당연한 사실에 대한 이런 노이즈는 바람직하지 않는 것 같다. 한편으로 싱글톤 패턴의 변형이라고 타협하고 넘어가고 싶지만, 그러면 싱글톤이 아닌 다른이름을 붙이는 것이 좋지 않았나 생각이 든다.


어쨌든 이 책은 매우 클래식한 책이다. 번역서이지만 나름 번역이 깔끔하게 되어있다. 최근 디자인 패턴에 대한 대다수의 책들이 자바(Java)를 기반으로 설명한 것에 비해 이 책은 C++과 스몰톡크를 기반으로 설명한다. 이 두 언어의 차이점도 비교하면서 설명하는데 단순히 언어적 차이점이 아닌 객체지향에 시각을 넓혀주는 효과가 있었다. 번역서의 특성상 글을 잘 썼다기 보다는 책의 구성이 정말 논리적이고 질서정연하다는 느낌이 든다.

이 책의 서론은 전반적인 줄거리를 다룬다. 이 책을 어떻게 읽어야하는지 뿐만아니라 패턴을 왜 사용해야하는지와 필요성을 자연스럽게 설명하면서 카탈로그에 있는 패턴들의 특징을 아주 간략하게 언급한다. 단순히 소개하는 것이 아니라 여러각도에서 언급한다. 마치 큰 숲을 보여주면서 전체적인 특징들을 집어내어 알려주는 것 같다.

이 책은 앞서 말한대로 매우 클래식하고 번역체이므로 기본적인 객체지향에 대한 개념과 C++이나 다른 언에서의 문법적인 기본지식은 필수로 갖추고 읽지 않으면 어렵게 느낄 수도 있다. 예를들어 상속, 추상클래스, 인터페이스 등에 대한 개념이 없다면 이 책을 읽어도 수박 겉핥기로 읽는 것일 것이다. 그만큼 이 책이 강조하는 부분은 인터페이스다. 인터페이스가 얼마나 디자인패턴에서 큰 비중을 차지하는지, 객체와 클래스간에 결합도가 프로그램을 설계하는데 어떤 의미가 있는지에 대해서 강조한다. 


GOF의 디자인 패턴
국내도서
저자 : 에릭감마,리처드 헬름,랄프 존슨,존 블리시디스 / 김정아역
출판 : 프로텍미디어 2015.03.26
상세보기



패턴의 분류


책의 내용을 부분적으로 잠시 소개하겠다. 책의 내용은 서론과 사례연구, 디자인 패턴 카탈로그 이렇게 두 부분으로 나뉘어 졌다. 서론은 앞에서 설명했고, 디자인 패턴 카탈로그는 각 디자인 패턴을 3가지(생성패턴, 구조 패턴, 행동패턴) 형태로 나눈다. 


생성, 구조, 행동


이렇게 세 가지로 나누는 이유는 패턴은 목적을 갖기 때문이다. 그리고 목적에 따라서 패턴을 구분하는 것이 이해하기도 쉬울 것이다.

설명하자면 생성 패턴은 객체의 생성에 관여하는 패턴, 구조 패턴은 클래스나 객체의 합성에 관한 패턴, 행동 패턴은 클래스나 객체들이 상호작용하는 방법을 정의한다.

목적별로 나눈 후 다음에는 범위(Scope)를 기준으로 한번 더 나눈다. 즉 패턴의 적용대상이 클래스인지 객체인지에 따라서 패턴들을 분류한다.

적용 대상에 따라서 적용된 패턴은 각각 특징을 갖는다. 즉, 클래스 패턴은 주로 상속에 관련된 것이므로 컴파일 타임에 결정되는 정적인 특징을 가질 것이고 객체 패턴은 런타임에 변경 가능하므로 동적인 특징을 가지게 된다. 그런데 대부분의 패턴은 객체 패턴이다.


또 다른 방식으로 패턴을 나눌 수 있는데 패턴의 유사성이나 관련성에 따라서 구분할 수도 있다. 어떤 패턴은 다른 패턴의 대안이 될 수 있고, 두 패턴이 같이 사용되어야할 경우도 있다. 이런 특징을 토대로 패턴을 분류할 수도 있다.


세번째로 참조관계에 따라서 패턴을 분류하는 방법이다. (사실 이 부분은 잘 이해하지 못했다. )


어쨌든 이 책은 설명이 매우 클래식하면서도 정갈하다. 아마 내가 읽은 책 중에가 가장 IT서적 다운 책이라 생각든다.

이 댓글을 비밀 댓글로