[책 리뷰] Head First Design Patterns
헤드 퍼스트 디자인 패턴(Head First Design Patterns)
이라는 책을 읽어보았다.
GoF (1994) vs Head First (2004)
디자인 패턴과 관련된 가장 유명한 책을 2권 뽑는다면 한 권은 1994년에 발간된 Design Patterns: Elements of Reusable Object-Oriented Software(번역본 제목으로는 GoF의 디자인 패턴) 이고,
나머지 한 권은 2004년에 발간된 Head First Design Patterns 일 것이다.
GoF 디자인 패턴은 최초로 디자인 패턴을 정리한 책이고 매우 다양한 패턴을 카탈로그 형식으로 정리했다는 점에서 유명하지만, 워낙 오래된 책이라 요즘에는 잘 쓰이지 않거나 조금 변형된 패턴들도 수록되어 있다고 알고있다.
반면, Head First 는 가장 자주 쓰이는 디자인 패턴들 위주로 집중적으로 설명하고 있다.
게다가 구어체를 사용하고 있으며, 각 패턴을 설명하기 위해 설정된 스토리가 너무 적절하여 매우 이해하기가 쉽다.
또한, 보통 디자인 패턴과 관련된 설명들은 가끔 너무 추상적이라 초보자에게는 이해가 간듯 안 간듯 할 때가 있는데,
이 책은 질의응답 코너가 있어서 사소할 수도 있는 질문들을 자문 자답하며 많은 궁금증을 해결 해주어 머릿속 개념이 선명해지는 것을 느꼈다.
디자인 패턴을 알아야 하는 이유
보통 소프트웨어를 유지 및 보수하는 데는 소프트웨어를 개발하는 만큼의, 혹은 더 많은 양의 비용과 노력이 들기 때문에 확장성, 혹은 유지 보수성은 매우 중요하다.
디자인 패턴을 잘 활용하면 확장성있는 유연한 소프트웨어를 작성하는데 도움이 된다.
또한, 디자인 패턴을 알면 다른 개발자와 소프트웨어의 설계에 대해 이야기 할 때 장황한 설명 없이 특정 패턴의 이름을 말하는 것만으로도
어떤 구조를 말하는 건지 의도를 빠르고 명확하게 전달할 수 있다는 점에서 커뮤니케이션 실수를 줄이고 생산성을 높이는데 큰 도움이 된다.
게다가 이미 존재하는 수많은 복잡한 시스템이나 프레임 워크, 혹은 API 들은 대부분 디자인 패턴을 활용하여 작성 되었다.
그렇기 때문에 디자인 패턴을 알면 소스 코드를 조금만 훑어봐도 어떤 패턴을 사용하여 구현된건지 금방 눈치 챌 수 있어 큰 그림을 이해하는데 도움이 된다.
그럼 이 책의 구성과 내용을 간략하게 알아보자.
책의 구성 및 내용
이 책은 자주 쓰이는 디자인 패턴 15가지에 대해 구체적으로 설명하는데, 이 15가지 패턴은 다음과 같다.
- Strategy 패턴
- Observer 패턴
- Decorator 패턴
- Factory Method 패턴 & Abstract Factory 패턴
- Singleton 패턴
- Command 패턴
- Adapter 패턴 & Facade 패턴
- Template Method 패턴
- Iterator 패턴 & Composite 패턴
- State 패턴
- Proxy 패턴
- Compound 패턴
부록에서는 상대적으로는 덜 쓰이지만 유명한 패턴 9가지에 대해 간략히 소개한다.
9가지 패턴은 다음과 같다.
- Bridge 패턴
- Builder 패턴
- Chain of Responsibility 패턴
- Flyweight 패턴
- Interpreter 패턴
- Mediator 패턴
- Memento 패턴
- Prototype 패턴
- Visitor 패턴
이 책의 좋은점
이 책은 단순히 여러 디자인 패턴들에 대한 설명만 하는 것이 아니라, 객체지향의 원칙들에 대해 설명하면서
어떤 설계가 좋고, 왜 좋은지 설명해준다. 또한 비슷한 디자인 패턴들을 비교하며 공통점과 차이점에 대해 명확히하며
자칫하면 헷갈릴 수도 있고, 의문이 드는 점들을 잘 해결해준다.
게다가 디자인 패턴이 만능이 아니며, 법칙이 아니라 도구에 불과하다는 조언도 담겨있다.
초보자가 저지르기 쉬운 실수는, 무리하게 디자인 패턴을 사용해서 불필요하게 프로그램의 복잡도를 높이는 것이다.
지금 당장 변경되거나 확장될 여지가 별로 없다면 디자인 패턴을 사용하지 않는 것이 더 좋다.
그리고 굳이 디자인 패턴을 사용하지 않고 단순히 객체 지향 원칙을 적용하는 것만으로도 해결할 수 있는 문제의 경우에도 디자인 패턴을 사용하지 않는 편이 좋다.
이런 내용까지 폭넓게 다루기 때문에 책을 모두 읽었을 때 개발자로서 조금은 성장한 듯한 느낌을 받을 수 있다고 생각한다.
결론
누구든 만약 객체지향 프로그래밍에 대해서 잘 알고 싶다면, 게다가 아직 디자인 패턴을 공부한 적이 없는 사람이라면 개인적으로 꼭 읽어봤으면 하는 책이다.
특히 대학생, 혹은 신입 개발자가 있다면 정말 강력하게 추천하고 싶은 책이다.
참고1: https://github.com/sgc109/design-pattern-study
참고2: https://sgc109.github.io/2020/07/18/compound-pattern-feat-mvc/