서평

[남독] 헤드퍼스트 디자인패턴 (개정판)

작삼심일 2022. 4. 24. 10:18

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

디자인 패턴의 중요성

유능한 개발자가 되는 길은 멀고도 험난한 것 같다. 뭐가 되었든지 간에 그 어렵다던 프로그래밍 언어에 간신히 익숙해지고 나니 자료 구조와 알고리즘이라는 험난한 벽에 가로막혀 한참을 헤매야한다. 이 벽을 돌파해 취업에 성공한다면, 본격적으로 수많은 개발자와 소통하고 대규모 프로젝트에 일원으로 포함되기 위해 또 다른 벽을 마주하게 된다. 특히 이번에 마주하는 벽들은 대게 모호해 보이는 해결책이나, 복잡해 보이는 도식으로 인해 도전하기가 쉽지 않아 보인다. 수많은 사람들과 협력하고, 거대한 프로젝트를 효율적으로 개발하기 위해 필요한 기술이 무엇일까? 물론 소프트웨어 엔지니어링에서 파생된 수많은 패러다임이 있지만 협업을 위해 알아두어야 하는 부분은 바로 디자인 패턴이다. 

소프트웨어 디자인 패턴은 소프트웨어 공학의 소프트웨어 디자인에서 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책이다. 소스나 기계 코드로 바로 전환될수 있는 완성된 디자인은 아니며, 다른 상황에 맞게 사용될 수 있는 문제들을 해결하는 데에 쓰이는 서술이나 템플릿이다. 디자인 패턴은 프로그래머가 애플리케이션이나 시스템을 디자인할 때 공통된 문제들을 해결하는 데에 쓰이는 형식화된 가장 좋은 관행이다.
위키백과 - 소프트웨어 디자인 패턴

디자인 패턴이 소프트웨어 개발에 있어서 왜 중요한지는 위키백과의 설명에서 찾아볼 수 있다. 우선 첫번째로 나오는 것은 '재사용 가능한 해결책'이라는 데에 있다. 개발 과정에 있어서 개발자들은 수많은 문제 상황을 마주하게 된다. 그때마다 머리를 쥐어 짜내어 새로운 해결책을 찾아가는 것은 시간적으로 매우 비효율 적이다. 다행스럽게도 우리 앞에는 수 많은 선배 개발자들이 있고, 그들은 오랜 시간 동안 수많은 문제들을 추상화하여 패턴화 시켜 놓았고 그에 맞는 소프트웨어 디자인까지 만들어 놓았다. 우리의 문제 상황과 맞는 디자인 패턴을 발견한다면, 언제든 적용해 볼 수 있다. 

또한 '형식화 된 가장 좋은 관행' 또한 중요한 의미를 담고 있다. 우리가 마주하는 수많은 문제들은 개발 도메인에 따라 복잡하고 긴 이름을 담고 있다. 매번 그 길고 복잡한 이름을 거론하며 회의 시간에 해결 방법을 논의한다면 회의 시간은 문제 해결보단 이름을 정확하게 부르는데 힘을 쏟게 될 것이다. 개발자들 간의 약속처럼 디자인 패턴에 대해 알고 있다면 "OOO 패턴"이라는 짧고 명확한 이름을 통해 훨씬 효율적인 시간을 보낼 수 있게 될 것이다. 훨씬 전문가처럼 보일 수 있기도 한 것은 덤이다.

이렇게 좋아보이는 디자인 패턴에 장점만 있는 것은 아니다. 디자인 패턴으로 만들 필요가 없는 간단한 문제조차 어떤 패턴을 활용해야 하는지 고민하는 것은 오히려 시간 낭비가 될 수도 있다. 또한 대부분의 디자인 패턴은 객체 지향 프로그래밍에 기초를 두고 있기 때문에 또 다른 패러다임의 개발 방식을 적용하는 데에는 오히려 허들로 작용할 수도 있다. 그 외에도 다양한 문제점들이 있을 순 있지만, 개발자라면 한 번쯤은 디자인 패턴에 대해 공부해보기를 권한다.

헤드퍼스트 디자인패턴

이번 포스팅은 한빛 미디어의 나는 리뷰어다 이벤트를 통해 제공받은 <헤드 퍼스트 디자인 패턴>을 읽고 작성하였다. 이 책은 디자인 패턴을 학습하기 위한 최고의 책인지는 장담할 수 없지만(디자인 패턴에 관해 읽은 책은 이것이 두번째이다) 디자인패턴에 대해 이해가 낮은 나에게는 아주 좋은 학습자료의 역할을 해 주었다.

<헤드 퍼스트 디자인 패턴>은 하나의 패턴에 대해 다양한 방법으로 소개해 주고, 중간중간 이해하는데 도움이 될만한 간단한 퀴즈도 준비해 주었다. 좀 더 자세히 말하면, 하나의 주제에 대해서 아주 구체적인 예시 상황을 먼저 제시해 주고 그에 대한 해결책인 디자인 패턴을 소개해 준다. 작동 예시에 대한 이미지를 두어 작동 원리를 파악하기 쉽게 해 준다. 시니어 개발자와의 QnA 시간을 갖고 난 다음, 디자인 패턴들끼리의 가상 인터뷰를 통해 각 패턴들이 갖는 특징들을 다시 한번 상기시킬 수 있도록 도와주도록 구성되어 있다.

이 책은 하나의 패턴에 대해서 디테일하게 학습하기에 아주 좋은 구성으로 되어 있어 처음 디자인 패턴을 접하는 학습자들에게는 아주 큰 도움이 될 것 같다. 반면 디테일한 내용을 담았기 때문에 수많은 디자인 패턴들을 훑어보면서 필요한 내용만 답습하고자 하는 분들에게는 오히려 이러한 방대한 내용이 방해가 될지도 모르겠다. 만약 수 많은 패턴들 틈 속에서 원하는 부분만 발췌해서 읽어나가길 원한다면, <쉽게 배워서 바로 써먹는 디자인 패턴>을 참고하는 것도 도움이 될 수 있다

추가로 <쉽게 배워서 바로 써먹는 디자인 패턴>은 php 기반이고 <헤드 퍼스트 디자인 패턴>은 java 기반이지만, 디자인 패턴은 객체지향을 지원하는 언어라면 두루두루 써먹을 수 있기 때문에 책 내부의 예제 코드를 훑어보고 어느 정도 읽을만하다고 느낀다면 충분히 도전해볼 만하다고 생각한다.

약 4주간의 리뷰 시간이 주어졌지만, 충분히 책을 이해해나가며 읽기엔 회사일과 육아를 병행하면서 완독 하는 것은 무리였다. 나중에도 시간을 들여가며 java 코드를 c++로 변환해 가면서 책을 충분히 소화시키는 기간을 갖는다면 디자인 패턴을 이해하는데 큰 도움이 될 것 같다.

728x90
반응형