본문 바로가기
[Review]/Book

[도서 리뷰] 헤드 퍼스트 디자인 패턴 개정판

by 해피빈이 2022. 9. 25.

> 진행에 앞서

개발서(기술서)를 많이 읽었지만, 만약 누군가 나에게 그 중에서 기억나는 개발서가 어떤 책인지 묻는다면, 주저없이 헤드퍼스트 책이라고 말하고 싶다. 그만큼 기술서에 대한 패러다임을 깨주었으며, 다른 개발서에서는 이해가 안되었던 개념도, 헤드퍼스트로 접했을 때에는 이해가 되었기 때문이다. 헤드퍼스트 시리즈 중에서도 헤드퍼스트 자바가 가장 도움이 되었지만, 그 다음으로는 지금 리뷰를 하는 디자인 패턴이었다. 이 때의 지식을 얼마나 잘 활용하고 있었는지 점검해보는 계기가 되기도 하였다.

 

> 책에 대한 간단한 정보

이 책은 헤드퍼스트 디자인패턴 책의 개정판이다.

무려 17년만의 개정판이다. 예전의 리팩토링 개정판 이후에 다시 한번의 충격이었다.(좋은 의미에서) 사실 책이 얼마나 많이 변했을까 싶지만, 그것보다도 많은 사람들에게 읽혔다는 방증이라고 생각이 들었다. 책의 표지디자인부터 좋은 변화가 있었을 것이라는 기대를 갖게 만들었다. GoF 패턴을 중심으로 다룬 책임을 표지에서 말해주고 있다.

이 책의 번역자 분도 인상적인데, 초판본 번역시에는 대학원생이라고 소개하셨는데, 현재는 박사 학위를 받으셨다고 소개되어 있다. 대단하다 생각이 든다.

많이 개정된 책의 표지

이 책에서는 다음과 같은 패턴을 다룬다.

전략 패턴, 옵저버 패턴, 데코레이터 패턴, 팩토리 패턴, 싱글턴 패턴, 커맨드 패턴, 어댑터 패턴, 퍼사드 패턴, 템플릿 메소드 패턴, 반복자 패턴, 컴포지트 패턴, 상태 패턴, 프록시 패턴, 복합 패턴(MVC)를 주로 다루며, 이 외에 소소하게 소개한 패턴으로는 브릿지 패턴, 빌더 패턴, 책임 연쇄 패턴, 플라이웨이트 패턴, 인터프리터 패턴, 중재자 패턴, 메멘토 패턴, 프로토타입 패턴, 비지터 패턴이 있다.

 

> 인상깊은 부분들

테크니컬 리뷰어를 얼굴과 함께 기록

많은 책이 그렇지만, 이 책은 특히나 집필하는 데 도움을 준 사람이 많은 것 같다. 그리고 개정판 역시 그것의 연장선에 있었다. 일단 기존의 테크니컬 리뷰어를 모두 수록해주었으며(이 분들의 현재 모습은 17년 더 세월을 맞으셨겠지..), 추가로 개정판에서 도움을 주신 분들을 기록하였다. 이 책의 퀄리티를 올리는데 기여한 분들을 이렇게 사진으로 기록하는 것은 헤드퍼스트만의 특징으로 기억된다.

 

책의 설명 스타일

이 책의 설명 스타일을 보여주는 한 대목이기 때문에 남겨보았다.

마치 설명하듯이 남기는데, 특히 "정말 꼭 해보세요!"라는 부분이 와 닿았다. 그만큼 중요하다는 것을 여러 연필 스타일의 글로 강조하고 있었다.

 

개정판에서 추가된 내용

특히 람다와 같은 개념은 이번 개념판에서 도드라지게 보였다. 대부분 기존 내용을 기반으로 수록하였는데, 그 당시 자바에서 제공하지 않았던 람다로 구현할 경우 다르게 구현할 수 있는 부분이 있기 때문이다. 이 부분은 좀 더 현실적으로 구현을 생각해 볼 수 있어서 좋았다.

 

개념적으로 추가된 부분

앞서 언급한 람다에 이어서 나오는 내용이기는 한데, 개념적으로 추가된 부분이기도 하다. 즉, 단순히 옵저버 패턴을 사용하는 것에 그치지 않고, 기존에 푸시를 사용하는 방식만 이야기 했다면, 그것을 좀 더 발전해서 풀로 바꾸는 것이 좋은 생각이라고 제안하고 있는 것이다. 사실 개발하다보면 두 방법 다 구현에는 문제가 없는데 어떤 방법이 옳은 것인지 고민하는 경우가 많다. 이것도 그 중 하나인데, 이벤트 발생시 이벤트 발생 사실만 전달하고, 실제 데이터는 pull 이라는 행위를 통해서 원하는 데이터만 가져오도록 하는 것이다. 이럴 경우 이벤트 자체가 좀 더 유연해져서 확장에 용이한 구조가 된다.

 

DCL에 관한 설명

싱글턴 패턴에 대한 설명인데, 여기에서 모두들 알만한 DCL(Double-Checked Locking)을 너무 올드한 자바 버전에서는 사용하지 못한다고 이야기 하고 있다. 하지만 현재 어디에서도 1.4를 사용하는 환경을 찾기는 매우 어렵다. 최소한 보안적인 이슈 때문에서라도 1.4 버전을 사용했더라도 최소 1.6 이상으로 올렸을 것이기 때문이다. 그렇기 때문에 저 설명 자체는 굳이 이 개정판 시점에 필요했을까 싶은 생각이 들었다. 오히려 자바 11이상에서는 어떤 방법으로 좀 더 효율적으로 사용할 수 있는지 등에 대해서 나오면 어떨까 생각도 해 보았다.

 

enum으로 싱글턴 해결 방법 접근

enum을 이용하여 싱글턴을 구현할 수 있다고 이야기 한다. 물론 기술면접용으로 싱글턴 구현 방법을 알아야 한다고 하지만, enum으로 구현이 가능하다니 그건 이 책을 지금 읽으면서 알게 된 사실이었다. 다만 어떤 효과로 이것이 가능한지 구체적으로 나와 있지는 않기에 틈내어 추가 연구를 하여, 추후 포스팅을 하면 어떨까 생각을 해 보았다.

 

GoF의 Design Patterns 책이 출시된지 25년이 되었다는 것이다.

여기에 나온 것이 깨알 재미였다. 초판본에는 10년이라고 되어있었는데, 더하기 15년을 했다. 하지만 궁금하여 찾아보니 GoF의 디자인 패턴 책은 1994년에 원서가 발행되었기 때문에 현재(2022년) 기준으로는 28년이나 된 것이다. 엄청나게 시간이 많이 흘렀다.

구글에서 찾은 Design Patterns 책 정보
책의 뒷표지

이 책의 뒷표지인데, 깔끔해서 마음에 들었다. GoF의 공동저자가 추천사를 적어준 책이라는 점에서 인상적이었다. 그 뿐 아니라, 14가지 GoF의 핵심 패턴을 다루었으며, 재치넘치는 설명, 틀에 박히지 않은 구성 모두 이 책에 대한 요약을 제대로 나타내었다는 생각이 든다.

 

덤으로 아래의 왼쪽 책은 12년전에 구입했을 초판이며, 오른쪽 책은 개정판이다.

OLD & NEW

 

> 괜찮은 부분

1. 10년이 넘게 지났어도 여전히 중요한 패턴을 다루고 있다.

시간이 많이 흘렀지만, 그 패턴을 여전히 실전에서는 중요하게 다루고 있으며, 특히 중간에 언급하는 설계 원칙에 대해서는 중요성을 거듭 강조해도 지나치지 않을정도로 더 긴밀하게 사용되고 있다. 그래서 개정판을 통해 검증되었다고 봐도 되는 사실은, 프로그래머로 살아가는 사람이라면 이 책에 수록된 패턴을 확실히 익힐수록 매우 쓸모가 있을 것이란 사실이다. 당장 한술에 배부를 수는 없다고 생각한다. 하지만 이 패턴 중 어떤 한 부분이라도 이해가지 않는다면 다시 보고 또 보는 것을 추천한다.

 

2. 친숙하게 보이기 위해서인지, 별도로 그린 그림들이 편안하게 다가왔다.

미국식 유머는 쉽게 설명하는 도구로서 여전히 한몫을 담당하고 있지만, 미국식 유머에 해당하는 사진은 대부분 걷어내고 표현하였다. 그 자리를 별도의 그림들로 채웠는데, 그 그림들로 인해 친숙하게 다가왔으며, 읽기 편안하기도 하였다. 사진대진 그림으로 대체한 부분들로 인해 미국식 유머로 보이지 않는 부분들이 많아져서, 이제는 강제로 미국식 유머에 익숙해지려고 할 필요가 없어졌다고 생각한다.

 

3. 마치 과외를 해주는 듯한 책의 흐름이 보인다.

헤드퍼스트 책의 공통된 특성이지만, 격식을 차리는 데 치중한 책이 아닌 정말 이해 시키려는 데에만 집중한 책이다. 그래서 매 챕터마다 통일된 레이아웃이 잘 보이지는 않는다. 하지만, 책의 목적 자체가 멋있게 나열하는 것보다는 독자에게 이해시키는 데 있는 것이라는 측면에서 생각해본다면, 그 어느 책보다도 가치있게 담아냈다고 생각이 든다.

 

> 아쉬운 부분

1. 적은 지면을 할애해서라도 조금 더 다양한 패턴을 추가했다면 좋았을 것 같다.

많은 시간이 흘러 나온 개정판이지만, 초판본의 수록된 패턴과 동일하였다. 17년이 지나는 사이 조금 더 소개할만한 패턴은 없었을까. 다뤄줬다면 좋았을 것 같다.

 

2. 자바 버전이 올라간 특성을 반영했으면 좋았을 것 같다.

이 책에서 중요시 여기는 부분은 아니기에 상관없다는 생각도 들지만, 자바의 버전에 따라 언급을 제외한 부분도 있어서 언급하고 싶다. Observable 클래스를 제외한 부분이 바로 그런 부분이며, Lambda를 추가한 부분도 해당이 된다. 이렇듯 Lambda를 조금 더 적극적으로, Stream과 같은 함수를 통해 개선한다면 어땠을까 싶다. 또한 MVC에 대해 언급한 복합패턴 부분에서는 MVVM과 같은 부분도 일정 지면을 할애 했다면 좋았을 것 같다.

 

> 추천 독자

자바 개발자를 비롯하여 객체지향 프로그래밍을 하는 개발자들 중에 실력향상을 원하는 개발자

초급을 넘어서는 개발자 중 기본을 탄탄하게 다지고 싶은 개발자

코드 설계를 처음부터 진행하는 입장 혹은 리팩토링 하는 입장에 놓인 개발자

 

> 개인적인 평점

- 가격: 9 / 10

- 내용: 10 / 10

- 디자인: 10 / 10

- 구성: 9 / 10

 

> 정보

저자: 에릭 프리먼, 엘리자베스 롭슨, 케이시 시에라, 버트 베이츠

옮긴이: 서환수

출판사: 한빛미디어

가격: 36,000원

전체 페이지: 654페이지

 

** 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

반응형

댓글