하나의 패턴에 하나의 이야기를 담았습니다. 틀에 박히지 않아 지루할 틈이 없는 구성과 친구와 이야기하듯 편안한 대화체로 이야기를 풀어냅니다. 이야기 속에 다양한 방법으로 해결할 수 있는 질문과 90개 이상의 연습문제를 담았습니다. 마치 게임 퀘스트를 해결하듯 문제를 하나하나 해결하다 보면 학습한 내용이 머릿속에 강렬하게 남습니다.
이유 2. 원스톱으로 배우는 14가지 GoF 핵심 디자인 패턴과 9가지 객체지향 디자인 원칙!
현장에서 자주 사용되는 옵저버, 어댑터, MVC 패턴 등 14가지 GoF 객체지향 패턴을 중점으로 패턴의 정의, 사용 시기, 사용처, 사용 이유, 즉시 디자인에 적용하는 방법을 알려줍니다. 이와 더불어 객체지향 프로그래밍에 광범위하게 적용할 수 있는 OCP, 할리우드 원칙 등 9가지 객체지향 디자인 원칙과 패턴으로 생각하는 방법도 알려줍니다.
이유 3. 시대의 변화에 맞춘 개정과 한국 독자만을 위한 특별판!
자바 8과 자바 16 이상에서 무리 없이 동작할 수 있도록 예제 코드를 수정했으며, 부가적인 설명과 Q&A 질문을 추가했습니다. 또한 16여 년 만의 개정을 기념해 오직 한국 독자만을 위한 새로운 삽화를 사용하고 한글 친화적인 구성했습니다. 원서를 읽을 때보다 더욱 편안하게 디자인 패턴을 학습할 수 있습니다.
이 책을 읽어야 하는 당신!
● 소프트웨어 출시는 완벽 그 자체! “어?~ 코드 수정하려고 다시 보니까 난리…”
→ 유지보수만 생각하면 그저 눈물인 주니어 (자바) 개발자
● 코딩 실력은 장판파의 장비! “어?~ 팩토리 메소드 패턴을 이렇게 적용했던가?”
→ 디자인 패턴을 다시 한번 살펴보고 싶은 시니어 (자바) 개발자
● 혼자 공부해서 다진 프로그래밍 언어 실력! “어?~ 근데 패턴이 뭐야?”
→ 개발 현장의 소프트웨어 디자인 방법이 궁금한 개발자 지망생
저자소개
저자
에릭 프리먼
예일대학교 컴퓨터공학 박사 학위를 받고 월트 디즈니에서 CTO로 활동했다. 오라일리 미디어에서 〈헤드 퍼스트〉 시리즈를 총괄하며 『헤드 퍼스트 디자인 패턴』 등 다양한 도서를 집필했다. 현재는 개발자를 대상으로 온라인 학습을 제공하는 WickedlySmart에서 학습 콘텐츠를 제작하고 있다.
예일대학교 컴퓨터공학 석사 학위를 받고 다양한 기술 주제로 개인별 워크숍과 온라인 수업을 제작했으며, 사람들이 기술을 이해하는 데 도움이 될 만한 학습 경험을 만드는 일에 몰두했다. 오라일리 미디어에서 특수 프로젝트 책임자로 활동했으며, 현재는 WickedlySmart의 공동 창업자로 다양한 학습 콘텐츠를 제작하고 있다.
예로부터 건물을 지을 때는 사전 설계가 중요했습니다. 어떤 문제나 수정 사항이 발생했을 때, 하나하나 시행착오를 겪으면서 다시 짓기에는 시간과 비용이 많이 들기 때문입니다. 사람들은 같은 실수를 반복하지 않기 위해 자신들의 시행착오를 바탕으로 특정 상황에서 발생하는 문제의 패턴을 발견하고 해결방안을 기록으로 남겼습니다. 이를 ‘디자인 패턴’이라고 부릅니다.
건축학에서 시작된 디자인 패턴은 코드로 소프트웨어를 구축한다는 점에서 소프트웨어 설계에도 동일하게 적용할 수 있습니다. 누군가‘가’ 겪은 문제가 누군가‘만’ 겪은 문제는 아니므로 동일한 문제를 먼저 경험한 선배들의 지식을 활용한다면 소프트웨어 설계의 효율을 추구할 수 있습니다.
● 디자인 패턴은 시간과 노력을 줄여 줍니다
세상에 완벽한 소프트웨어는 없습니다. 시대에 따라 기술과 사용자의 요구가 변하기 때문입니다. 프로그래밍을 할 때 항상 ‘지금 이 소프트웨어를 언젠가는 고쳐야 한다’라고 생각해야 합니다. 사전에 소프트웨어를 고칠 때 코드에 미치는 영향을 최소화할 수 있도록 디자인한다면 자질구레한 코딩에서 벗어나 더 좋은 소프트웨어를 만드는 데 더 많은 시간을 투자할 수 있습니다.
디자인 패턴의 유용성은 단지 선배들의 코드를 ‘재사용’하는 것에 그치지 않습니다. 팀을 이끌며 프로젝트를 진행하고 다양한 형태로 발생할 수 있는 문제를 해결하는 데도 적용할 수 있습니다. ‘디자인 패턴’에 관한 조예가 깊다면 적재적소에 맞는 해결책을 효율적으로 제시할 수 있으며, “자신에게 귀를 기울이고 있는 모든 객체를 추적할 수 있고, 새로운 데이터가 들어올 때마다 각각의 청취자한테 메시지를 보내 주며, 청취자는 언제든지 청취자 목록에 참가하거나 탈퇴할 수 있는 방송용 클래스라는 걸 만들어서 이 문제를 해결하자!”라고 길게 설명할 필요 없이 “옵저버 패턴을 쓰자!"라는 한 문장으로 효율적인 의사소통을 할 수 있습니다.
● 디자인 패턴은 용도에 맞게 적절하게 사용해야 하는 도구입니다
하지만 디자인 패턴이 만병통치약은 아닙니다. 빈대를 잡으려고 초가삼간을 다 태우면 안되는 것처럼 패턴을 아무 코드에나 적용해서는 안 됩니다. <Hello, World!> 같은 프로그램에까지 패턴을 적용하면 오히려 코드가 복잡해지고, 남들이 알아보기 힘들어지고, 유지보수가 어려워져 결국 파국에 이르기 때문입니다. 디자인 패턴은 좋은 소프트웨어를 만드는 도구일 뿐입니다. 모든 도구는 용도에 맞게 적절하게 사용할 때 그 위력을 발휘합니다.
사실 어떤 코드에 디자인 패턴을 써야 하는지 배우려면 많은 시간과 노력이 필요합니다. 디자인 패턴을 완전히 이해해야만 어떤 코드가 스파게티 코드인지 알 수 있기 때문입니다. 하지만 디자인 패턴의 핵심 요소만 쏙 뽑아서 알려주고, 재미있게 설명해 주는 책이 있다면 어떨까요? 적은 시간과 노력으로 디자인 패턴을 배울 수 있어서 행복하지 않을까요? 그런 책을 멀리서 찾을 필요는 없습니다. 『헤드 퍼스트 디자인 패턴(개정판)』이 바로 여기 있으니까요.
▶ 『헤드 퍼스트 디자인 패턴(개정판)』에서 다루는 내용
『헤드 퍼스트 디자인 패턴』은 2005년 출간 후 17년이라는 시간 동안 디자인 패턴 분야에서 부동의 베스트셀러 1위를 지켜왔습니다. 경력과 세대를 넘어 많은 개발자에게 사랑받는 이유는 다음과 같이 ‘GoF 디자인 패턴의 핵심’만을 다루는 데 있습니다.
✔︎ 14가지 GoF 핵심 패턴의 사용 시기와 이유!
✔︎ 즉시 디자인에 적용하는 방법!
✔︎ 쓰지 말아야 하는 상황!
✔︎ 패턴의 근간이 되는 객체지향 디자인 원칙!
✔︎ 그 밖에 알아 두면 좋은 9가지 패턴의 정의와 사용법!
▶ 『헤드 퍼스트 디자인 패턴(개정판)』에서 달라진 점
✔︎ 보편적으로 사용하는 자바 8부터 최신 버전인 자바 16 이상에서 무리 없이 동작할 수 있게 예제 코드 수정
✔︎ 부가 설명과 Q&A 질문 추가
✔︎ 한국 독자만을 위한 새로운 삽화와 한글 친화적인 구성
* 16여 년 만의 개정을 기념해 초판보다 편안하게 디자인 패턴을 학습할 수 있도록 새로운 한국어판을 만들었습니다.
▶<헤드 퍼스트> 시리즈의 특징
그리고 디자인 패턴을 지루하지 않은 방법으로 배우는 것도 정말 중요합니다. <헤드 퍼스트> 시리즈를 한 권이라도 읽어 보았다면 이 책이 어떤 책인지 쉽게 짐작할 수 있을 겁니다. ‘볼 거리가 많고, 머릿속에 쏙쏙 들어오는 방식’으로 구성되어 있어 머리가 먼저 반응합니다.
✔︎ 친구와 이야기하는 듯한 편안한 대화체!
✔︎ 예상하기 어려운 재치 넘치는 구성!
✔︎ 90개가 넘는 도전적인 연습문제!
✔︎ 여러 관점에서 생각해 볼 수 있는 흥미로운 이야기!
✔︎ 빠르게 따라해 볼 수 있는 간단한 예제 코드!
이 밖에 패턴 중독을 피하는 방법과 디자인 패턴을 발견하는 방법도 다루고 있어 미래의 패턴 디자이너에게도 도움이 될 것입니다.
A.객체를 설계하는 방법부터 확장하는 방법까지 각종 패턴들을 알려주어 OOP 프로그래밍을 입문하고 프로젝트를 해보려는 사람들이 읽으면 좋음
B.문제에 대한 그림과 쉬운 예제로 왜 이러한 패턴이 적용되는지가 머리에 쉽게 와 닿음
C.각각의 패턴에 대해서 장단점을 확인할 수 있음
2.단점
A.없음
3.후기
A.해당 책은 자바로 진행이 되는데 굳이 메인 프로그래밍언어가 자바가 아니더라도 쉽게 접근할수 있도록 프로그래밍 설명부분이 친절하게 적용이 되어 있다. 특히 학교 수업에서도 OOP프로그래밍만 배웠지 디자인 패턴을 배운 적이 없어 처음 프로젝트에서 점점 확장 시킬 때 애를 먹은 경험이있는데 해당 책을 보면서 왜 이러한 패턴이 적용되는지를 명쾌하게 적혀 있어 머리속으로 이해가 쉬워 굳이 따라 치지 않더라도 책 읽듯이 넘어 갈수 있는게 이 책의 장점 이라고 생각한다.
C++ 이후 하이레벨 언어 입문을 헤드퍼스트 고를 통해 했었다. 처음에는 구어체 방식의 설명방식이 익숙치 않았지만 어느새 그 흐름에 빠져들었고 딱딱한 문어체로 쓰인 타 기술서적보다 읽고난 후 머리에 남는 내용이 신기하게도 많았던 기억이 있다.
학생 시절에는 그저 되는대로 코드를 짜서 빠르게 기능을 구현하는 것이 대부분이었는데 회사에 들어가서 이런 습관으로 인해 적지않은 낭패를 볼 때가 많았다. 실제 구현체들이 직접적으로 들어가는 것들이 아닌 모든 함수, 클래스 메서드들이 인터페이스를 기반으로 느슨하게 결합된 상태로 구성되어 있어서 처음에는 코드 흐름 자체를 따라가는 것도 어려웠다.
이런 어려움을 겪는 와중에 이번 리뷰도서로 헤드퍼스트 디자인패턴이 있는 것을 보았다. 이전에 헤드퍼스트 시리즈를 활용해 효율적으로 지식을 습득한 경험이 있는 나는 주저없이 해당 도서를 리뷰도서로 선정하였다.
역시 헤드퍼스트 시리즈는 기대를 저버리지 않았다. 현업에서 들어가서 많이 보았던 Strategy, Observer, Decorator, Factory, Adapter, Proxy 패턴에 대해 이보다 더 쉽게 설명할 수 없을 정도로 기술되어 있었다. 내용 설명이 좀 추상적인 경우 예제 코드를 보면 바로 직관적으로 이해할 수 있었고 현업에서 자주 사용 중인 Go와 TS에 맞게 적용하는 것에도 큰 어려움이 없었다.
기술도서의 경우 가끔 번역이 너무 이상하게 되어 있어서 오히려 원서를 찾아보게 되는 경우가 있는데 해당 도서의 경우 큰 의미 이탈없이 술술 읽을 수 있을 정도로 번역이 매끄럽게 되었다.
프로그래밍은 어느 정도 익숙하지만 재사용성 있는 코드, 구조화된 코드에 대해 고민을 하고 있는 저연차 주니어 개발자들에게 해당 도서를 강력 추천하는 바이다.
TLDR; 구관이 명관이다. 디자인 패턴 책 중에 이 책이 최고인지는 모르겠지만 상위권에 속하는 책임을 확신한다.
헤드퍼스트 디자인패턴. 개발자(혹은 개발자를 지망하는사람)치고 이 책을 모르는 사람이 있을까 싶다. 나 역시 '디자인패턴' 이라는 키워드를 안 이후에 여러 검색과정을 거처서 '헤드퍼스트 디자인패턴'을 구매하고 읽었다. 그게 벌서 10년전 정도이다. 한빛미디어의 나는 리뷰어다 도서중 헤드퍼스트 디자인패턴 개정판이 나왔을때 나는 망설임 없이 바로 신청했다.
안그래도 디자인패턴 복습을 좀 하고싶었는데 개정판이 나왔다니. 선택을 안할 수 없었다. 내용은 워낙 탄탄하니 말할것도 없긴 하지만 도서 리뷰이다보니 잠시 언급 해 보자면 가장 기본적이고 단순한 패턴부터 시작해서 실무에서 많이 사용하는 패턴으로 점진적으로 나아가는 방식이다. 개발을 좀 해봤다면 초반부분의 패턴들의 예제에서 이상함(비효율성)을 느끼게 되는데 그부분들은 후반에 나오는 패턴에서 개선 할 것이라는 언급이 있기때문에 독자로 하여금 불안함을 생기지 않도록 해 준다.
이번에 책을 다시 읽으면서 가장 좋았던점은 이전 버전의 단점이 보완되었단 점이다. 이전 버전의 경우 책의 구성이 좀 번잡하다는 생각이 들어서 집중하기 약간 어렵단 생각이 들었었다. 물론, 대화형 으로 풀어나간다던가 내용에 나오는 화살표 설명(?) 들이 설명에 많은 도움이 되긴 하지만 당시엔 너무 번잡하다는 생각을 지울 수 없었다. 하지만 이번 개정판에서는 훨씬 정갈하고, 분리된상태로 편집이 되어 있어서 책을 읽는데 집중을 하기가 좋았다. 헤드퍼스트 특유의 설명방식을 잘 살리면서 깔끕하게 정리를 해 준 덕분에 내용상의 차이는 크게 없지만, 훨씬 읽기 좋고 이해하기 좋은 책이 되었다.
디자인 패턴을 처음 공부하기 위한사람이나, 나처럼 복습하기위한 사람 모두에게 아주 추천할만한 책이다.
한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다...만진심이 담겨있습니다.허위 사실 유포는 일절 없음.
나의 첫 헤드퍼스트 시리즈. 게다가 '헤드퍼스트 디자인패턴 개정판'은 초판 이후 16년만에 개정이 되어서 나왔다. 그래서 뭔가를 기대했느냐. 그건 아니다. 평소에 디자인패턴이라고 하면 안드로이드 개발할 때 많이 적용했던 MVP, MVVM를 많이 떠올렸고, 그게 아니라면 고작해야 옵저버 패턴, 싱글톤 패턴 정도가 전부였다. 디자인패턴이 뭘 정의하는지도 잘 몰랐다. 혹시 이 글을 읽는 분도 그러한가? 그렇다면 이 서적은 당신에게도 나에게도 필요한 책이다. 당신과 나와 같은 입장이 뭘까?
입으로만 디자인 패턴을 얘기했지만 디자인 패턴의 정의조차 몰랐던 사람
디자인 패턴보다 프레임워크나 라이브러리에 의존해 개발했던 사람
디자인 패턴을 공부하고 싶었지만 너무 어려워서 엄두를 못냈던 사람
디자인 패턴은 요술 방망이가 아니다. 라이브러리처럼 내 코드에 적용할 수 있는 도구처럼 쓸 수 없다는 말이다. 이 서적의 65페이지에는 이런 내용이 나온다.
디자인 패턴이 코드 속으로 바로 들어가는 것은 아닙니다. 디자인 패턴은 우선 여러분의 머릿속에 들어갑니다. 일단 패턴을 완전히 익혀 두면 어떠너 코드가 유연성 없이 엉망으로 꼬여 있는 스파게티 코드라는 사실을 금방 깨달을 수 있으며 그 코드를 수정할 때 패턴을 적용해서 코드를 개선할 수 있습니다.
객체지향 디자인 원칙과 같은 여러가지 원칙을 지키면서 신규 개발부터 유지보수까지 유연하게 대처할 수 있게 구성을 가이드해 주는 것이 디자인 패턴이 아닐까 생각해보았다. 그럼 여기에 등장하는 디자인 패턴은 무엇이 있을까?
전략 패턴
뒤에 나올 디자인 패턴을 공부하기 전에 이해해야 할 기본적인 패턴
옵저버 패턴
이벤트 버스나 카프카 등을 이용해본 분이라면 이해하기 더 편하다
데코레이터 패턴
스프링을 공부해 본 분이라면 스프링을 한번 더 이해할 수 있는 기회
팩토리 패턴
데코페이터 패턴처럼 스프링의 패턴 구조 중 하나를 이해할 수 있다
싱글턴 패턴
가장 익숙한 동시에 가장 유의해서 사용해야할 패턴
커맨드 패턴
어댑터 패턴과 퍼사드 패턴
안드로이드 개발자에게 익숙한 어댑터 패턴을 이해할 수 있는 기회
템플릿 메소드 패턴
반복자 패턴과 컴포지트 패턴
상태 패턴
프록시 패턴
접근 제어를 하는 경우에 빠지지 않고 등장하는 프록시 패턴
복합 패턴
흔히 얘기하는 MVC, MVP, MVVM를 발전 과정으로 이해할 수 있다
실전 디자인 패턴
기타 패턴
만약 시간이 바쁘다면 부가 설명이 있는 내용을 참고해서 몇가지만 골라서 읽는 방법도 있다. 예를 들면 아래와 같다.
공통적으로 읽어야 할 필수 패턴
전략 패턴, 옵저버 패턴, 싱글턴 패턴
자바 혹은 스프링 개발자에게 도움이 될 패턴
데코레이터 패턴
안드로이드 개발자에게 도움이 될 패턴
어댑터 패턴과 퍼사드 패턴, 복합 패턴
외부 통신 등의 접근 제어를 할 때 도움이 될 패턴
프록시 패턴
이 책의 매력은 단순히 실무에 도움이 된다라는 부분에만 있지 않다. 챕터 0을 읽어보면 헤드퍼스트가 왜 스테디셀러인지 알 수 있다. 디자인패턴을 이해하기 위해 서적 내 얼마나 많은 장치가 있고 어떤 절차로 이해할 수 있는지 알려준다. 그러니 챕터 0에 디자인패턴 학습 시작이 아니라는 이유로 넘기지 말고 반드시 읽고 책에서 권장하는 방식을 따라가다보면 다른 서적을 읽을 때보다 훨씬 재밌게 글을 흡수할 수 있을 것이다. 중간중간에 불쑥 튀어 나오는 농담, 수많은 일러스트, 상황극에 퀴즈까지. 만약 새로운 분야를 학습한다면 앞으로는 헤드퍼스트 시리즈에 그 분야가 있는지도 살펴볼 것이다.
디자인패턴에 관한 책을 읽게 된 이유는 코드를 짜다보면 '재사용 할 수 있는 코드를 짜고싶은데 왜 나는 그게 안될까 무작정 짜는 것 보다 계획적으로 짜보고싶다!'는 생각이 많이 들었습니다. 그래서 디자인패턴과 객체지향에 대해 이해를 잘 알고싶었고 자바 기반이지만 입문서이니 크게 어려운 난이도는 아닐거라고 생각하여 읽어보았습니다.
전략패턴, 옵저버 패턴, 데코레이터 패턴, 팩토리 패턴, 싱글턴 패턴, 커맨트 패턴, 어댑터 패턴, 퍼사드 패턴, 템플릿 메소드 패턴, 반복자 패턴, 컴포지트 패턴, 상태 패턴, 프록시 패턴, 복합 패턴 14가지 패턴들을 소개해줍니다. 디자인패턴에 객체지향을 다루기에 내용이 상당하여 굉장히 두꺼운편이긴 합니다.
그래도 딱 펼쳤을 때 받았던 잘 정리된 필기노트를 같다는 느낌을 받았을 정도로 내용 정리가 잘 되어있었습니다. 그림 설명도 많고, 낱말 퀴즈같이 독자들이 쉽게 이해할 수 있게 하려고 노력을 한게 많이 티가 났습니다.
디자인 패턴을 적용해보고싶어 읽어보고 싶었는데 책에서 딱 초보자가 무리하게 디자인 패턴을 사용하려고하면 프로그램의 복잡도만 높이는 실수만 저지를 수 있다는 조언도 해줍니다. 단순하게 설명만 나열하여 객체지향에 대한 설명들과 해당 패턴이 좋은 이유에 대한 설명을 해주고 패턴들마다의 장점과 단점을 비교해서 알려줍니다. 방구석 토크라고 패턴들끼리 얘기하는 식으로 비교를 해주는데 it책에서는 처음보는 방식이어서 어려운 내용들이어도 읽는데 부담스럽지는 않았었습니다.
테스트 코드가 자바를 몰라도 시작할 수 있다고 되어있지만 정말 자바 공부를 안한지 n개월 된 사람이 봤을 때는 자바를 몰라도 객체지향에 대한 이해가 있는 개발자 또는 자바를 어느정도 아는 초보자가 읽어야 하는 책인 것 같습니다.
그림과 대화를 하듯한 방식으로 독자의 이해와 흥미를 유발합니다. 하나의 소설 혹은 프로그래머들의 이야기를 듣듯이 읽고, 잘 이해 안 가는 부분은 천천히 생각해 보면서 공부하다 보면 한 개의 챕터가 끝납니다. 모르는 부분이 있다면 다시 읽어보면 좋을 거 같습니다. 그림이 많고 대화하듯 쓰여 있지만 내용에 빠짐이 없습니다. 개인적으로 퍼스트 헤드 디자인 패턴은 두고두고 읽어도 좋을 거 같습니다. 한동안 재밌게 천천히 읽어 보고 싶은 책이었습니다.
디자인 패턴 관련 책으로 가장 유명한 것은 'GoF의 디자인 패턴' 일 것이다. 그러나 회사 선배에게도 들었지만 대부분 '헤드퍼스트 디자인 패턴' 책을 더 추천해주신다. 책의 첫 챕터에서는 디자인 패턴을 왜 배워야하고 알아야 하는지를 상황과 코드를 통해 설명해준다. 디자인 패턴 공부를 위해 이 책을 접했다면 옮긴이의 말을 반드시 읽어야 한다. 프로그래머들 중에서 디자인패턴 공부를 숙제처럼 여기고 반드시 해야되는 숙제처럼 여기는 사람들이 종종 있다. 알아두어야 하기는 하지만 의무감을 가질 필요는 없다. 옮긴이의 말에서는 아래와 같이 설명한다.
디자인 패턴이 만병통치약은 아닙니다! 디자인 패턴은 코드를 재사용하고 더 효율적으로 문제 해결을 하기 위한 수단일 뿐니다. 이 사실을 망각해서는 안 된다. '모든 도구는 용도에 맞게, 적절하게 쓰일 때 그 위력을 발휘합니다. 파리를 잡을 때 파리채를 쓰는 게 기관총과 수류탄을 쓰는 것보다 더 나은 것처럼, 디자인 패턴도 어울리지 않는 상황에서 남용하면 역효과만 납니다.' 옮긴이의 말에도 적혀있지만, 디자인 패턴은 이미 프로그래머 선배님들께서 비슷한 문제를 해결하려고 시간과 노력을 투자해서 이것저것 시도해 보고, 그 중에서 가장 효과적이라고 알려진 방법에 이름을 붙여 자리잡은 것이다.
프로그래밍 공부를 하다보면 당연한 것에 용어를 붙여 어렵게 보이는게 종종 있다. 예를 들어, 영화관에서 표를 사기 위해서는 줄을 서야한다. 이 때 먼저 줄을 선 순서대로 표를 구입할 수 있다. 당연한 사실이며 자명하다. 즉, 먼저 들어온 순서대로 데이터를 처리한다. 이걸 컴퓨터공학에서 큐(queue)라는 자료구조로 불린다. 큐와 스택을 알아야 하고 어쩌고 저쩌고 등등. 디자인 패턴도 이와 마찬가지다. 개체가 하나만 존재했으면 좋겠는데 어떻게 해야할까? 프로그래밍 배운대로 생성자에 static을 붙이면 되지 않을까?! 이렇게 여러 곳에서 호출하더라도 개체는 하나만 존재하네! 그러나 다른 개발자들에게 이렇게 구현할걸 줄줄이 말하는 건 시간 낭비다. 간단하게 '싱글턴 패턴'을 사용했다! 로 끝낼 수 있는 것이다.
정리하자면, 디자인 패턴은 문제 해결을 위한 수단 중 하나다. POCU에서는 디자인 패턴을 배운다고 해서 바로 적용하지 말라고 가르친다. 내 코드가 어떻게 동작하는지 확실하게 알고 난 이후에 적용하라고 한다. 문제를 직면하면 해결 방법을 고민하고 다시 비슷한 문제를 마주치면, 같은 해결 방법을 적용할 때 나만의 해결 도구가 나오기 시작하는 상황에서 디자인 패턴을 봐야지만 도움이 된다고 한다. 디자인 패턴은 정리하는 개념이지 가르치는 것이 아니기 때문이다.
책의 장점은 그림과 상황 설명이 많아서 이해하기 쉽다는 것이다. 언어는 자바로 되어있지만 그렇게 어려운 문법을 사용하거나 그런 점을 없다. 따라서 디자인 패턴을 공부해야되는 수준이라면 누구나 쉽게 이해할 수 있을 정도다. 일부 디자인 패턴 책에서는 대충 코드를 보여주면서 '이 패턴을 이런거니 이렇게 쓰면 됩니다' 라고 하는데, 언제 어떻게 적용해야되는지 막막한 감이 있다. 그러나 헤드퍼스트 책에서는 확실히 어떠한 상황에서 효율적으로 적용할 수 있는지 문제와 고민 상황, 한계를 잘 알려준다.
구현 뿐만 아니라 자바 라이브러리도 소개하면서 어디에 어떻게 사용되고 있는지도 자세히 알려준다.
기본적으로 패턴 설계할 때에는 UML을 사용하면서 보여준다. 전체 그림을 보여준다는 점에서 기존과 어떻게 다른지를 한 눈에 파악할 수 있어서 좋다.
자바를 잘 모르더라도 코드 한줄한줄 설명해주면서, 해당 챕터에서 설명하는 디자인 패턴을 사용했을 때 어떻게 동작하는지 매우 친절하게 적혀있다. 비록 자바를 모르기 때문에 다른 언어를 사용하면 구현 방식에는 약간의 차이가 있을지라도 전체적인 큰 틀에서는 동일한 구조와 동작을 하게 될 것이다. 위의 사진들처럼 책은 그림과 구조 설명으로 페이지 수가 엄청나게 많다. 예시 문제도 약 90개나 되기 때문에 방대한 양을 다루기 위해서 쪽수가 많을 수 밖에 없는 것이다. 이 책은 한 번 쭉 정독하고 그만볼 책이 아니다. 한 번씩 생각날 때마다 꺼내서 비슷한 문제에 대해 어떻게 해결하는지 두고두고 봐야되는 책이다. 그렇기 떄문에 프로그래머라면 반드시 가지고 있어야할 교과서라고 정의한 것이다. 디자인 패턴을 효율적으로 사용하기 위해서는 많은 문제들을 접해봐야 하는데 책에서 그런 예제들을 많이 다루기 때문에 이 책 한권으로 대부분의 디자인패턴 책을 대체할 수 있을 것이라 생각한다.
헤드퍼스트 시리즈를 처음 접했던 것이 언제인지는 기억이 나지 않지만, 처음 이 시리즈를 보고서 충격을 받았던 것은 기억이 납니다.
요즘은 코딩 입문을 위한 다양한 교육 방법들이 나와있어서, 예전처럼 그냥 언어 문법을 외우는 것이 아니라, 하나의 프로젝트를 따라 만들어가면서, 공부하는 방법들이 꽤 널리 알려져있긴 했습니다만, 제 기억으로는 이런 방법의 책으로 나온 것은 아마 헤드퍼스트 시리즈가 아니었나 싶습니다.
마치, 그 동안 영어 공부는 "성문 기본/종합"을 통해서, 문법을 외우고 단어를 외우는 것이었다가, 회화 위주의 공부로 넘어가는 것 같은 충격이긴 했었죠.
하지만, 이런 방법이 항상 옳은 것은 아니었고, 당시에도 또 지금에도, 이런 류의 교수법에 잘 맞는 사람이 있고, 아닌 사람이 있을 것입니다.
아무리 회화 기반의 영어 공부가 좋다고 해도, 아직도 성문/맨투맨 같은 교재가 더 좋은 사람들이 있으니까요.
우선, 자신의 공부 스타일이 어떤 것인지를 파악해야지, 이 "헤드퍼스트" 시리즈의 장점을 최대한 활용할 수 있을 것입니다.
아무튼, 시리즈 자체의 교습 스타일이 자신과 맞는다면, 그 다음에는 바로 이 "디자인 패턴"의 필요성을 봐야 합니다.
일반적으로 프로그램 공부를 할 때, 우선 언어를 선택하고, 그 언어의 문법을 공부하고, 그것을 이용해서, 간단한 프로그램들을 만들어보게 됩니다. 대충 대학교 초년 수준의 코딩 수준이 그러합니다.
그리고, 이 "디자인 패턴"이 필요한 순간은 그런 부분을 넘어선, 복잡한 프로그램을 만들 때 필요하게 됩니다. 이 필요성을 공감하지 못한다면, "소프트웨어 공학? 그게 뭐야? 그냥 말장난 아냐? 프로그램은 일단 프로젝트 만든 다음에 #include <stdio.h> 를 치는 것부터 시작인거지!" 라는 생각에서 벗어나지 못하게 되고, 그러면 이 책에서 얘기하는 디자인 패턴의 의미를 이해할 수 없게 되기 때문입니다.
그래서, 이 책은 "이제 객체지향 언어를 골랐고, 그 언어의 문법을 다 외웠는데, 이제 뭐하지?" 하는 사람을 위한 책이라고 할 수 없습니다. 오히려, 실무를 좀 뛰다가, "아 이렇게는 안되겠어. 이거 너무 삽질만 하고 있는데, 좀 더 쉽고 확장성 좋게 프로그램을 만들 수 없을까?" 라는 고민에 도달했을 때, "그때 디자인 패턴이란 것이 있어. 객체지향 설계의 치트키 같은 거지" 라는 답을 얻게 되고, 도대체 디자인 패턴이 뭐지? 라는 궁금증이 생겼을 때, 그때 봐야 하는 책입니다.
그리고, 그때, 많이 사용되는 (검증된) 14개의 디자인 패턴을 설명해주는 것이 바로 이 책입니다.
그렇기 때문에, 그냥 무작정 이 14개의 패턴을 외우도록 정리해주는 것이 아니라, "지금 내가 막힌 문제에 어떤 패턴을 적용하는 것이 좋을까?" 라는 질문에 답하기 위해, 14개의 패턴들을 자신의 문제와 비교해볼 때, 각 패턴의 특징을 설명해주는 책이었습니다.
이런 상황에 처한 독자에게라면, 디자인 패턴을 설명하고, 소개시켜주고, 다른 것들과 비교해주는 최고의 디자인 패턴 소개서라고 할 수 있습니다.
하지만, 위에서 말한 조건들에 맞지 않는 독자들... 성문 영어가 익숙한 사람이거나, 디자인패턴의 필요성을 아직 확신하지 못한 사람에게라면, 이 책이 잘 맞지 않을 수도 있을 것입니다.
그러나, 그렇지 않은 사람들에게는 최고의 책이었고, 개정 이전의 책을 봤던 사람이라도 더 재미있게 볼 수 있는 (어차피 디자인 패턴이라는 것이 막 다 외워서 관등성명처럼 자동으로 튀어나오는 것이 아닌이상, 옆에 두고 필요할때마다 찾아봐야 하는 것이긴 하죠) 책이었습니다.
헤드퍼스트 시리즈의 유일한 단점이라면, 이 책에 한번 익숙해지면, 다른 책들에 만족할 수 없다는 것이라고 할 수 있을 것입니다.
이 책은 궁금하지만 수많은 종류에 어디서부터 시작할지 모르겠는 디자인 패턴에 대해 알려준다.
한국어 초판은 2005년에, 그 이후로 개정판이 2022년에 나왔는데 표지가 인상적이어서 읽어보기 전부터 조금은 친숙한 책이었다. 개정판이 올해에 따끈따끈하게 나와서인지 오래된 느낌은 전혀 없이, 꼭 필요한 지식들에 대해 대화체로 아주 자세하고 친절하고 재미있게 알려준다. ‘2005년에 초판이 발행된 책이니까 그래도 조금은 오래된 느낌이 있지 않을까’라는 우려는 아마 책장을 세네장만 넘겨도 바로 사라지는 것을 알게 될 것이다.
‘헤드퍼스트 디자인패턴’ 책의 장점
1. 이렇게 친절하고 재미있는 개발 서적은 처음 보았다.
그것에 대한 반증으로 이 책에는 ‘chapter 0. 이 책을 읽는 방법’이 준비되어 있다. 그만큼 이 책의 설명 방식이 다른 책과는 차별화될 정도로 자신있다는 의미일 것이다.
책을 보면서 다른 사람들의 회의를 몰래 참석하는 느낌을 받았다. ‘몰래 참석’이라고 한 이유는 나는 내용을 듣기만 하면 되어서 부담감이 없는 상황이고, 그 회의에 참석하는 구성원들은 모두 뛰어난 실력의 소유자여서 내가 닮고 싶어하는 사람들인 것 같았기 때문이다.
예를 들어 A와 B가 참석하는 회의라고 가정할 때,
A: OO이기에 XXX한 방식으로 진행하면 될 것 같아요!
(책을 읽고 있는 나: 오 저도 그렇게 생각해요!)
B: XXX는 +++한 문제가 있지 않을까요?
(책을 읽고 있는 나: 맞네..그런 문제가 있었네. 그럼 어떻게 하지?)
와 같이 A가 생각한 방식에 동의했는데, 이에 대해 B가 합당한 변론을 제기하고, 수정 방안을 맞춰 나가는 방식으로 책의 수많은 대화가 구성되어 있기 때문이다. 즉 처음부터 ‘이 패턴에서는 이렇게 하면 된다’라고 답을 알려주는 것이 아니라, 그렇게 하는 것이 가장 합리적인 이유와 그러한 결론이 유도된 사고와 배경에 대해 자세히 이야기해 준다.
마치 아래처럼 말이다.
그렇게 나온 결론을 코드로 설명함으로써 한결 분명한 이해를 돕는다!
그래서 이 책은 654페이지라는 두께임에도 부담감은 줄이고, 내용에만 집중할 수 있도록 돕는다.
2.우리가 디자인패턴을 알아야 하는 이유에 대한 알려준다.
이 책을 읽기 전까지는 ‘그래서 디자인패턴이라는 것을 왜 하는 것일까? 그 수많은 패턴의 장단점을 어떻게 다 알고 적재적소에 적용을 할까?’라는 질문이 있었다.
이 책에서는 그러한 점들에 대해 아래처럼 자세히 설명을 한다.
딱딱한 문장이 아니라 소설을 읽는 것처럼 궁금한 패턴들에 대해서 하나하나 학습해 나가면 엄청나게 도움이 될 책이다.
3. 친근한 예시로 이해가 한결 쉽다.
책의 화법이 전반적으로 친근한 것과 동시에 예시들도 무척 이해가 잘 가는 주제들로 구성되어 있다.
오리 클래스를 이용하여 꽥꽥 우는 오리, 하늘을 나는 오리들을 구현하기도 하고
피자 가게를 운영하면서 신메뉴 출시도 하고, 각 지역의 특성을 반영한 체인을 내기도 하는 방식으로 말이다.
이런 경우 너무 pseudocode로만 작성되어 있어서 코드로의 실제 적용이 어려운 경우도 종종 있는데 이 책은 자세한 설명과 함께 코드의 구현을 돕는다.
앞으로 디자인 패턴에 대해 궁금한 점이 생기면 그 특정패턴에 대해 알아보고 친근하게 다가갈 친구가 생겨서 기쁘다. 디자인 패턴을 알고 싶은 모든 분들께 이 책을 강력하게 추천한다.
4. 학습 내용에 대해 꼼꼼하게 복습을 돕는다.
한 챕터에서 학습한 내용에 대해서 ‘쓰면서 제대로 공부하기’. ‘낱말 퀴즈’등으로 확인을 하는 것 이외에도 중요한 개념들에 대해서는 여러 번 반복하면서 자유롭게 사용할 수 있도록 돕는다.
디자인패턴은 원래 건축학에서 유래되었다 한다. 오랜 시간동안 다양한 건물을 건축하면서 마주했던 문제들을 정리하다 보니 많은 건축학자들이 다양한 방법으로 문제를 해결하기 위해 노력하였고 그 결과물들은 몇 가지 패턴을 보이게 된다. 그러한 내용을 정리하고 건축학에서 공유를 하며 점점 보완해가고 발전하였다고 한다.
(가우디는 어떻게 저런 건물을 설계 및 건축할 수 있었을까.)
건축학과 동일하게 소프트웨어 분야에서도 시스템, 서비스 등을 설계하는 과정에서 다양한 문제를 접목하게 되었고, 해당 문제들을 많은 개발자들이 어떻게 해결하였는지 살펴보다 보니 건축학과 유사하게 특정 문제들을 동일한 패턴으로 해결해 나아가는 과정을 보이게 된다.
이러한 패턴들은 암암리에 개발자들끼리 공유가 되고 사용되었던 것을 네 명의 개발자(a.k.a GoF)가 공식화하였다. 그 공식화한 책이 그 유명한 `GoF의 디자인패턴` 이다. 이 책과 함께 디자인패턴 계의 바이블로 불리울 책이 자바 기반의 언어로 출시된다. 그 책이 헤드퍼스트 디자인패턴 이다.
헤드퍼스트 디자인 패턴 개정판은 기존의 헤드퍼스트 디자인패턴에서 보았던 우수한 내용들이 그 이상으로 향상되어 포함되어 있다고 생각하면 된다. 당연히 많은 초보개발자들이 선택했던 이유는 고스란히 담겨있다. 기본에 가장 충실하면서도 재밌게 공부할 수 있는 요소들은 그대로라는 의미이다.
도서에서 제공하는 내용만으로는 단편적인 부분만 이해할 수 밖에 없다. 스스로 문제를 겪어 부딪히며 생각하면서 더욱 성장할 수 있는데, 초보 개발자들은 그런 과정과 기회를 접하기 어렵다. 하지만 해당 도서는 90가지 이상의 연습문제를 제공한다. 해당 문제를 가벼운 빈칸 채우기부터 많은 고민이 필요한 상황 제시까지 문제로 제공한다.
가장 추천하는 문제는 '뇌단련' 문제들이다. 고민의 고민을 거듭해볼 것을 추천한다. 문제가 너무 쉽다고 넘어가지 말고 해당 문제를 다시 한번 고민해보자. 그리고 코드 작성이 필요하다면 꼭 작성해보고 나의 솔루션에 빈틈은 없는지도 다시 한번 체크해보자.
헤드퍼스트는 여러 문제들을 책에서 제시한다고 설명하였다. 그 문제들을 읽고 해결책을 보는 것이 아니라 책을 잠시 덮고 해당 문제를 해결하기 위한 솔루션을 고민하고 제시하고 코드로 작성해보자. 해당 코드가 실제로 객체지향적으로 구현되었고, SOLID 원칙을 잘 준수하고 있는지 확인해보자. 그리고 해답을 보는 것을 추천한다.
이러한 과정을 통해 설계하는 생각하는 힘과 객체지향에 대한 이해도가 한층 높아질 것이다. 그리고 책에서 제시해준 패턴과 본인의 솔루션을 꼭 비교 분석해보자. 왜 나의 솔루션보다 책에서 제시한 해결책이 나은지 비교를 하는 습관을 들이자. 이 습관과 고민의 시간과 과정들이 더 나은 개발자가 될 것이라 믿는다.
대부분의 책들은 개념서같이 설명을 주로 해주는 책이다라는 생각이 나는 책들만 있는데 오라일리 헤드퍼스 책은 주로 그림과 함께 재미있게 볼 수 있는 책이라 가독성과 쉽게 이해하고 웃으면서 볼 수 있어서 너무 좋은 시리즈라 생각된다.
그렇다고 전문성이 떨어지지 않는다. 정확한 내용을 이해하기 쉽게 풀어놓고 있다. 복잡한 것이 간단해질 수 있고, 간단한 것이 복잡해질 수 있는 패턴을 볼 수있어 흥미롭다.
디자인패턴을 가장 효과적으로 소개를 하고 있는데 유머와 훌륭한 예제, 그리고 디자인패턴에 관한 깊이 있는 지식을 골고루 섞어서 재미있게 공부할 수 있게 만들어졌다.
디자인패턴을 이해하면 재사용과 유지관리가 편리한 고품질 소프트웨어를 만들 수 있고 전반적인 문제해결능력이 향상된다.
그러도록 이 책은 패턴마다 하나의 스토리를 만들어 그 스토리에 맞는 패턴을 찾고 적용해보는 과정에서 자연스럽게 패턴을 이해할 수 있도록 구성되어있어서 그 스토리를 따라하다보면 디자인패턴을 재미있고 쉽게 내 것으로 만들수 있다. 나아가 패턴과 패턴을 합쳐서 사용하는 복합패턴까지 설명하고 있기때문에 심화된 내용도 응용할 수 있는 기반을 만들어 준다.
다른건 다 떠나서 입문서로는 최고의 책이다. 책이 일단 재미있고 지루하지 않아서 접근하기 너무 좋다.
진짜진짜 추천한다.
한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."
개발서(기술서)를 많이 읽었지만, 만약 누군가 나에게 그 중에서 기억나는 개발서가 어떤 책인지 묻는다면, 주저없이 헤드퍼스트 책이라고 말하고 싶다. 그만큼 기술서에 대한 패러다임을 깨주었으며, 다른 개발서에서는 이해가 안되었던 개념도, 헤드퍼스트로 접했을 때에는 이해가 되었기 때문이다. 헤드퍼스트 시리즈 중에서도 헤드퍼스트 자바가 가장 도움이 되었지만, 그 다음으로는 지금 리뷰를 하는 디자인 패턴이었다. 이 때의 지식을 얼마나 잘 활용하고 있었는지 점검해보는 계기가 되기도 하였다.
> 책에 대한 간단한 정보
이 책은 헤드퍼스트 디자인패턴 책의 개정판이다.
무려 17년만의 개정판이다. 예전의 리팩토링 개정판 이후에 다시 한번의 충격이었다.(좋은 의미에서) 사실 책이 얼마나 많이 변했을까 싶지만, 그것보다도 많은 사람들에게 읽혔다는 방증이라고 생각이 들었다. 책의 표지디자인부터 좋은 변화가 있었을 것이라는 기대를 갖게 만들었다. GoF 패턴을 중심으로 다룬 책임을 표지에서 말해주고 있다.
이 책의 번역자 분도 인상적인데, 초판본 번역시에는 대학원생이라고 소개하셨는데, 현재는 박사 학위를 받으셨다고 소개되어 있다. 대단하다 생각이 든다.
이 책에서는 다음과 같은 패턴을 다룬다.
전략 패턴, 옵저버 패턴, 데코레이터 패턴, 팩토리 패턴, 싱글턴 패턴, 커맨드 패턴, 어댑터 패턴, 퍼사드 패턴, 템플릿 메소드 패턴, 반복자 패턴, 컴포지트 패턴, 상태 패턴, 프록시 패턴, 복합 패턴(MVC)를 주로 다루며, 이 외에 소소하게 소개한 패턴으로는 브릿지 패턴, 빌더 패턴, 책임 연쇄 패턴, 플라이웨이트 패턴, 인터프리터 패턴, 중재자 패턴, 메멘토 패턴, 프로토타입 패턴, 비지터 패턴이 있다.
> 인상깊은 부분들
많은 책이 그렇지만, 이 책은 특히나 집필하는 데 도움을 준 사람이 많은 것 같다. 그리고 개정판 역시 그것의 연장선에 있었다. 일단 기존의 테크니컬 리뷰어를 모두 수록해주었으며(이 분들의 현재 모습은 17년 더 세월을 맞으셨겠지..), 추가로 개정판에서 도움을 주신 분들을 기록하였다. 이 책의 퀄리티를 올리는데 기여한 분들을 이렇게 사진으로 기록하는 것은 헤드퍼스트만의 특징으로 기억된다.
이 책의 설명 스타일을 보여주는 한 대목이기 때문에 남겨보았다.
마치 설명하듯이 남기는데, 특히 "정말 꼭 해보세요!"라는 부분이 와 닿았다. 그만큼 중요하다는 것을 여러 연필 스타일의 글로 강조하고 있었다.
특히 람다와 같은 개념은 이번 개념판에서 도드라지게 보였다. 대부분 기존 내용을 기반으로 수록하였는데, 그 당시 자바에서 제공하지 않았던 람다로 구현할 경우 다르게 구현할 수 있는 부분이 있기 때문이다. 이 부분은 좀 더 현실적으로 구현을 생각해 볼 수 있어서 좋았다.
앞서 언급한 람다에 이어서 나오는 내용이기는 한데, 개념적으로 추가된 부분이기도 하다. 즉, 단순히 옵저버 패턴을 사용하는 것에 그치지 않고, 기존에 푸시를 사용하는 방식만 이야기 했다면, 그것을 좀 더 발전해서 풀로 바꾸는 것이 좋은 생각이라고 제안하고 있는 것이다. 사실 개발하다보면 두 방법 다 구현에는 문제가 없는데 어떤 방법이 옳은 것인지 고민하는 경우가 많다. 이것도 그 중 하나인데, 이벤트 발생시 이벤트 발생 사실만 전달하고, 실제 데이터는 pull 이라는 행위를 통해서 원하는 데이터만 가져오도록 하는 것이다. 이럴 경우 이벤트 자체가 좀 더 유연해져서 확장에 용이한 구조가 된다.
싱글턴 패턴에 대한 설명인데, 여기에서 모두들 알만한 DCL(Double-Checked Locking)을 너무 올드한 자바 버전에서는 사용하지 못한다고 이야기 하고 있다. 하지만 현재 어디에서도 1.4를 사용하는 환경을 찾기는 매우 어렵다. 최소한 보안적인 이슈 때문에서라도 1.4 버전을 사용했더라도 최소 1.6 이상으로 올렸을 것이기 때문이다. 그렇기 때문에 저 설명 자체는 굳이 이 개정판 시점에 필요했을까 싶은 생각이 들었다. 오히려 자바 11이상에서는 어떤 방법으로 좀 더 효율적으로 사용할 수 있는지 등에 대해서 나오면 어떨까 생각도 해 보았다.
enum을 이용하여 싱글턴을 구현할 수 있다고 이야기 한다. 물론 기술면접용으로 싱글턴 구현 방법을 알아야 한다고 하지만, enum으로 구현이 가능하다니 그건 이 책을 지금 읽으면서 알게 된 사실이었다. 다만 어떤 효과로 이것이 가능한지 구체적으로 나와 있지는 않기에 틈내어 추가 연구를 하여, 추후 포스팅을 하면 어떨까 생각을 해 보았다.
여기에 나온 것이 깨알 재미였다. 초판본에는 10년이라고 되어있었는데, 더하기 15년을 했다. 하지만 궁금하여 찾아보니 GoF의 디자인 패턴 책은 1994년에 원서가 발행되었기 때문에 현재(2022년) 기준으로는 28년이나 된 것이다. 엄청나게 시간이 많이 흘렀다.
이 책의 뒷표지인데, 깔끔해서 마음에 들었다. GoF의 공동저자가 추천사를 적어준 책이라는 점에서 인상적이었다. 그 뿐 아니라, 14가지 GoF의 핵심 패턴을 다루었으며, 재치넘치는 설명, 틀에 박히지 않은 구성 모두 이 책에 대한 요약을 제대로 나타내었다는 생각이 든다.
> 괜찮은 부분
1. 10년이 넘게 지났어도 여전히 중요한 패턴을 다루고 있다.
시간이 많이 흘렀지만, 그 패턴을 여전히 실전에서는 중요하게 다루고 있으며, 특히 중간에 언급하는 설계 원칙에 대해서는 중요성을 거듭 강조해도 지나치지 않을정도로 더 긴밀하게 사용되고 있다. 그래서 개정판을 통해 검증되었다고 봐도 되는 사실은, 프로그래머로 살아가는 사람이라면 이 책에 수록된 패턴을 확실히 익힐수록 매우 쓸모가 있을 것이란 사실이다. 당장 한술에 배부를 수는 없다고 생각한다. 하지만 이 패턴 중 어떤 한 부분이라도 이해가지 않는다면 다시 보고 또 보는 것을 추천한다.
2. 친숙하게 보이기 위해서인지, 별도로 그린 그림들이 편안하게 다가왔다.
미국식 유머는 쉽게 설명하는 도구로서 여전히 한몫을 담당하고 있지만, 미국식 유머에 해당하는 사진은 대부분 걷어내고 표현하였다. 그 자리를 별도의 그림들로 채웠는데, 그 그림들로 인해 친숙하게 다가왔으며, 읽기 편안하기도 하였다. 사진대진 그림으로 대체한 부분들로 인해 미국식 유머로 보이지 않는 부분들이 많아져서, 이제는 강제로 미국식 유머에 익숙해지려고 할 필요가 없어졌다고 생각한다.
3. 마치 과외를 해주는 듯한 책의 흐름이 보인다.
헤드퍼스트 책의 공통된 특성이지만, 격식을 차리는 데 치중한 책이 아닌 정말 이해 시키려는 데에만 집중한 책이다. 그래서 매 챕터마다 통일된 레이아웃이 잘 보이지는 않는다. 하지만, 책의 목적 자체가 멋있게 나열하는 것보다는 독자에게 이해시키는 데 있는 것이라는 측면에서 생각해본다면, 그 어느 책보다도 가치있게 담아냈다고 생각이 든다.
> 아쉬운 부분
1. 적은 지면을 할애해서라도 조금 더 다양한 패턴을 추가했다면 좋았을 것 같다.
많은 시간이 흘러 나온 개정판이지만, 초판본의 수록된 패턴과 동일하였다. 17년이 지나는 사이 조금 더 소개할만한 패턴은 없었을까. 다뤄줬다면 좋았을 것 같다.
2. 자바 버전이 올라간 특성을 반영했으면 좋았을 것 같다.
이 책에서 중요시 여기는 부분은 아니기에 상관없다는 생각도 들지만, 자바의 버전에 따라 언급을 제외한 부분도 있어서 언급하고 싶다. Observable 클래스를 제외한 부분이 바로 그런 부분이며, Lambda를 추가한 부분도 해당이 된다. 이렇듯 Lambda를 조금 더 적극적으로, Stream과 같은 함수를 통해 개선한다면 어땠을까 싶다. 또한 MVC에 대해 언급한 복합패턴 부분에서는 MVVM과 같은 부분도 일정 지면을 할애 했다면 좋았을 것 같다.
디자인 패턴. 개발자라면 '꼭' '제대로' 이해하고 싶은 것이죠. GoF의 디자인패턴이 가장 고전이고 최고이긴 하지만 쉽게 이해하기 어렵습니다.
예전에 지인에게 디자인 패턴에 대한 책을 추천해 달라고 했더니 '헤드 퍼스트 디자인 패턴'을 말하더군요. 그런데 절판중이라 볼 수 없었습니다. 그런데....그 책의 개정판이 나오니 너무 반가웠습니다.
이 책은 그 많은 디자인 패턴 중 가장 많이 사용하는, 그리고 꼭 알고 있어야 할 14가지 디자인 패턴에 대해 설명하고 있습니다. 결론부터 말하자면 왜 지인이 이 책을 추천했는지를 알 수 있었습니다. '헤드 퍼스트' 시리즈는 쉬운 설명으로 유명하죠. 쉽지 않은 디자인 패턴을 정말 이해하기 쉽게 설명해 주고 있습니다.
위 그림만으로도 어떤 내용인지 와 닿지 않나요? 그간 알쏭달쏭했던 디자인 패턴에 대해 이 책으로 정확하게 이해할 수 있었습니다. 함께 제공하는 자바 코드는 어떻게 구현하고 응용할 수 있는지 명확하게 보여줍니다.
디자인 패턴. 우리말로 옮기면 '디자인 형태, 유형' 정도로 번역할 수 있습니다. 지금까지 소프트웨어를 개발하면서 도출된 공통된 유형들에 대해 최적화된 양식을 제공하는 것입니다. 어느 정도 경력을 프로그래머라면 디자인 패턴을 배우지 않았어도 이미 몇몇의 패턴을 적용해 사용하고 있을 수도 있습니다. 디자인 패턴을 배워야 하는 이유는 이미 잘 설계되고 검증된 패턴을 사용할 수 있다는 것이죠. 같은 수레바퀴를 또 만들 필요가 있을까요?
패턴은 정형화되어 있지만, 그 자체로는 결코 정해져 있지 않습니다. 앞으로도 수많은 패턴들이 나올 것이고, 직접 만들 수도 있습니다. 패턴은 해결을 위한 도구임을 잊지 말아야 합니다. 디자인 패턴에 너무 몰입하게 되면 결과가 아닌 방법에 치우칠 수 있습니다. 디자인 패턴을 배우는 목적은 해결을 위한 다양한 도구 사용법입니다.
누군가 저에게 쉽고 재미있는 디자인 패턴 책을 물어본다면 이 책을 권하고 싶습니다. 이 책은 디자인 패턴이 결코 어렵지 않음을 보여주고 있습니다.
개발을 하다보면 늘 코드의 형태를 고민하게 된다. 재사용할 수 있고, 의도가 분명하며, 특정 문제를 해결할 수 있는 코드를 작성하기 위해 디자인 패턴을 이해하는 것이 큰 도움이 된다. 이 책은 유명한 GoF 객체지향 디자인 패턴을 알기쉽게 정리한 입문용 책이다. 중고 서점의 개발서 책장을 둘러보면 이 헤드퍼스트 개정 이전 책이 항상 조금 낡은 상태로 꽂혀져 있었다. 개정 전 책도 그림책과 말풍선이 가득해서 만화책 보듯이 이 책을 훑어봤던 기억이 난다. 당시에 이런 파격적인 책 구성에 끌려서 모든 <헤드퍼스트> 시리즈를 너무 사고 싶었는데, 이번에 한국 정서에 맞는 멋진 일러스트로 업데이트된 개정판 신간이 나왔다!
<헤드퍼스트> 시리즈가 지향하는 학습 방향은 두뇌를 자극해 재밌게 공부하는 것이다. 그래서 이 책은 대화체를 사용해서 이야기 하듯이 개념을 설명하고, 스토리와 그림이 가득하다. 두껍고 그림 없는 개발서적이 끌리지 않는 학습자들에게 딱 맞는 책이다. 팩토리 패턴 챕터에서는 피자를 만들기를 예로 들면서 이 패턴을 공부한다. 스스로 실습해볼 수 있는 코드 및 확인 퀴즈가 있어서 심심할 틈 없이 공부할 수 있다.
이 책에서 소개하는 디자인 패턴은 옵저버, 데코레이터, 팩토리, 싱글턴, 커맨드, 어댑터, 프록시 등 정말 다양하다. 자바, 파이썬을 공부했을 당시에 '싱글톤', '데코레이터' 같은 패턴 이름을 자주 들어봤다. 초보자인 내가 블로그 글과 강의만으로 이 개념들을 이해하는 데 한계가 있었다. 딱딱한 개념설명에 좌절하는 디자인 패턴 입문자에게는 헤드퍼스트 디자인패턴을 추천한다. 패턴을 사용하는 이유와 활용 방법을 이해하고 긴단하게 실습 코드를 작성해보는 과정을 통해 누군가에게 설명할 수 있을 정도로 명확하게 개념을 이해할 수 있을 것이다.
이 책은 개발자가 만든 것 같지 않을 정도로 훌륭한 학습 철학과 가이드를 담고 있다. 그럼에도 페이지를 넘길 때마다 개발자스러운 유머가 보여서 개발자가 만든 거 맞네 하고 고개를 끄덕이게 된다. 다들 개발하다가 머리 터질 때마다 헤드퍼스트 원고를 쓰면서 스트레스를 푸셨을 것 같다. 대단한 사람들. 헤드퍼스트 개발서 시리즈가 계속 출간되어서 많은 사람들이 재밌게 프로그래밍 공부에 빠져들었으면 좋겠다.
재사용성으로 대표되는 잘 설계된 객체지향 구조는 패턴으로 가득 차 있습니다. 여러 개발자가 협업하여 시스템을 개발할 때는 물론이고 혼자서 개발한다 하더라도, 객체 사이의 협력 방법에 얼마나 주의를 기울였는지가 객체지향 시스템의 품질을 좌우하게 되기도 합니다. 복잡한 개발 과정에서 우리 선배 개발자들은 같은 실수를 반복하지 않기 위해 노력해 왔습니다. 즉, 자신들의 시행착오를 바탕으로 특정 상황에서 발생하는 문제 패턴을 정의하고 또한 효과적으로 해결하는 방안을 기록으로 남겼습니다. 이를 '디자인 패턴'이라고 부릅니다.
누군가 겪은 문제가 누군가'만' 겪는 문제는 아닙니다. 그러므로, 디자인 패턴에 대한 이해는 동일한 문제를 해결했던 경험을 활용하여 소프트웨어 설계의 효율을 추구할 수 있게 해 줍니다. 코드의 재사용으로 대표되는 라이브러리나 프레임워크의 사용이 개발과정의 속도를 혁신적으로 개선해 주었다면, 디자인 패턴의 사용은 소프트웨어의 설계와 유지 관리를 더 쉽고 유연하게 진행할 수 있도록 도와줍니다.
즉, 디자인 패턴에 대한 학습을 통해, 같은 실수를 반복하지 않고, 효율적인 소프트웨어 설계를 가능하게 하며, 장황한 설명을 하지 않고도 '싱글턴 패턴을 쓰자'와 같이 한 문장으로 동료 개발자와의 의사소통이 가능하게 됩니다.
디자인 패턴은 1987년에 발표된 논문에서 처음으로 제안된 개념이라고 합니다. 이후 1995년에 GoF(Gang of Four)로 불리는 4인방 - 에릭 감마, 리처드 헬름, 랄프 존슨, 존 블리시디스 - 이 "Design Patterns - Elements of Reusable Object-Oriented Software" 를 출간하여 구체화 하였습니다.
우연하게도 역시 4명의 공저자가 지은, 이 책 "헤드 퍼스트 디자인 패턴(Head First Design Patterns)"은 2004년에 초판이 출간되었고 2005년에 한국어 번역 초판이 한빛미디어를 통해 국내에 소개되었습니다. 이후 2021년, 16년만에 개정되었고, 개정을 기념하여 한국에는 한국 독자들만을 위한 특별판으로 구성되어 출간되었다고 합니다.
헤드 퍼스트 시리즈의 독특한 특징이죠. 마치 여러 사람들과 대화하듯이 설명하는 페이지가 많은데, 원서를 보지 않아 정확하지는 않습니다만, 원서에는 아마도 미국인 사진이 사용되었을 것 같습니다. 하지만, 이번 한국 특별 개정판에는 동양인 일러스트로 대체되어 있는 것 같습니다. 개인적으로 시선이 더 편안하고 이질감이 덜 느껴져서 독서가 더 편안해 진 것 같습니다.
디자인 패턴을 설명하기 위해 사용한 샘플 예제에는 자바가 사용되었습니다. 화살표 지시선을 사용하여 코드 한줄 한줄 상세하게 설명해 줍니다. 다만, 회색과 연한 하늘색의 배합이라 선명하지 않은 듯 해서 살짝 눈에 피로감이 있네요. 그리고, 색맹인 분들에게 잘 보이는지도 조금은 염려가 됩니다.
UML처럼 보이지만 엄격한 의미의 UML은 아니고 UML을 적당히 고친 다이어그램을 사용하여 객체 설계를 설명하는 것도 좋은 것 같습니다. 사실 UML이 복잡한 면도 있는데 단순화한 설명이라 이해하기 더 쉬운 것 같네요.
다만, 이 책은 클래스를 다형적으로 사용하는 방법, 계약에 따른 디자인과 상속의 유사성, 캡슐화 작동 방법과 같은 뜻 모를 객체지향의 기초 지식을 이미 갖추고 있는 독자들을 대상으로 합니다. 자바를 완전히 꿰고 있지는 않아도 되지만 객체지향의 기본 개념과 원칙에 대해서 어느정도 기본 지식이 필요합니다.
원조 Gof가 23가지 디자인 패턴을 정리했다면(위), 헤드 퍼스트 4인방은 이 중 가장 많이 사용되는 14가지 디자인 패턴에 대하여 설명하고 있습니다. 또한 그 설명을 위해 디자인의 근간이 되는 9가지 디자인 원칙을 적절히 사용하고 있습니다(아래).
원조 디자인 패턴보다는 당연히 '헤드 퍼스트 디자인 패턴'의 설명이 더 가깝게 느껴지는 건 저만은 아닐겁니다.
편집의 단점인지 장점인지 모르겠습니다. 여러 '헤드 퍼스트' 시리즈들을 읽다 보면 ... 종종 뭔소리를 하고 있는지 조금은 산만하게 느껴지기도 하는 '헤드 퍼스트' 시리즈이기는 합니다. 하지만, 하나의 패턴을 설명하기 위해 한 챕터를 하나의 개발과정 이야기로 구성한 '헤드 퍼스트 디자인 패턴'과 대화하다 보면, 복잡하게만 여겨지던 객체지향 디자인 패턴들이 조금씩 손에 잡힘을 느끼게 해 줍니다.
저는 이 책의 예전 판을 읽었었는데요. 2010년 10월이었습니다. 당시 책을 읽고 "Head First 시리즈를 안 좋아했는데, 괜찮다는 느낌이 온다"라고 메모해 두었네요. 당시만 해도 GoF의 "디자인 패턴"을 읽고, 이해되지 않는 부분들이 있어서 고민하던 중이었거든요. 그런데 이 책을 읽고 이해도를 꽤 높일 수 있었습니다.
예전판의 번역자는 "서환수"님이셨는데요. 이번 판도 "서환수"님이 번역하셨더군요. 17여 년 만에 같은 책을 번역하신 셈인데요. 책 내용을 보다 보면 정말 재미있는 부분들이 있습니다. 과거 서완수 님의 번역 문체와 현재 서완수 님의 번역 문체가 미묘하게 바뀐 건데요. 예를 들어서 예전판에, "전문 용어는 신참 개발자들에게 훌륭한 자극제가 됩니다"라고 번역되어 있는 부분이 이번에는 "전문 용어는 신입 개발자에게 훌륭한 자극제가 됩니다" (64페이지)로 번역되었더군요. 모르기는 몰라도, 과거 번역 결과를 그대로 가져오기 보다 새로운 판의 번역을 따로 하신 게 아닌가 싶었습니다.
원전의 내용도 꽤 많이 바뀐 것 같았는데요. 전체적인 구조나 각 장이 설명하는 뼈대는 그대로 둔 채로, 설명하는 방식을 바꾸기도 하고, 자바 기술 변화에 맞춰서 내용을 수정/추가한 것을 볼 수 있었습니다. 예를 들어, 예제에 자바 클로저를 사용하는 코드가 추가된 부분이나 내장 옵서버 객체가 사라지는 바람에 이 부분을 사용하는 방법을 보여주는 대신 Observer가 사라졌다고 언급하는 부분이 보이더군요.
2010년에 읽을 때도 그렇게 생각했지만, <헤드 퍼스트 디자인 패턴>은 디자인 패턴을 공부하면서 이해해야 할 "용어"가 모두 등장하고 있습니다. 얼마 전 저는 "데미테르 법칙"에 대해서 글을 쓸 기회가 있었는데요. 데미테르 법칙은 "최소 지식 원칙"이라고 <헤드 퍼스트 디자인 패턴>에서 설명하고 있거든요.
"할리우드 원칙" 같은 용어도 다른 책에서 잘 언급하지 않지만 디자인 패턴 이해를 위해 꽤 중요한 용어이고요. 그래서, "디자인 패턴"을 공부하고 있는 개발자라면 <헤드퍼스트 디자인 패턴>으로 도움을 많이 받으실 수 있을 것 같습니다.
다만, 책의 예제가 모두 자바를 사용하고 있기 때문에 다른 언어를 사용하는 개발자라면, 조금 낯설다는 느낌을 받겠더군요. 설명하는 내용들이 객체지향언어 특히 자바를 사용하는 디자인 패턴에 대한 내용이기 때문인데요. 디자인 패턴은 결국 특정 언어 패러다임과 프로그램언어를 목표로 설명하게 되지만 디자인 패턴이 필요한 이유는 객체지향이나 자바를 위해서가 아니기 때문에, 다른 언어를 사용하는 사용자라도 이 책에서 얻을 게 없다고는 말할 수 없을 것 같습니다. 저 같은 경우도 자바를 현업에서 사용한 적이 없지만, 디자인 패턴이나 예전 버전 리팩토링 책을 읽으면서 많은 걸 느낄 수 있었거든요. 아마도 "왜" 이런 패턴이 필요하게 되었는지에 대한 이해는 결국 언어에 의존적이지 않기 때문이 아닐까 싶습니다.
책의 말미, 615쪽에 보면
" 시스템이 점점 복잡해지면서 처음에 기대했던 유연성이 전혀 발휘되지 못한다면 패턴을 과감하게 버리는 게 낫습니다. 즉 패턴보다 간단한 해결책이 더 나을 것 같다 싶을 때 패턴을 제거하면 됩니다"라고 언급하고 있는데요. 이런 마무리가 결국 "디자인 패턴"을 제대로 설명하기 위한 마무리가 아닐까 싶습니다.
근본적으로 디자인 패턴을 사용하는 것이 "유연성" 때문이라는 생각인 건데요. 그렇다면 프로그래밍 언어가 무엇이 되었던, 어떤 패러다임이 되었던 비슷한 고민과 해결책이 필요하게 되고, 디자인 패턴으로 정리될 수 있게 되는 거죠. 그럼, 아마도 <헤드퍼스트 디자인 패턴>에서 이야기하고 있는 디자인 패턴 용어들을 가져다 쓰게 될 것이고요.
유능한 개발자가 되는 길은 멀고도 험난한 것 같다. 뭐가 되었든지 간에 그 어렵다던 프로그래밍 언어에 간신히 익숙해지고 나니 자료 구조와 알고리즘이라는 험난한 벽에 가로막혀 한참을 헤매야한다. 이 벽을 돌파해 취업에 성공한다면, 본격적으로 수많은 개발자와 소통하고 대규모 프로젝트에 일원으로 포함되기 위해 또 다른 벽을 마주하게 된다. 특히 이번에 마주하는 벽들은 대게 모호해 보이는 해결책이나, 복잡해 보이는 도식으로 인해 도전하기가 쉽지 않아 보인다. 수많은 사람들과 협력하고, 거대한 프로젝트를 효율적으로 개발하기 위해 필요한 기술이 무엇일까? 물론 소프트웨어 엔지니어링에서 파생된 수많은 패러다임이 있지만 협업을 위해 알아두어야 하는 부분은 바로 디자인 패턴이다.
소프트웨어 디자인 패턴은 소프트웨어 공학의 소프트웨어 디자인에서 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책이다. 소스나 기계 코드로 바로 전환될수 있는 완성된 디자인은 아니며, 다른 상황에 맞게 사용될 수 있는 문제들을 해결하는 데에 쓰이는 서술이나 템플릿이다. 디자인 패턴은 프로그래머가 애플리케이션이나 시스템을 디자인할 때 공통된 문제들을 해결하는 데에 쓰이는 형식화된 가장 좋은 관행이다. 위키백과 - 소프트웨어 디자인 패턴
디자인 패턴이 소프트웨어 개발에 있어서 왜 중요한지는 위키백과의 설명에서 찾아볼 수 있다. 우선 첫번째로 나오는 것은 '재사용 가능한 해결책'이라는 데에 있다. 개발 과정에 있어서 개발자들은 수많은 문제 상황을 마주하게 된다. 그때마다 머리를 쥐어 짜내어 새로운 해결책을 찾아가는 것은 시간적으로 매우 비효율 적이다. 다행스럽게도우리 앞에는 수 많은 선배 개발자들이 있고, 그들은 오랜 시간 동안 수많은 문제들을 추상화하여 패턴화 시켜 놓았고 그에 맞는 소프트웨어 디자인까지 만들어 놓았다. 우리의 문제 상황과 맞는 디자인 패턴을 발견한다면, 언제든 적용해 볼 수 있다.
또한 '형식화 된 가장 좋은 관행' 또한 중요한 의미를 담고 있다. 우리가 마주하는 수많은 문제들은 개발 도메인에 따라 복잡하고 긴 이름을 담고 있다. 매번 그 길고 복잡한 이름을 거론하며 회의 시간에 해결 방법을 논의한다면 회의 시간은 문제 해결보단 이름을 정확하게 부르는데 힘을 쏟게 될 것이다. 개발자들 간의 약속처럼 디자인 패턴에 대해 알고 있다면 "OOO 패턴"이라는 짧고 명확한 이름을 통해 훨씬 효율적인 시간을 보낼 수 있게 될 것이다. 훨씬 전문가처럼 보일 수 있기도 한 것은 덤이다.
이렇게 좋아보이는 디자인 패턴에 장점만 있는 것은 아니다. 디자인 패턴으로 만들 필요가 없는 간단한 문제조차 어떤 패턴을 활용해야 하는지 고민하는 것은 오히려 시간 낭비가 될 수도 있다. 또한 대부분의 디자인 패턴은 객체 지향 프로그래밍에 기초를 두고 있기 때문에 또 다른 패러다임의 개발 방식을 적용하는 데에는 오히려 허들로 작용할 수도 있다. 그 외에도 다양한 문제점들이 있을 순 있지만, 개발자라면 한 번쯤은 디자인 패턴에 대해 공부해보기를 권한다.
헤드퍼스트 디자인패턴
이번 포스팅은 한빛 미디어의 나는 리뷰어다 이벤트를 통해 제공받은 <헤드 퍼스트 디자인 패턴>을 읽고 작성하였다. 이 책은 디자인 패턴을 학습하기 위한 최고의 책인지는 장담할 수 없지만(디자인 패턴에 관해 읽은 책은 이것이 두번째이다) 디자인패턴에 대해 이해가 낮은 나에게는 아주 좋은 학습자료의 역할을 해 주었다.
<헤드 퍼스트 디자인 패턴>은 하나의 패턴에 대해 다양한 방법으로 소개해 주고, 중간중간 이해하는데 도움이 될만한 간단한 퀴즈도 준비해 주었다. 좀 더 자세히 말하면, 하나의 주제에 대해서 아주 구체적인 예시 상황을 먼저 제시해 주고 그에 대한 해결책인 디자인 패턴을 소개해 준다. 작동 예시에 대한 이미지를 두어 작동 원리를 파악하기 쉽게 해 준다. 시니어 개발자와의 QnA 시간을 갖고 난 다음, 디자인 패턴들끼리의 가상 인터뷰를 통해 각 패턴들이 갖는 특징들을 다시 한번 상기시킬 수 있도록 도와주도록 구성되어 있다.
이 책은 하나의 패턴에 대해서 디테일하게 학습하기에 아주 좋은 구성으로 되어 있어 처음 디자인 패턴을 접하는 학습자들에게는 아주 큰 도움이 될 것 같다. 반면 디테일한 내용을 담았기 때문에 수많은 디자인 패턴들을 훑어보면서 필요한 내용만 답습하고자 하는 분들에게는 오히려 이러한 방대한 내용이 방해가 될지도 모르겠다. 만약 수 많은 패턴들 틈 속에서 원하는 부분만 발췌해서 읽어나가길 원한다면, <쉽게 배워서 바로 써먹는 디자인 패턴>을 참고하는 것도 도움이 될 수 있다
추가로 <쉽게 배워서 바로 써먹는 디자인 패턴>은 php 기반이고 <헤드 퍼스트 디자인 패턴>은 java 기반이지만, 디자인 패턴은 객체지향을 지원하는 언어라면 두루두루 써먹을 수 있기 때문에 책 내부의 예제 코드를 훑어보고 어느 정도 읽을만하다고 느낀다면 충분히 도전해볼 만하다고 생각한다.
약 4주간의 리뷰 시간이 주어졌지만, 충분히 책을 이해해나가며 읽기엔 회사일과 육아를 병행하면서 완독 하는 것은 무리였다. 나중에도 시간을 들여가며 java 코드를 c++로 변환해 가면서 책을 충분히 소화시키는 기간을 갖는다면 디자인 패턴을 이해하는데 큰 도움이 될 것 같다.
지금이야 다양한 디자인 패턴을 활용하고 또 필요에 따라 응용하기도 하지만 처음부터 그런 것은 아니었습니다. 학부생시절 강의를 통해 디자인패턴을 배웠으나 그 당시에는 디자인 패턴의 중요성을 깨닫지 못했습니다. 그 당시 학생수준에서 개발한 소스코드는 제출로 끝인 과제만 있었기 때문에 유지보수에서 일어나는 문제를 알 수 없었고 결과적으로는 디자인 패턴의 필요성도 느끼기 어려웠습니다. 그러나 상용 프로그램을 개발하기 시작하면서 부터 깨달은 점은 개발자는 새로운 것을 개발하는 시간보다 더 많은 시간을 기존에 개발되어 있는 소스코드를 수정하는 데 쏟는 다는 점입니다. 쉽게 말해 SW불변의 진리는 변화입니다.
계속 변화하는 SW
변화하지 않는 SW는 죽은 SW 뿐입니다. 즉 살아있는 SW프로젝트라면 변화할 수 밖에 없습니다. 개발자가 산출물을 빠르게 내는 것 보다 유지보수하기 좋은 코드를 짜는 것을 더 중요하게 생각하는 이유도 여기에 있습니다. 디자인패턴은 이러한 SW 유지보수하며 나올 수 있는 공통적인 문제를 객체지향 디자인 원칙에 따라 해결하는 가장 효과적인 방법 혹은 모범사례라 할 수 있습니다. 그리고 이 헤드퍼스트 책은 그 디자인 패턴을 가장 효율적으로 학습할 수 있는 책입니다. 이 책에서는 단순히 디자인패턴을 나열하며 소개하는 것을 넘어 객체지향적 디자인 원칙(설계 원칙)을 소개하고 그에 적합한 디자인패턴을 하나씩 소개합니다. 그 과정에서 디자인 패턴이 ‘왜 필요한지’를 충분히 공감할 수 있도록 구체적인 문제 시나리오를 설정하고 그 문제를 ‘어떻게 해결 할 것인지’를 단계별로 이해할 수 있도록 많은 지면을 할애해가며 차분히, 그리고 반복적으로 설명합니다.
헤드퍼스트 시리즈
헤드퍼스트는 독보적으로 실용적이고 효과적인 책입니다. 눈에 띄는 이미지와 구어체로 정보를 여러분 머릿속에 강제로 주입합니다. 어렵고 격식있고 정제된 문어체 대신 직관적이고 쉬운 구어체와 이미지들로 소화하기 쉬운 상태로 내용을 전개하는 등, 책의 구성 자체가 중요한 정보를 뇌리에 박히게끔 의도되어 있습니다. 은근 페이지가 많아보이는데 그 이유는 더 많은 내용을 설명하기 위해서가 아니라 더 쉽고 친절하게 설명하기 위해 지면을 투자하기 때문입니다. 이번 개정판에서는 전체적으로 이미지와 레이아웃이 깔끔해져서 가독성이 좋아졌지만 아이러니하게도 더 이상 예전의 헤드퍼스트 특유의 이질적인 느낌의 사진과 삽화를 볼 수 없는 점은 개인적인 아쉬움이 있습니다. 그러나 디자인 패턴을 의인화 하여 인터뷰를 하고, 퀴즈를 내고, 스승과 제자의 대담 등으로 구성되어 여전히 재미있으며 쉽고 빠르게 학습할 수 있도록 당신의 뇌를 말랑말랑하게 활성화 시켜줄 것입니다.
디자인패턴이란
디자인 패턴이란 Gof(Gang of Four)가 정립한 개념으로 SW개발(특히 유지보수/코드수정)에서 흔히 발생하는 문제들을 객체지향 디자인 원칙에 맞게 코드수준에서 해결하는 검증된 방법론 또는 코드 형식입니다. 이미 개발자 생태게에서는 상식수준으로 통용되어 장황하게 설명하는 대신 Factory, Repository, Adapter 처럼 디자인 패턴 이름만으로도 어떤 문제를 어떻게 해결하고자 한 코드인지 정확하게 파악이 가능하여 훨씬 효율적으로 소통할 수 있게 해줍니다.
장황하게 설명했으나, 객체지향적 코드 패턴이라 이해하시는 걸로 충분합니다. 그보다 중요한 점은 개발자라면 상식으로 반드시 알아야한다는 것입니다.
객체지향 디자인 원칙이 아주 원론적이고 가장 추상적인 개념이라고 한다면 디자인 패턴은 이러한 디자인 원칙을 바탕으로 한 실제 코딩 유형 또는 전략에 해당합니다. 여전히 추상적인 수준이고 언어에 종속되지 않고 객체지향 언어라면 어느 언어에서나 적용할 수 있습니다. 그러나 디자인 패턴이 라이브러리나 프레임워크로 존재하기 어렵습니다. 그 이유는 대부분의 디자인 패턴이 실제 소스코드로 구현된 수준이 아닌 그 이상의 추상화를 필요로 하고 또 실제 용도에 따라 다르게 응용되거나 적용되는 방법이 다양하기 때문입니다. 실제로 Java에서도 옵저버 패턴이 java.util.Observer로써 존재했으나 Java9 부터 deprecate 된 사례도 있습니다. 결론적으로 디자인 패턴은 구현된 라이브러리로 참조해서 사용하는 대신 패턴으로써 필요한 순간에 개발자가 자신의 목적에 맞게 직접 구현해야하므로 디자인 패턴을 언제 어떻게 사용해야하는지 확실하게 이해하고 있어야 합니다.
결국엔 추상화와 인터페이스
궁극적으로는 디자인패턴은 추상화 통해 SW의 본질인 수정과 유지보수에 유리한 구조를 만드는 작업이라고도 할 수 있겠습니다. 디자인패턴은 결국 어떤식으로 추상화를 하느냐, 즉 인터페이스 설계에 관한 이야기라고 봐도 무방합니다. 클래스의 책임을 나누어 결합성을 낮추고 그래서 수정으로 인한 영향을 다른 클래스에 전파하지 않도록 하거나, 비슷한 역할을 모아서 응집도를 높여서 관리포인트를 줄일 수도 있습니다. 이 책에서는 객체지향의 추상화가 무엇인지 다시 한번 고민해보게끔 도와주며 또 객체지향 디자인 원칙만으로는 실무 수준에서 코드를 설계하는데 모든 문제를 대응할 수 없는 이유를 다시금 설명합니다. 대표적으로 학부생 시절에 상속을 통해 재사용성을 높인다고 배운 점이 실제로는 어떤 부작용을 초래하는지 등 사례를 통해 실전레벨의 추상화를 배우실 수 있습니다.
이런 사람들에게 추천합니다.
개발경력을 이제 막 시작한 주니어 개발자에게 강력 추천합니다.
만약 1~3년차정도의 주니어 개발자가 성장에 정체기가 왔다면, 혹은 주니어 티를 벗고 이제는 중니어(?) 개발자가 되고 싶다면 이 책으로 시작해보세요. 개발자의 학습을 돕는 많은 자료는 초심자를 위한 입문서거나 아니면 아예 수준급 전문가를 위한 내용인 경우가 많습니다. 하지만 반대로 입문 이후 실무를 뛰면서 생기는 고민들을 해결해주거나 내공을 쌓기위해 볼만한 자료들을 생각보다 찾기 어렵습니다. 이 책은 그런 점에서 주니어개발자라면 꼭 한번 읽어볼 책으로 강력히 추천드립니다. 또 이미 어느정도 연차가 있으신 분들도 이 책을 읽으면서 디자인 패턴을 잘 사용하고 있는지, 또 객체지향 디자인 원칙을 잘 준수하고 있는지 되돌아보기 위해 읽어보는 것도 좋을 것 같습니다. 하지만 아직 실무 경험이 없는 학생이라면 이 책을 읽어보는 것도 분명 도움이 되겠지만 와닿지 않을 수도 있을 것 같습니다. 헤드퍼스트 시리즈인 만큼 학생도 충분히 읽을 수는 있으나 아무래도 유지보수 경험이 생긴 이후에 좀 더 그 의미를 공감하면서 재밌게 읽으실 수 있을 것입니다. 그러나 신입 개발자분들이라면 오히려 이 책을 읽고 모든 것을 디자인패턴으로 구현하려는 디자인패턴-만능주의에 빠지는 개발자-사춘기에 빠질 수도 있으니 주의가 필요합니다. 물론 그 순간을 슬기롭게 지나고 나서, 어느새 성장해있는 본인의 모습을 발견하실 수 있을 것입니다.
몇년 전에 읽어본 책인데, “16년만에 개정된 한국 특별판”이라는 문구에 끌려 보게 되었다. 헤드 퍼스트 디자인 패턴은 “GoF의 디자인 패턴”중 많이 쓰이는 패턴을 쉽게 이해해도록 구성된 책이다. 이미 유명한 책이서 내용에 대해 크게 리뷰할 것은 없어 보인다.
결론부터 말하자면, 1판을 본사람은 굳이 또 볼 필요는 없겠다. 한국 특별판은… 그림이 다를 뿐이다.
이런 미국인 취향에서
이런 한국의 그림스타일로 바뛰었다. 내용의 변경점은 거의 느낄수 없었다.
사실 이런 그림을 미국인이 아닌 우리나라사람이, 그것도 요즘 세대에서 보면 이해하기 어려울 것 같다. 헤드퍼스트라는 시리즈에서 추구하는 학습방법면에서 오히려 걸림돌이 될수도 있다. 그런 부분을 우리나라 독자에 맞게끔 초월번역한것은 칭찬받아 마땅할 것이다.
하지만 한국만의 이미지를 제외하고 나면 단점도 좀 보인다. 우선 시인성이 많이 떨어진다. 1판과 달리, 2도 인쇄를 한건 좋은데… 색 선택이 잘못된것 같다.
그림의 느낌을 살리기 위해서 인것 같은데… 진한 남색 같은 색을 썼으면 더 좋았을것 같다…
내용면에서 보자면 1판과 바뀐게 거의 없다. GoF 디자인 패턴이 바뀐게 없으니 당연할 수도 있지만, 뭔가 새로운 예시나 현대적인 내용이 추가된것이 없다. 1판을 본 사람이라면 굳이 볼필요가 없겠다.
그리고, 헤드퍼스트 특유의 구성이 안 맞는다면 오히려 보기 않좋을 수도 있다. 개인의 취향에 따라 조금 난잡하거나 혼란스럽게 느낄수도 있다. 그리고, 600페이지나 되는 볼륨치고 내용은 그리 많지 않게 느껴진다. 몇개의 주요 패턴 위주로 구성되고, 나머지는 가볍게 소개하는 수준이다. (경우에 따라선 핵심적인것만 살펴볼수 있으니 이게 장점일 수도 있다.)
우리나라에 헤드 퍼스트 디자인 패턴 책이 2005년 초판이 나온 이후 16여 년 만에 개정판으로 돌아왔습니다. 특히 이번 개정판은 한국 특별판으로 재탄생했습니다. 제가 가지고 있는 헤드 퍼스트 시리즈 책과 비교해 봐도 신경을 많이 썼다는 것을 느낄 수 있어습니다. 세련된 디자인과 일러스트레이션 들로 인해 이전 시리즈 들에서 느껴졌던 이질감 같은 것이 사라져 완전 새로운 시리즈의 책을 읽는 것 같았습니다.
소프트웨어를 설계할 때 중요하다고 하는 디자인 패턴이 워낙 종류도 많고 어떻게 배울 지 막막하던 참에 이 책을 만날 수 있어 행운이라고 생각했습니다. 그나마 제가 알고 있는 패턴 이라함은 MVC 패턴 뿐이었습니다. 아무래도 php로 웹 개발을 주로 하다보니 디자인 패턴에 대해 크게 고민하지 않고 배우지 않았던 것 같습니다. 게임회사에 근무 할 때 C# 게임 개발자 동료들이 옵저버 패턴, 싱글턴 패턴 등에 대해 이야기 할 때 무슨 이야기를 하는지 몰랐던 기억이 있습니다. 전에 이 책을 만나 읽었더라면 이야기에 낄 수 있었을텐데 아쉽습니다.
정말 간단한 Java언어 예제로 디자인 패턴을 설명하기 때문에 제가 사용하는 주언어가 아님에도 디자인 패턴을 학습하는데에는 크게 문제되지 않았습니다. 그리고 보통의 학습서들은 그림이 많이 나오지 않는데 헤드 퍼스트 시리즈 답게 적재 적소에 다양한 그림을 활용해 개념들을 설명하기 때문에 지루하지 않게 한 챕터 한 챕터 학습하실 수 있습니다.
챕터 1에서 읽으면서 이걸 왜 해야하는 거지? 하고 갖고 있던 문제집을 봤다.(사실 이 책을 읽는 이유 중 하나는 내가 여태 자격증 하나를 제대로 못 따서 그런 것도 있다..) 읽고 왜 챕터 1에서 이런 예시를 들어가며 이야기를 풀어갔는지 납득했다.(기껏 눈높이 교육을 해주고 있는데 받아먹지 못하는 내 자신을 되돌아보며 약간 고민 좀 하고)
대상 독자는 전문가 수준으로 요구하지는 않지만 그래도 자바나 C#을 어느 정도 알고 있는 사람들이 대상이다. 그리고 참고서 같은 책을 찾는다면 이 책은 별로 좋은 책이 아니라고 하는데 개인적으로 이 정도면 충분히 참고서아닌가 싶다. 자격증 공부하면서 이게 뭔 소리야.. 하고 아리송했던 그 디자인패턴에 대해서 개인적으로 정말 아주 만족스러운 예시로 설명해주고 있었다. 특히 학습만화같은 느낌의 흐름이 있어서 좀 글자만 있어서 눈이 감길까 싶은 걸 방지해주는 거 같기도 하다.
하나의 패턴에 하나의 이야기를 담았습니다. 틀에 박히지 않아 지루할 틈이 없는 구성과 친구와 이야기하듯 편안한 대화체로 이야기를 풀어냅니다. 이야기 속에 다양한 방법으로 해결할 수 있는 질문과 90개 이상의 연습문제를 담았습니다. 마치 게임 퀘스트를 해결하듯 문제를 하나하나 해결하다 보면 학습한 내용이 머릿속에 강렬하게 남습니다.
이유 2. 원스톱으로 배우는 14가지 GoF 핵심 디자인 패턴과 9가지 객체지향 디자인 원칙!
현장에서 자주 사용되는 옵저버, 어댑터, MVC 패턴 등 14가지 GoF 객체지향 패턴을 중점으로 패턴의 정의, 사용 시기, 사용처, 사용 이유, 즉시 디자인에 적용하는 방법을 알려줍니다. 이와 더불어 객체지향 프로그래밍에 광범위하게 적용할 수 있는 OCP, 할리우드 원칙 등 9가지 객체지향 디자인 원칙과 패턴으로 생각하는 방법도 알려줍니다.
이유 3. 시대의 변화에 맞춘 개정과 한국 독자만을 위한 특별판!
자바 8과 자바 16 이상에서 무리 없이 동작할 수 있도록 예제 코드를 수정했으며, 부가적인 설명과 Q&A 질문을 추가했습니다. 또한 16여 년 만의 개정을 기념해 오직 한국 독자만을 위한 새로운 삽화를 사용하고 한글 친화적인 구성했습니다. 원서를 읽을 때보다 더욱 편안하게 디자인 패턴을 학습할 수 있습니다.
[대상 독자]
- 유지보수만 생각하면 그저 눈물인 주니어 (자바) 개발자
- 디자인 패턴을 다시 한번 살펴보고 싶은 시니어 (자바) 개발자
- 개발 현장의 소프트웨어 디자인 방법이 궁금한 개발자 지망생
[주요 내용]
- 14가지 GoF 핵심 패턴의 사용 시기와 이유!
- 즉시 디자인에 적용하는 방법!
- 쓰지 말아야 하는 상황!
- 패턴의 근간이 되는 객체지향 디자인 원칙!
- 그 밖에 알아 두면 좋은 9가지 패턴의 정의와 사용법!
[서평]
헤드 퍼스트 디자인 패턴은 2005년 출간 후 17년이라는 시간 동안 디자인 패턴 분야에서 사랑 받아온 이유는 GoF 디자인 패턴의 핵심을 잘 다루고 있기 때문이다.
이 책에는 그림이 많습니다. 두뇌는 글보다는 그림에 더 민감하게 반응하기 때문입니다. 그림 한장이 1,024개의 단어보다 낫습니다. 그림 안에 글을 넣었을 때 더 기억할 수 있습니다.
같은 내용을 서로 다른 방법과 매체로 여러 감각을 거쳐 전달해서 설명한 내용이 머리에 더 잘 기억 됩니다. 여러 번 반복하면 그만큼 잘 기억할 수있습니다. 개념과 그림을 예상하기 힘든 방식으로 사용합니다. 두뇌는 새로운 것을 더 잘 받아들이기 때문입니다. 그리고 패턴 중독을 피하는 방법과 디자인 패턴을 발견하는 방법도 다루고 있어 미래의 패턴 디자이너에게도 도움이 될것입니다.
이 책이 필요한 사람
자바를 잘아는 사람
디자인 패턴과 디자인 패턴의 기반이 되는 객체지향 디자인 원리를 배우고, 이해하고, 기억하고, 작용하는 싶은 사람
지루하고 학구적인 강의보다 선배가 옆에서 알려주는 거 같은 대화체를 선호하는 사람
이 책과 맞지 않는 사람
자바를 처음 배우는 사람(하지만 자바를 아주 잘 알아야 하는 것은 아닙니다. 자바를 몰라도 C# 혹은 C++등 객체지향 언어를 안다면 이해를 할수 있습니다.)
객체지향 언어로 소프트웨어를 개발하면서 필수로 알아야 하는 디자인 패턴을 정리해놓은 책이 이번에 개정판으로 돌아왔다. 바로 "헤드퍼스트 디자인 패턴"이 그 주인공이다. 이 책은 우리의 좌뇌와 우뇌가 골고루 일 할 수 있도록 알차게 구성되어 있다. 독자가 책을 더 깊이 있게 이해하고 흥미롭게 읽을 수 있도록 글과 그림을 적절히 섞어뒀다. 아마 오랫동안 머릿속에 기억될 듯한데 하나씩 살펴보도록 하자.
호기심을 한껏 당겨주는 도입부가 인상적이다. 헤드퍼스트에서 발간되는 모든 책에 들어가는 내용인지는 모른다. 헤드퍼스트 책은 처음이라. 많은 페이지에 적절하게 그림이 들어가 있다. 지금까지 이런 책은 처음이다.
독자가 진심으로 공부할 수 있도록 두뇌를 정복하는 방법까지 지면으로 설명하고 있다. 이 정도면 패턴 가스라이팅(...) 훌훌 읽지 말고 제대로 공부해야 한다. 책을 어떻게 읽어야 할지 충분히 설명하고 있기 때문에 이대로만 읽어주면 된다. 책 옆에 필기도구는 필수다. 책에 낙서하는 걸 좋아하지 않는다면 연습장에라도 적어보도록 하자. 충분히 학습됐다고 보이면 누군가에게 설명한다고 가정하고 패턴에 대해서 이야기를 해보자.
클래스 다이어그림을 통해 단계적으로 설명하기 때문에 용어적인 어려움만 없다면 따라가는데 어려움은 없을 것으로 보인다. 위에 이미지를 보면 알 수 있듯이 객체가 서로 어떻게 연결되어 있는지 아주 친절하게 설명되어 있다.
책에는 무려 14가지 필살 패턴이 정리되어 있다. 독자에 따라서는 이미 알고 있는 패턴이 있을 수 있고, 경험적으로 개발은 해왔지만 패턴의 이름은 몰랐던 경우도 있을 수 있다. 자, 그럼 개발이 처음인 독자에게는 어떨까? 분명 이 책은 아주 훌륭한 책이다. 그리고 심지어 재밌다. 하지만 전제가 필요하다. 위에서 언급한 것처럼 용어적인 어려움이 없어야 하는데 거기에는 프로그래밍 언어 Java도 포함된다. 추가로 비즈니스 설계 경험이 있다면 조금은 읽기 수월할 거다. 혹은 센스가 있거나.
막연하게 이 책에 있는 내용을 머릿속에 털어 넣으려고 하는 순간 지옥 같은 시간을 보내게 될지도 모른다. 혹시 책을 읽다가 어렵다면 그 부분은 훌훌 넘어가도 좋다. 나중에 경험이 더 쌓였을 때 다시 읽어보면 되니까. 책을 읽으며 아주 잠깐이라도 지루하게 느껴진다면 잠시 쉬어가시라. 이 책은 뇌가 충분히 말랑말랑해져 있는 상태에서 즐겁게 상상하며 봐야 하는데 잘못하면 눈만 따라가게 될 테니까.
몇년전 디자인 패턴을 공부하기 위해 처음 찾은 책은 그 유명한 GoF의 디자인패턴 이었다. 그때 당시를 생각하면 완독을 했었지만 몇 프로나 이해를 하고 봤을까 하는 생각이 든다. 그 후 계속해서 개발을 해오면서 자연스럽게 디자인 패턴을 코딩하는데 사용하였지만 디자인 패턴을 이용하여 만들어야지 또는 이런 문제는 이런 디자인 패턴을 써야지 하고 생각하면서 코딩을 하지는 않았다.
그 이유를 이번에 나온 헤드 퍼스트 디자인 패턴(개정판)을 읽으면서 느낄 수 있었다. 나는 아직까지도 디자인 패턴을 이해하고 활용할 수 있을 정도로 정확히 알지는 못한다는 것이었다.
이번에 나온 헤드 퍼스트 디자인 패턴(개정판)은 지금까지 개발한 코드를 생각하면서 읽게 되었는데 다시 한번 패턴을 이해하고 생각할 수 있게 해 준 고마운 책이었다.
이 책에 대해 간략히 소개하자면 14가지의 패턴(전략, 옵저버, 데코레이터, 팩토리, 싱글턴, 커맨드, 어댑터, 파사드, 템플릿 메소드, 반복자, 컴포지트, 상태, 프록시, 복합)을 일상에서 발생하는 상황(고무오리, 커피공장, 리모컨, 피자 등등 )을 이용하여 설명하고 있다.
기본적인 상황설명을 먼저 하고 그에 따른 클래스/객체를 만들고, 패턴을 설명하고, 다이어그램을 그리는 방식으로 진행하며 각 패턴에 따른 객체 지향 프로그래밍 원칙들을 설명한다.
중간중간에 이해한 내용을 기반으로 직접 써가며(코딩이나 이해를 완성하기위한 퀴즈 등) 배울 수 있게 공간을 제공한다.
책 말미에 디자인 패턴으로 생각하기나 14가지 패턴 외의 9가지 패턴을 간단히 설명하고 있는 부분도 설명되어 있다.
이렇게 이책은 주요한 패턴은 상세한 상황을 기준으로 자세히 설명하고, 독자를 이해시키기 위한 장치를 여러 내용으로 보여 주며, 그외 패턴도 간략하게나마 설명을 하여 완성된 구성으로 이루어져 있다.
총평
지금은 구글링이나 다른 많은 책들에서 디자인 패턴에 대한 내용을 접할 기회는 많고 굳이 책까지 보면서 디자인 패턴을 이해할 필요가 있나하고 생각하는 분들이 많을 수 있으나 자바 초급자나 나 같이 디자인 패턴을 알고 있지만 정확히 이해하고 활용할 수 없었던 분들은 이 책을 꼭 추천 드리고 싶다. 현존하는 디자인 패턴관련 정보 중에 가장 쉽고 이해할 수 있게 해 줄 수 있을 거라 자신한다.
단, 이 책 서두에서 밝히듯이 이 책은 디자인 패턴에 대한 이해를 돕는 책이지 코딩을 가르치는 책은 아님을 알아야 한다.
제목에서 알 수 있듯이, 디자인 패턴 설명하고 있는 책이다. 다 다루는 것은 아니다. 실무에서 자주 사용하는 디자인 패턴들을 집중해서 다루고 있다. (14가지 패턴 : 전략패턴, 옵저버 패턴, 데코레이터 패턴, 팩토리 패턴, 싱글턴 패턴, 커맨트 패턴, 어댑터 패턴, 퍼사드 패턴, 템플릿 메소드 패턴, 반복자 패턴, 컴포지트 패턴, 상태 패턴, 프록시 패턴, 복합 패턴) 그 면이 오히려 좋았다. 책은 총 654페이지로 굉장히 두꺼운데, 그림이 대다수를 차지하고 있다. 일부로 가독성+학습을 위해서 책의 한페이지를 글로 꽉꽉 채우지 않은 것 같다.
책이 IT 책치고는 굉장히 친절한 편이다. 책 쓰신 분이 뇌 과학에 관심이 많은 듯했다. 어찌되었든 이 책 앞단에서 말하는 것에 따르면, 두뇌는 사물보다는 사람에게 더 많은 관심을 가지기 때문에 책에서도 여러 사람이 등장하고, 사적인 대화체를 많이 사용했다고한다. 읽을 때보다 어떤 일을 실제로 할때 더 잘 배우고 더 잘 기억하기 때문에 연습문제도 많이 배치했고 양쪽 두뇌를 모두 사용할 수 있는 내용을 담았다고 한다. 여러 디테일을 신경쓰면서 열심히 만들으셨다고 한다. 덕분에 디자인 패턴책은 전공책스럽겠지라는 편견을 깨버리고, 의외로 재밌었다..
개정판이 나왔다고 하길래 예전 헤드퍼스트 디자인패턴은 언제 나왔는지 찾아보니 와우 2005년도에 책이 나왔었네요.
헤드퍼스트 시리즈를 처음 접했을때 꽤 놀라왔습니다. 기술적인 책도 이렇게 쉽고 재밌게 읽힐 수 있구나 하는.
만화책을 보는 듯한 큼지막한 일러스트에 대화형의 말풍선 문장들, 개인 노트에 포스트잇을 추가로 붙여놓은 거 같은 설명등으로
워드문서를 읽는게 아닌 파워포인트 문서를 보는거 같은 느낌이 듭니다.
이미 수많은 디자인 패턴 책, 온 오프라인 강좌등이 있습니다. 구현코드까지 올라온 것도 많아서 프로그래밍을 좀 해본 사람들은 쉽게 가져다가 사용할 수 있습니다. 하지만 설명의 방향이 일방적이죠. 어떤 문제를 해결하기 위해 그런 패턴이 만들어졌고 다른 비슷한 패턴들과의 차이가 무엇일지 충분히 이해하지 못했다면 다음에 비슷한 문제가 생겨도 스스로 고민해서 해결하기보다 검색해서 붙여넣기할 가능성이 높습니다.
이 책은 사용자가 해결하고픈 고민이 생겼을때 (시니어개발자나 그 내용을 잘 아는 )동료를 찾아가 바로 옆자리에서 1:1로 페어프로그래밍하듯 대화하면서 문제를 해결해 나가는 식으로 구성되어 있습니다.
사용자가 고민할때 독자도 그 문제를 어떻게 해결할 수 있을지 같이 고민합니다.
사용자는 이제 동료에게 자기가 생각하는 내용과 궁금한 내용들을 동료에게 얘기합니다. 기존 코드가 있고 동료가 개선사항을 얘기하면 사용자는 고민하고 추가 질문을 합니다. 그러면 또 동료가 그 질문에 대답을 해줍니다.
이 과정은 체크박스 퀴즈, 크로스워드퀴즈 줄긋기 퀴즈, 주관식 문제등을 통해 독자도 같이 고민하면서 내용을 머릿속에 잘 기억할 수 있도록 해주고 있습니다.
하나의 챕터가 끝날때마다 해당챕터의 글과 다이어그램등으로 내용을 정리해주고 있습니다. 뒤로 갈수록 다른 패턴들도 학습하기 때문에 비슷해 보이는데 차이를 아직 잘 모르는 패턴들이 나올 수 있습니다. 각 패턴들을 의인화시켜서 대화식으로 구성한 후 (패턴)본인의 성격을 확실하게 드러내주고, 다른 패턴들과의 논쟁을 통해 차이점을 잘 부각시켜주고 있습니다.
예전에 나왔던 책과 구성이나 내용은 크게 달라지지 않았다고 느꼈지만
초보 개발자든 경력이 오래된 개발자이든 각자의 입장에서 다시금 디자인패턴에 대해 정리하고 익힐 수 있는 좋은 책인 거 같습니다.
이 책으로 디자인패턴을 공부를 처음 시작했는데 가장 좋았던 점은 어떤 패턴인지 직관적으로 설명하는 것이 가장 좋았습니다. 마치 패턴과 내가 대화를 하는듯한 느낌을 주는 느낌을 받았습니다. 이건 여담인데 제가 회사 면접때 디자인 패턴을 공부한적이 있다고 했고 특정 패턴에 대해 설명한적이 있었습니다. 그때 설명한 패턴이 어뎁터 패턴이었습니다. 저는 그 회사에 합격을 해서 지금도 잘 다니고 있습니다. 이것을 갑자기 말한 이유는 아마 제 합격이 가능한것은 이 책의 지분이 어느정도 있다고 생각합니다. 실제로 입사를 했을때 보다 먼저 구입을 하였습니다.
근데 이 책의 가장 큰 단점이 있었는데 그건 바로 너무 책 표지가 올드하다는 점입니다. 제가 이 책을 처음 구입한것이 2010년 이후였던것으로 감안해도 너무 표지가 올드하였습니다. 책 내용이 아무리 좋아도 선뜻 책 구입이 망설여지는 그런 표지였습니다. 아마 이 책을 구입하는 대부분 사람들이 이 책이 얼마나 좋은지에 대해 소문을 들었기 때문에 이 책을 구입을 해도 과언이 아니라고 확신을 가질 수 있습니다.
그러다 새롭게 바뀐 이 책은 위에서 말한 단점이 하나도 보이지 않았습니다. 더 깔끔해졌고 읽기 편해졌습니다. 확실히 가독성이 높아졌다는 것이 느껴졌습니다. 전체적으로 크게 바뀐 부분은 없었지만 그 전보다 훨씬 읽기 편하게 변한것이 진심으로 느껴졌습니다.