Scientia Conditorium

[책리뷰] 헤드퍼스트 디자인 패턴(개정판) 본문

서평/IT-책

[책리뷰] 헤드퍼스트 디자인 패턴(개정판)

크썸 2022. 10. 2. 17:29

[책리뷰] 헤드퍼스트 디자인 패턴(개정판)

생각보다 두껍다...

 

한줄 요약 : 프로그래머라면 반드시 가지고 있어야 할 교과서

 

 

디자인 패턴 관련 책으로 가장 유명한 것은 'GoF의 디자인 패턴' 일 것이다. 그러나 회사 선배에게도 들었지만 대부분 '헤드퍼스트 디자인 패턴' 책을 더 추천해주신다. 책의 첫 챕터에서는 디자인 패턴을 왜 배워야하고 알아야 하는지를 상황과 코드를 통해 설명해준다. 디자인 패턴 공부를 위해 이 책을 접했다면 옮긴이의 말을 반드시 읽어야 한다. 프로그래머들 중에서 디자인패턴 공부를 숙제처럼 여기고 반드시 해야되는 숙제처럼 여기는 사람들이 종종 있다. 알아두어야 하기는 하지만 의무감을 가질 필요는 없다. 옮긴이의 말에서는 아래와 같이 설명한다.

 

디자인 패턴은 만병통치약이 아니라고!

디자인 패턴이 만병통치약은 아닙니다! 디자인 패턴은 코드를 재사용하고 더 효율적으로 문제 해결을 하기 위한 수단일 뿐니다. 이 사실을 망각해서는 안 된다. '모든 도구는 용도에 맞게, 적절하게 쓰일 때 그 위력을 발휘합니다. 파리를 잡을 때 파리채를 쓰는 게 기관총과 수류탄을 쓰는 것보다 더 나은 것처럼, 디자인 패턴도 어울리지 않는 상황에서 남용하면 역효과만 납니다.' 옮긴이의 말에도 적혀있지만, 디자인 패턴은 이미 프로그래머 선배님들께서 비슷한 문제를 해결하려고 시간과 노력을 투자해서 이것저것 시도해 보고, 그 중에서 가장 효과적이라고 알려진 방법에 이름을 붙여 자리잡은 것이다.

 

프로그래밍 공부를 하다보면 당연한 것에 용어를 붙여 어렵게 보이는게 종종 있다. 예를 들어, 영화관에서 표를 사기 위해서는 줄을 서야한다. 이 때 먼저 줄을 선 순서대로 표를 구입할 수 있다. 당연한 사실이며 자명하다. 즉, 먼저 들어온 순서대로 데이터를 처리한다. 이걸 컴퓨터공학에서 큐(queue)라는 자료구조로 불린다. 큐와 스택을 알아야 하고 어쩌고 저쩌고 등등. 디자인 패턴도 이와 마찬가지다. 개체가 하나만 존재했으면 좋겠는데 어떻게 해야할까? 프로그래밍 배운대로 생성자에 static을 붙이면 되지 않을까?! 이렇게 여러 곳에서 호출하더라도 개체는 하나만 존재하네! 그러나 다른 개발자들에게 이렇게 구현할걸 줄줄이 말하는 건 시간 낭비다. 간단하게 '싱글턴 패턴'을 사용했다! 로 끝낼 수 있는 것이다.

 

정리하자면, 디자인 패턴은 문제 해결을 위한 수단 중 하나다. POCU에서는 디자인 패턴을 배운다고 해서 바로 적용하지 말라고 가르친다. 내 코드가 어떻게 동작하는지 확실하게 알고 난 이후에 적용하라고 한다. 문제를 직면하면 해결 방법을 고민하고 다시 비슷한 문제를 마주치면,  같은 해결 방법을 적용할 때 나만의 해결 도구가 나오기 시작하는 상황에서 디자인 패턴을 봐야지만 도움이 된다고 한다. 디자인 패턴은 정리하는 개념이지 가르치는 것이 아니기 때문이다.

 

책의 장점은 그림과 상황 설명이 많아서 이해하기 쉽다는 것이다. 언어는 자바로 되어있지만 그렇게 어려운 문법을 사용하거나 그런 점을 없다. 따라서 디자인 패턴을 공부해야되는 수준이라면 누구나 쉽게 이해할 수 있을 정도다. 일부 디자인 패턴 책에서는 대충 코드를 보여주면서 '이 패턴을 이런거니 이렇게 쓰면 됩니다' 라고 하는데, 언제 어떻게 적용해야되는지 막막한 감이 있다. 그러나 헤드퍼스트 책에서는 확실히 어떠한 상황에서 효율적으로 적용할 수 있는지 문제와 고민 상황, 한계를 잘 알려준다. 

 

구현 뿐만 아니라 자바 라이브러리도 소개하면서 어디에 어떻게 사용되고 있는지도 자세히 알려준다.

기본적으로 패턴 설계할 때에는 UML을 사용하면서 보여준다. 전체 그림을 보여준다는 점에서 기존과 어떻게 다른지를 한 눈에 파악할 수 있어서 좋다.

자바를 잘 모르더라도 코드 한줄한줄 설명해주면서, 해당 챕터에서 설명하는 디자인 패턴을 사용했을 때 어떻게 동작하는지 매우 친절하게 적혀있다. 비록 자바를 모르기 때문에 다른 언어를 사용하면 구현 방식에는 약간의 차이가 있을지라도 전체적인 큰 틀에서는 동일한 구조와 동작을 하게 될 것이다. 위의 사진들처럼 책은 그림과 구조 설명으로 페이지 수가 엄청나게 많다. 예시 문제도 약 90개나 되기 때문에 방대한 양을 다루기 위해서 쪽수가 많을 수 밖에 없는 것이다. 이 책은 한 번 쭉 정독하고 그만볼 책이 아니다. 한 번씩 생각날 때마다 꺼내서 비슷한 문제에 대해 어떻게 해결하는지 두고두고 봐야되는 책이다. 그렇기 떄문에 프로그래머라면 반드시 가지고 있어야할 교과서라고 정의한 것이다. 디자인 패턴을 효율적으로 사용하기 위해서는 많은 문제들을 접해봐야 하는데 책에서 그런 예제들을 많이 다루기 때문에 이 책 한권으로 대부분의 디자인패턴 책을 대체할 수 있을 것이라 생각한다.

 

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