메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

오래된 내 정보 속 옥의 티를 찾아라(2022.9.22~12.31) / 회원정보 UPDATE하고 선물도 받고!

헤드 퍼스트 디자인 패턴(개정판)

14가지 GoF 필살 패턴! 유지 관리가 편리한 객체지향 소프트웨어를 만드는 법

한빛미디어

번역서

판매중

  • 저자 : 에릭 프리먼 , 엘리자베스 롭슨
  • 번역 : 서환수
  • 출간 : 2022-03-16
  • 페이지 : 656 쪽
  • ISBN : 9791162245262
  • 물류코드 :10526
초급 초중급 중급 중고급 고급
4.9점 (53명)
좋아요 : 20

유지관리가 편리한 객체지향 소프트웨어 만들기!

“『헤드 퍼스트 디자인 패턴(개정판)』 한 권이면 충분합니다!”

 

이유 1. 흥미로운 이야기와 재치 넘치는 구성이 담긴 <헤드 퍼스트> 시리즈!

하나의 패턴에 하나의 이야기를 담았습니다. 틀에 박히지 않아 지루할 틈이 없는 구성과 친구와 이야기하듯 편안한 대화체로 이야기를 풀어냅니다. 이야기 속에 다양한 방법으로 해결할 수 있는 질문과 90개 이상의 연습문제를 담았습니다. 마치 게임 퀘스트를 해결하듯 문제를 하나하나 해결하다 보면 학습한 내용이 머릿속에 강렬하게 남습니다.

 

이유 2. 원스톱으로 배우는 14가지 GoF 핵심 디자인 패턴과 9가지 객체지향 디자인 원칙!

현장에서 자주 사용되는 옵저버, 어댑터, MVC 패턴 등 14가지 GoF 객체지향 패턴을 중점으로 패턴의 정의, 사용 시기, 사용처, 사용 이유, 즉시 디자인에 적용하는 방법을 알려줍니다. 이와 더불어 객체지향 프로그래밍에 광범위하게 적용할 수 있는 OCP, 할리우드 원칙 등 9가지 객체지향 디자인 원칙과 패턴으로 생각하는 방법도 알려줍니다.

 

이유 3. 시대의 변화에 맞춘 개정과 한국 독자만을 위한 특별판!

자바 8과 자바 16 이상에서 무리 없이 동작할 수 있도록 예제 코드를 수정했으며, 부가적인 설명과 Q&A 질문을 추가했습니다. 또한 16여 년 만의 개정을 기념해 오직 한국 독자만을 위한 새로운 삽화를 사용하고 한글 친화적인 구성했습니다. 원서를 읽을 때보다 더욱 편안하게 디자인 패턴을 학습할 수 있습니다.

 

 

이 책을 읽어야 하는 당신!

 

● 소프트웨어 출시는 완벽 그 자체! “어?~ 코드 수정하려고 다시 보니까 난리…”

→ 유지보수만 생각하면 그저 눈물인 주니어 (자바) 개발자

 

● 코딩 실력은 장판파의 장비! “어?~ 팩토리 메소드 패턴을 이렇게 적용했던가?”

→ 디자인 패턴을 다시 한번 살펴보고 싶은 시니어 (자바) 개발자

 

● 혼자 공부해서 다진 프로그래밍 언어 실력! “어?~ 근데 패턴이 뭐야?” 

→ 개발 현장의 소프트웨어 디자인 방법이 궁금한 개발자 지망생

 

 

02. 헤드 퍼스트 디자인 패턴 상세 페이지(940px).jpg

에릭 프리먼 저자

에릭 프리먼

예일대학교 컴퓨터공학 박사 학위를 받고 월트 디즈니에서 CTO로 활동했다. 오라일리 미디어에서 〈헤드 퍼스트〉 시리즈를 총괄하며 『헤드 퍼스트 디자인 패턴』 등 다양한 도서를 집필했다. 현재는 개발자를 대상으로 온라인 학습을 제공하는 WickedlySmart에서 학습 콘텐츠를 제작하고 있다.
엘리자베스 롭슨 저자

엘리자베스 롭슨

예일대학교 컴퓨터공학 석사 학위를 받고 다양한 기술 주제로 개인별 워크숍과 온라인 수업을 제작했으며, 사람들이 기술을 이해하는 데 도움이 될 만한 학습 경험을 만드는 일에 몰두했다. 오라일리 미디어에서 특수 프로젝트 책임자로 활동했으며, 현재는 WickedlySmart의 공동 창업자로 다양한 학습 콘텐츠를 제작하고 있다.
서환수 역자

서환수

서울대학교 물리학과에서 학사, 박사 학위를 받았고 지금은 삼성종합기술원에서 반도체 분야를 연구하고 있다. 한빛미디어에서 『Head First Java』, 『Programming Challenges: 알고리즘 트레이닝 북』, 『프로그래머로 사는 법』, 『슬라이드올로지』를 비롯해 여러 권을 번역했다.

 

이 책에 쏟아진 찬사

독자가 보내는 찬사 

<헤드 퍼스트> 시리즈에 쏟아진 찬사

지은이 소개

<헤드 퍼스트> 시리즈 만든이 소개

옮긴이의 말

 

00장 들어가며 | 이 책을 읽는 방법

__ 이 책의 독자

__ 이 책이 이렇게 된 이유

__ 이 책의 구성

__ 여러분의 두뇌를 정복하는 방법

__ 일러두기

__ 테크니컬 리뷰어

__ 감사의 글

 

01장 디자인 패턴 소개와 전략 패턴 | 디자인 패턴의 세계로 떠나기

__ 오리 시뮬레이션 게임, SimUduck

__ 오리 시뮬레이션 게임 차별화하기

__ 경고! 심각한 문제 발생

__ 상속을 생각하기

__ 인터페이스 설계하기

__ 해결 방법 고민하기

__ 소프트웨어 개발 불변의 진리

__ 문제를 명확하게 파악하기

__ 바뀌는 부분과 그렇지 않은 부분 분리하기

__ 오리의 행동을 디자인하는 방법

__ 오리의 행동을 구현하는 방법

__ 오리 행동 통합하기

__ 오리 코드 테스트 

__ 동적으로 행동 지정하기

__ 캡슐화된 행동 살펴보기

__ 두 클래스를 합치는 방법

__ 첫 번째 디자인 패턴: 전략 패턴 

__ 디자인 패턴 만나기

__ 패턴과 전문 용어

__ 디자인 패턴 사용법 

__ 디자인 도구상자 안에 들어가야 할 도구들

__ 연습문제 정답

 

 02장 옵저버 패턴 | 객체들에게 연락 돌리기

__ 기상 모니터링 애플리케이션 알아보기

__ WeatherData 클래스 살펴보기

__ 구현 목표

__ 기상 스테이션용 코드 추가하기

__ 원칙으로 추가 코드 살펴보기

__ 옵저버 패턴 이해하기

__ 옵저버 패턴의 작동 원리

__ 옵저버 패턴의 정의

__ 옵저버 패턴의 구조

__ 느슨한 결합의 위력

__ 기상 스테이션 설계하기

__ 기상 스테이션 구현하기

__ Subject 인터페이스 구현하기

__ 디스플레이 요소 구현하기

__ 기상 스테이션 테스트

__ 라이브러리 속 옵저버 패턴 알아보기

__ 인생을 바꿀 애플리케이션 만들기

__ 풀 방식으로 코드 바꾸기

__ 업데이트한 기상 스테이션 코드 테스트

__ 디자인 도구상자 안에 들어가야 할 도구들

__ 연습문제 정답

 

03장 데코레이터 패턴 | 객체 꾸미기

__ 초대형 커피 전문점, 스타버즈

__ OCP 살펴보기

__ 데코레이터 패턴 살펴보기

__ 주문 시스템에 데코레이터 패턴 적용하기

__ 데코레이터 패턴의 정의

__ Beverage 클래스 장식하기

__ 데코레이터 패턴 적용 연습

__ 커피 주문 시스템 코드 만들기

__ 음료 코드 구현하기

__ 첨가물 코드 구현하기

__ 커피 주문 시스템 코드 테스트

__ 데코레이터가 적용된 예: 자바 I/O

__ java.io 클래스와 데코레이터 패턴

__ 자바 I/O 데코레이터 만들기

__ 새로 만든 자바 I/O 데코레이터 테스트

__ 디자인 도구상자 안에 들어가야 할 도구들 

__ 연습문제 정답

 

04장 팩토리 패턴 | 객체지향 빵 굽기

__ 최첨단 피자 코드 만들기

__ 피자 코드 추가하기

__ 객체 생성 부분 캡슐화하기

__ 객체 생성 팩토리 만들기

__ 클라이언트 코드 수정하기

__ ‘간단한 팩토리’의 정의

__ 다양한 팩토리 만들기

__ 피자 가게 프레임워크 만들기 

__ 서브클래스가 결정하는 것 알아보기

__ 피자 스타일 서브클래스 만들기 

__ 팩토리 메소드 선언하기 

__ 피자 팩토리 메소드로 피자 주문하기

__ Pizza 클래스 만들기

__ 최첨단 피자 코드 테스트 

__ 팩토리 메소드 패턴 살펴보기

__ 병렬 클래스 계층구조 알아보기

__ 팩토리 메소드 패턴의 정의

__ 객체 의존성 살펴보기

__ 의존성 뒤집기 원칙

__ 의존성 뒤집기 원칙 적용하기

__ 생각 뒤집기

__ 의존성 뒤집기 원칙을 지키는 방법

__ 원재료 종류 알아보기

__ 원재료군으로 묶기

__ 원재료 팩토리 만들기

__ 뉴욕 원재료 팩토리 만들기

__ Pizza 클래스 변경하기

__ 올바른 재료 공장 사용하기 

__ 바뀐 내용 되돌아보기

__ 새로운 코드로 또 피자 주문하기 

__ 추상 팩토리 패턴의 정의

__ 팩토리 메소드 패턴과 추상 팩토리 패턴

__ 디자인 도구상자 안에 들어가야 할 도구들

__ 연습문제 정답

 

05장 싱글턴 패턴 | 하나뿐인 특별한 객체 만들기

__ 리틀 싱글턴 알아보기

__ 고전적인 싱글턴 패턴 구현법

__ 초콜릿 보일러 코드 살펴보기

__ 싱글턴 패턴의 정의

__ 허쉬! 초콜릿 보일러에 문제 발생

__ 멀티스레딩 문제 살펴보기

__ 멀티스레딩 문제 해결하기

__ 더 효율적으로 멀티스레딩 문제 해결하기

__ 문제를 해결하는 적절한 방법 선택하기

__ 디자인 도구상자 안에 들어가야 할 도구들

__ 연습문제 정답

 

06장 커맨드 패턴 | 호출 캡슐화하기

__ 만능 IoT 리모컨

__ 협력 업체 클래스 살펴보기

__ 커맨드 패턴 소개

__ 음식 주문 과정 자세히 살펴보기

__ 객체마을 식당 등장인물의 역할

__ 객체마을 식당과 커맨드 패턴

__ 첫 번째 커맨드 객체 만들기

__ 커맨드 객체 사용하기

__ 커맨드 패턴의 정의

__ 커맨드 패턴 클래스 다이어그램 살펴보기

__ 슬롯에 명령 할당하기

__ 리모컨 코드 만들기

__ 커맨드 클래스 만들기

__ 리모컨 테스트

__ API 문서 만들기

__ 작업 취소 기능 추가하기

__ 작업 취소 기능 테스트

__ 작업 취소 기능을 구현할 때 상태를 사용하는 방법

__ 선풍기 명령어에 작업 취소 기능 추가하기

__ 선풍기 테스트 코드 만들기

__ 선풍기 코드 테스트

__ 여러 동작을 한 번에 처리하기

__ 매크로 커맨드 사용하기

__ 커맨드 패턴 활용하기

__ 커맨드 패턴 더 활용하기

__ 실전 적용! 커맨드 패턴

__ 디자인 도구상자 안에 들어가야 할 도구들 

__ 연습문제 정답

 

07장 어댑터 패턴과 퍼사드 패턴 | 적응시키기

__ 어댑터 살펴보기

__ 객체지향 어댑터 알아보기

__ 어댑터 사용 방법 알아보기

__ 오리 어댑터 테스트

__ 어댑터 패턴 알아보기

__ 어댑터 패턴의 정의

__ 객체 어댑터와 클래스 어댑터

__ 실전 적용! 어댑터 패턴

__ Enumeration을 Iterator에 적응시키기

__ 퍼사드 패턴 맛보기

__ 홈시어터 만들기

__ 복잡한 방법으로 영화 보기

__ 퍼사드 작동 원리 알아보기

__ 홈시어터 퍼사드 만들기

__ 단순화된 인터페이스 만들기

__ 편한 방법으로 영화 보기

__ 퍼사드 패턴의 정의

__ 최소 지식 원칙

__ 친구를 만들지 않고 다른 객체에 영향력 행사하기

__ 절친에게만 메소드 호출하기

__ 퍼사드 패턴과 최소 지식 원칙

__ 디자인 도구상자 안에 들어가야 할 도구들

__ 연습문제 정답

 

08장 템플릿 메소드 패턴 | 알고리즘 캡슐화하기

__ 커피와 홍차 만들기

__ Coffee 클래스와 Tea 클래스 만들기

__ Coffee 클래스와 Tea 클래스 추상화하기

__ 추상화 방법 들여다보기

__ prepareRecipe( ) 메소드 추상화하기

__ 커피와 홍차를 만드는 과정 다시 살펴보기

__ 템플릿 메소드 패턴 알아보기

__ 템플릿 메소드 패턴의 장점 알아보기

__ 템플릿 메소드 패턴의 정의

__ 템플릿 메소드 속 후크 알아보기

__ 후크 활용하기

__ 후크 코드 테스트

__ 할리우드 원칙

__ 할리우드 원칙과 템플릿 메소드 패턴

__ 자바 API 속 템플릿 메소드 패턴 알아보기

__ 템플릿 메소드로 정렬하는 방법

__ 오리 정렬하기

__ 오리 대소 비교

__ 오리 정렬 코드 테스트

__ 템플릿 메소드로 그래픽 출력하기

__ AbstractList로 나만의 리스트 만들기

__ 디자인 도구상자 안에 들어가야 할 도구들

__ 연습문제 정답

 

09장 반복자 패턴과 컴포지트 패턴 | 컬렉션 잘 관리하기

__ 속보! 객체마을 식당과 팬케이크 하우스 합병

__ 메뉴 항목 살펴보기

__ 루와 멜의 메뉴 구현법 비교하기

__ 자격 요건 구현하기: 1차 시도

__ 반복을 캡슐화하기

__ 반복자 패턴 알아보기

__ 객체마을 식당 메뉴에 반복자 추가하기

__ 객체마을 식당 메뉴에서 반복자 사용하기

__ 종업원 코드에 반복자 적용하기

__ 종업원 코드 테스트

__ 반복자 패턴의 특징 알아보기 

__ 통합 식당 코드 다시 살펴보기 

__ 인터페이스 개선하기

__ java.util.Iterator 적용하기

__ 변경된 통합 식당 코드 살펴보기

__ 반복자 패턴의 정의

__ 반복자 패턴의 구조 알아보기

__ 단일 역할 원칙

__ Iterable 인터페이스 알아보기

__ 향상된 for 순환문 알아보기

__ 향상된 for 순환문 사용 시 주의사항

__ 객체마을 카페 메뉴 살펴보기

__ 객체마을 카페 메뉴 코드 고치기

__ 종업원 코드에 카페 메뉴 추가하기

__ 카페 메뉴까지 추가된 통합 식당 코드 테스트 

__ 반복자와 컬렉션

__ 종업원 코드 개선하기

__ 리팩터링 준비하기

__ 컴포지트 패턴의 정의

__ 컴포지트 패턴으로 메뉴 디자인하기

__ 메뉴 구성 요소 구현하기

__ 메뉴 항목 구현하기

__ 메뉴 구현하기

__ 종업원 코드에 컴포지트 적용하기

__ 메뉴 코드 테스트

__ 메뉴 코드 테스트 결과

__ 디자인 도구상자 안에 들어가야 할 도구들

__ 연습문제 정답

 

10장 상태 패턴 | 객체의 상태 바꾸기

__ 최첨단 뽑기 기계

__ 상태 기계 기초 지식 알아보기

__ 뽑기 기계 코드 만들기

__ 뽑기 기계 코드 테스트

__ 알림! 뽑기 기계 코드 수정 요청

__ 요청 사항 살펴보기

__ 새로운 디자인 구상하기

__ State 인터페이스 및 클래스 정의하기

__ State 클래스 구현하기

__ 뽑기 기계 코드 수정하기

__ 뽑기 기계 전체 코드 살펴보기

__ 다른 상태 클래스 구현하기

__ 뽑기 기계 구조 다시 살펴보기

__ 상태 패턴의 정의

__ 보너스 알맹이 당첨 기능 추가하기

__ 데모 버전 돌려보기

__ 정상성 점검하기

__ 리필 기능 추가해보기

__ 디자인 도구상자 안에 들어가야 할 도구들

__ 연습문제 정답

 

11장 프록시 패턴 | 객체 접근 제어하기

__ 모니터링 코드 만들기

__ 모니터링 기능 테스트

__ 원격 프록시의 역할

__ 모니터링 코드에 원격 프록시 추가하기

__ 원격 메소드의 기초

__ 메소드 호출 과정 알아보기

__ 자바 RMI의 개요

__ 원격 서비스 만들기

__ 1단계: 원격 인터페이스 만들기

__ 2단계: 서비스 구현 클래스 만들기 

__ 3단계: rmiregistry 실행하기

__ 4단계: 원격 서비스 실행하기

__ 서버에 필요한 코드 살펴보기 

__ 클라이언트 코드 살펴보기

__ 뽑기 기계용 원격 프록시 고민하기

__ GumballMachine 클래스를 원격 서비스로 바꾸기

__ RMI 레지스트리 등록하기

__ GumballMonitor 클라이언트 코드 고치기

__ 새로운 모니터링 기능 테스트

__ 데모 버전 만들기

__ 데모 버전 돌려보기

__ 프록시 패턴의 정의

__ 원격 프록시와 가상 프록시 비교하기

__ 앨범 커버 뷰어 만들기

__ 앨범 커버 가상 프록시 설계하기

__ ImageProxy 코드 만들기

__ 앨범 커버 뷰어 테스트

__ 보호 프록시 만들기

__ 객체마을 데이팅 서비스

__ Person 인터페이스 코드 만들기

__ Person 인터페이스용 동적 프록시 만들기

__ 1단계: InvocationHandler 만들기

__ 2단계: 동적 프록시 생성 코드 만들기

__ 데이팅 서비스 코드 테스트

__ 데이팅 서비스 코드 테스트 결과

__ 실전! 프록시 동물원 탐방하기

__ 디자인 도구상자 안에 들어가야 할 도구들

__ 연습문제 정답

__ 준비된 코드: 앨범 커버 뷰어 코드 

 

12장 복합 패턴 | 패턴을 모아 패턴 만들기

__ 패턴 섞어 쓰기

__ 오리 시뮬레이션 게임에 다양한 패턴 적용하기

__ 바뀐 내용 되돌아보기

__ 오리 시뮬레이션 게임 클래스 다이어그램 살펴보기

__ 복합 패턴의 왕 알현하기

__ 모델-뷰-컨트롤러 알아보기

__ 모델-뷰-컨트롤러 조금 더 알아보기

__ 모델-뷰-컨트롤러에 사용되는 패턴 알아보기 

__ 모델-뷰-컨트롤러로 BPM 제어 도구 만들기

__ 모델, 뷰, 컨트롤러 합쳐서 보기

__ 모델, 뷰, 컨트롤러 만들기

__ 모델 만들기

__ 뷰 알아보기

__ 뷰 만들기

__ 컨트롤러 만들기

__ 컨트롤러 코드 살펴보기

__ 모델, 뷰, 컨트롤러 코드 합치기 

__ MVC 속 전략 패턴 자세히 알아보기

__ 심박 모니터 모델 적응시키기

__ 심박 모니터 컨트롤러 만들기

__ 심박 모니터 코드 테스트

__ 디자인 도구상자 안에 들어가야 할 도구들

__ 연습문제 정답

__ 준비된 코드: BPM 제어 도구 코드 

 

13장 실전 디자인 패턴 | 패턴과 행복하게 살아가기

__ 디자인 패턴의 정의

__ 디자인 패턴의 정의 자세히 살펴보기

__ 새로운 디자인 패턴 발견하기

__ 디자인 패턴 분류하기

__ 디자인 패턴 범주 알아보기

__ 패턴으로 생각하기

__ 패턴을 대하는 마음가짐

__ 전문 용어의 위력 되새기기

__ 4인방과 함께 하는 객체마을 여행

__ 패턴을 찾아 떠나기 

__ 실전! 패턴 동물원 탐방하기

__ 사악한 안티 패턴 섬멸하기

__ 디자인 도구상자 안에 들어가야 할 도구들 

__ 객체마을을 떠나며

__ 연습문제 정답

 

14장 기타 패턴 | 다양한 패턴 빠르게 알아보기

__ 브리지 패턴

__ 빌더 패턴

__ 책임 연쇄 패턴

__ 플라이웨이트 패턴

__ 인터프리터 패턴

__ 중재자 패턴

__ 메멘토 패턴

__ 프로토타입 패턴

__ 비지터 패턴

 

찾아보기

경력과 세대를 넘어 오랫동안 

객체지향 개발자의 성장을 도와준 

디자인 패턴 교과서의 화려한 귀환!


✔︎ 2005년부터 디자인 패턴 도서 분야 부동의 1위

✔︎ 디자인 패턴의 고전이자 바이블

 

 

● 디자인 패턴은 선배들의 경험이 담긴 문제 해결 방법입니다

예로부터 건물을 지을 때는 사전 설계가 중요했습니다. 어떤 문제나 수정 사항이 발생했을 때, 하나하나 시행착오를 겪으면서 다시 짓기에는 시간과 비용이 많이 들기 때문입니다. 사람들은 같은 실수를 반복하지 않기 위해 자신들의 시행착오를 바탕으로 특정 상황에서 발생하는 문제의 패턴을 발견하고 해결방안을 기록으로 남겼습니다. 이를 ‘디자인 패턴’이라고 부릅니다.

 

건축학에서 시작된 디자인 패턴은 코드로 소프트웨어를 구축한다는 점에서 소프트웨어 설계에도 동일하게 적용할 수 있습니다. 누군가‘가’ 겪은 문제가 누군가‘만’ 겪은 문제는 아니므로 동일한 문제를 먼저 경험한 선배들의 지식을 활용한다면 소프트웨어 설계의 효율을 추구할 수 있습니다.

 

● 디자인 패턴은 시간과 노력을 줄여 줍니다

세상에 완벽한 소프트웨어는 없습니다. 시대에 따라 기술과 사용자의 요구가 변하기 때문입니다. 프로그래밍을 할 때 항상 ‘지금 이 소프트웨어를 언젠가는 고쳐야 한다’라고 생각해야 합니다. 사전에 소프트웨어를 고칠 때 코드에 미치는 영향을 최소화할 수 있도록 디자인한다면 자질구레한 코딩에서 벗어나 더 좋은 소프트웨어를 만드는 데 더 많은 시간을 투자할 수 있습니다. 

 

디자인 패턴의 유용성은 단지 선배들의 코드를 ‘재사용’하는 것에 그치지 않습니다. 팀을 이끌며 프로젝트를 진행하고 다양한 형태로 발생할 수 있는 문제를 해결하는 데도 적용할 수 있습니다. ‘디자인 패턴’에 관한 조예가 깊다면 적재적소에 맞는 해결책을 효율적으로 제시할 수 있으며, “자신에게 귀를 기울이고 있는 모든 객체를 추적할 수 있고, 새로운 데이터가 들어올 때마다 각각의 청취자한테 메시지를 보내 주며, 청취자는 언제든지 청취자 목록에 참가하거나 탈퇴할 수 있는 방송용 클래스라는 걸 만들어서 이 문제를 해결하자!”라고 길게 설명할 필요 없이 “옵저버 패턴을 쓰자!"라는 한 문장으로 효율적인 의사소통을 할 수 있습니다. 

 

● 디자인 패턴은 용도에 맞게 적절하게 사용해야 하는 도구입니다

하지만 디자인 패턴이 만병통치약은 아닙니다. 빈대를 잡으려고 초가삼간을 다 태우면 안되는 것처럼 패턴을 아무 코드에나 적용해서는 안 됩니다. <Hello, World!> 같은 프로그램에까지 패턴을 적용하면 오히려 코드가 복잡해지고, 남들이 알아보기 힘들어지고, 유지보수가 어려워져 결국 파국에 이르기 때문입니다. 디자인 패턴은 좋은 소프트웨어를 만드는 도구일 뿐입니다. 모든 도구는 용도에 맞게 적절하게 사용할 때 그 위력을 발휘합니다. 

 

사실 어떤 코드에 디자인 패턴을 써야 하는지 배우려면 많은 시간과 노력이 필요합니다. 디자인 패턴을 완전히 이해해야만 어떤 코드가 스파게티 코드인지 알 수 있기 때문입니다. 하지만 디자인 패턴의 핵심 요소만 쏙 뽑아서 알려주고, 재미있게 설명해 주는 책이 있다면 어떨까요? 적은 시간과 노력으로 디자인 패턴을 배울 수 있어서 행복하지 않을까요? 그런 책을 멀리서 찾을 필요는 없습니다. 『헤드 퍼스트 디자인 패턴(개정판)』이 바로 여기 있으니까요. 

 

 

▶ 『헤드 퍼스트 디자인 패턴(개정판)』에서 다루는 내용

 

『헤드 퍼스트 디자인 패턴』은 2005년 출간 후 17년이라는 시간 동안 디자인 패턴 분야에서 부동의 베스트셀러 1위를 지켜왔습니다. 경력과 세대를 넘어 많은 개발자에게 사랑받는 이유는 다음과 같이 ‘GoF 디자인 패턴의 핵심’만을 다루는 데 있습니다. 

 

✔︎ 14가지 GoF 핵심 패턴의 사용 시기와 이유!

✔︎ 즉시 디자인에 적용하는 방법!

✔︎ 쓰지 말아야 하는 상황!

✔︎ 패턴의 근간이 되는 객체지향 디자인 원칙!

✔︎ 그 밖에 알아 두면 좋은 9가지 패턴의 정의와 사용법!

 

 

▶ 『헤드 퍼스트 디자인 패턴(개정판)』에서 달라진 점

 

✔︎ 보편적으로 사용하는 자바 8부터 최신 버전인 자바 16 이상에서 무리 없이 동작할 수 있게 예제 코드 수정

✔︎ 부가 설명과 Q&A 질문 추가 

✔︎ 한국 독자만을 위한 새로운 삽화와 한글 친화적인 구성

 

* 16여 년 만의 개정을 기념해 초판보다 편안하게 디자인 패턴을 학습할 수 있도록 새로운 한국어판을 만들었습니다.

 

 

▶<헤드 퍼스트> 시리즈의 특징

 

그리고 디자인 패턴을 지루하지 않은 방법으로 배우는 것도 정말 중요합니다. <헤드 퍼스트> 시리즈를 한 권이라도 읽어 보았다면 이 책이 어떤 책인지 쉽게 짐작할 수 있을 겁니다. ‘볼 거리가 많고, 머릿속에 쏙쏙 들어오는 방식’으로 구성되어 있어 머리가 먼저 반응합니다. 

 

✔︎ 친구와 이야기하는 듯한 편안한 대화체!

✔︎ 예상하기 어려운 재치 넘치는 구성!

✔︎ 90개가 넘는 도전적인 연습문제!

✔︎ 여러 관점에서 생각해 볼 수 있는 흥미로운 이야기!

✔︎ 빠르게 따라해 볼 수 있는 간단한 예제 코드!

 

이 밖에 패턴 중독을 피하는 방법과 디자인 패턴을 발견하는 방법도 다루고 있어 미래의 패턴 디자이너에게도 도움이 될 것입니다.

 

 

예제 파일 다운로드

 

     → https://www.hanbit.co.kr/src/10526

     → https://wickedlysmart.com/head-first-design-patterns

 

 

관련 도서

  • 『이것이 자바다』(한빛미디어, 2015)
  • 『혼자 공부하는 자바』(한빛미디어, 2019)
  • 『이것이 C#이다』(한빛미디어, 2021)
  • 『쉽게 배워 바로 써먹는 디자인 패턴』(한빛미디어, 2020)
  • 『머신러닝 디자인 패턴』(한빛미디어, 2021)

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

 

1.    장점

A.    객체를 설계하는 방법부터 확장하는 방법까지 각종 패턴들을 알려주어 OOP 프로그래밍을 입문하고 프로젝트를 해보려는 사람들이 읽으면 좋음

B.     문제에 대한 그림과 쉬운 예제로 왜 이러한 패턴이 적용되는지가 머리에 쉽게 와 닿음

C.     각각의 패턴에 대해서 장단점을 확인할 수 있음

2.    단점

A.    없음

3.    후기

 

A.    해당 책은 자바로 진행이 되는데 굳이 메인 프로그래밍언어가 자바가 아니더라도 쉽게 접근할수 있도록 프로그래밍 설명부분이 친절하게 적용이 되어 있다. 특히 학교 수업에서도 OOP프로그래밍만 배웠지 디자인 패턴을 배운 적이 없어 처음 프로젝트에서 점점 확장 시킬 때 애를 먹은 경험이있는데 해당 책을 보면서 왜 이러한 패턴이 적용되는지를 명쾌하게 적혀 있어 머리속으로 이해가 쉬워 굳이 따라 치지 않더라도 책 읽듯이 넘어 갈수 있는게 이 책의 장점 이라고 생각한다.

 

 

KakaoTalk_20221005_102917157.jpg

 

 



C++ 이후 하이레벨 언어 입문을 헤드퍼스트 고를 통해 했었다. 처음에는 구어체 방식의 설명방식이 익숙치 않았지만 어느새 그 흐름에 빠져들었고 딱딱한 문어체로 쓰인 타 기술서적보다 읽고난 후 머리에 남는 내용이 신기하게도 많았던 기억이 있다.

 

 

학생 시절에는 그저 되는대로 코드를 짜서 빠르게 기능을 구현하는 것이 대부분이었는데 회사에 들어가서 이런 습관으로 인해 적지않은 낭패를 볼 때가 많았다. 실제 구현체들이 직접적으로 들어가는 것들이 아닌 모든 함수, 클래스 메서드들이 인터페이스를 기반으로 느슨하게 결합된 상태로 구성되어 있어서 처음에는 코드 흐름 자체를 따라가는 것도 어려웠다.

 

이런 어려움을 겪는 와중에 이번 리뷰도서로 헤드퍼스트 디자인패턴이 있는 것을 보았다. 이전에 헤드퍼스트 시리즈를 활용해 효율적으로 지식을 습득한 경험이 있는 나는 주저없이 해당 도서를 리뷰도서로 선정하였다.

 

 

역시 헤드퍼스트 시리즈는 기대를 저버리지 않았다. 현업에서 들어가서 많이 보았던 Strategy, Observer, Decorator, Factory, Adapter, Proxy 패턴에 대해 이보다 더 쉽게 설명할 수 없을 정도로 기술되어 있었다. 내용 설명이 좀 추상적인 경우 예제 코드를 보면 바로 직관적으로 이해할 수 있었고 현업에서 자주 사용 중인 Go와 TS에 맞게 적용하는 것에도 큰 어려움이 없었다.

 

기술도서의 경우 가끔 번역이 너무 이상하게 되어 있어서 오히려 원서를 찾아보게 되는 경우가 있는데 해당 도서의 경우 큰 의미 이탈없이 술술 읽을 수 있을 정도로 번역이 매끄럽게 되었다.

 

 

프로그래밍은 어느 정도 익숙하지만 재사용성 있는 코드, 구조화된 코드에 대해 고민을 하고 있는 저연차 주니어 개발자들에게 해당 도서를 강력 추천하는 바이다.

 

 

 

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



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

 

 

 

TLDR;
 구관이 명관이다. 디자인 패턴 책 중에 이 책이 최고인지는 모르겠지만 상위권에 속하는 책임을 확신한다.

 

헤드퍼스트 디자인패턴. 개발자(혹은 개발자를 지망하는사람)치고 이 책을 모르는 사람이 있을까 싶다. 나 역시 '디자인패턴' 이라는 키워드를 안 이후에 여러 검색과정을 거처서 '헤드퍼스트 디자인패턴'을 구매하고 읽었다. 그게 벌서 10년전 정도이다. 한빛미디어의 나는 리뷰어다 도서중 헤드퍼스트 디자인패턴 개정판이 나왔을때 나는 망설임 없이 바로 신청했다.

 안그래도 디자인패턴 복습을 좀 하고싶었는데 개정판이 나왔다니. 선택을 안할 수 없었다. 내용은 워낙 탄탄하니 말할것도 없긴 하지만 도서 리뷰이다보니 잠시 언급 해 보자면 가장 기본적이고 단순한 패턴부터 시작해서 실무에서 많이 사용하는 패턴으로 점진적으로 나아가는 방식이다. 개발을 좀 해봤다면 초반부분의 패턴들의 예제에서 이상함(비효율성)을 느끼게 되는데 그부분들은 후반에 나오는 패턴에서 개선 할 것이라는 언급이 있기때문에 독자로 하여금 불안함을 생기지 않도록 해 준다.

이번에 책을 다시 읽으면서 가장 좋았던점은 이전 버전의 단점이 보완되었단 점이다. 이전 버전의 경우 책의 구성이 좀 번잡하다는 생각이 들어서 집중하기 약간 어렵단 생각이 들었었다. 물론, 대화형 으로 풀어나간다던가 내용에 나오는 화살표 설명(?) 들이 설명에 많은 도움이 되긴 하지만 당시엔 너무 번잡하다는 생각을 지울 수 없었다. 하지만 이번 개정판에서는 훨씬 정갈하고, 분리된상태로 편집이 되어 있어서 책을 읽는데 집중을 하기가 좋았다. 헤드퍼스트 특유의 설명방식을 잘 살리면서 깔끕하게 정리를 해 준 덕분에 내용상의 차이는 크게 없지만, 훨씬 읽기 좋고 이해하기 좋은 책이 되었다.

디자인 패턴을 처음 공부하기 위한사람이나, 나처럼 복습하기위한 사람 모두에게 아주 추천할만한 책이다. 

 

출처: https://devms.tistory.com/579 [요가하는프로그래머:티스토리]

헤드퍼스트 디자인패턴

 

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

1. Why, How를 생각하기에 좋습니다.

* 어떠한 내용에 대해 공부하기전에 문제 상황을 제시합니다. 그리고 이때 당신이라면 어떻게 할 것인지, 어떤 방식으로 접근할 것인지 물어봅니다.

* 일반적인 책 이라면 이런 문제점이 있고, 이를 해결하기 위해 이게 등장했다 라는 플로우로 단순히 읽고 받아들이는 정도라면, 이책의 경우는 어떤 문제를 주고 이에 대한 해결책을 바로  확인하기 이전에 어떻게 해결하면 좋을지 스스로 고민해보는 시간을 가질 수 있습니다.

 

2. 점진적인 학습이 가능합니다.

* 그림과 도표들이 많이 등장합니다. 그러나 이는 한 가지 메인 상황에서 점점 뿌리를 키워나가는 그림과 도표가 되며, 이에 대한 반복으로 인해 점진적인 학습을 할 수 있습니다.

* 이책도 다양한 상황에서 문제를 해결하는게 아니라, 가벼운 상황에서 문제를 해결하고, 문제를 더 복잡한 상황을 제시하고 해결하면서 이 안에서 유사한 그림과 도표를 통해 개념을 숙지하게 도와주는 책 입니다.

 

GOF의 디자인 패턴이 어려운 분이라면, 이책으로 우선 접근해 보시는 것을 추천드립니다.

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다...만진심이 담겨있습니다.허위 사실 유포는 일절 없음.

 

나의 첫 헤드퍼스트 시리즈. 게다가 '헤드퍼스트 디자인패턴 개정판'은 초판 이후 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의 디자인패턴` 이다. 이 책과 함께 디자인패턴 계의 바이블로 불리울 책이 자바 기반의 언어로 출시된다. 그 책이 헤드퍼스트 디자인패턴 이다.

 

다루는 내용

다루는 내용은 개정판 이전과 거의 동일하다.

  • 14가지 GoF 핵심 패턴의 사용 시기와 이유!
  • 즉시 디자인에 적용하는 방법!
  • 쓰지 말아야 하는 상황!
  • 패턴의 근간이 되는 객체지향 디자인 원칙!
  • 그 밖에 알아 두면 좋은 9가지 패턴의 정의와 사용법!

 

헤드 퍼스트 디자인 패턴(개정판) 에서 달라진 점

이 개정판은 새로운 한국어 판으로 개정되어 출시되었다. 조금 더 한국 개발자들에게 친숙하도록 수정되고 구성되었다. 물론 새로운 패턴이 추가되거나 삭제되거나 하는 큰 변경은 존재하지 않는다. (당연하다, 수십년동안 쌓여온 지식의 패턴이 쉽게 변경되진 않을 것이다.)

  • 보편적으로 사용하는 자바 8부터 최신 버전인 자바 16 이상에서 무리 없이 동작할 수 있게 예제 코드 수정
  • 부가 설명과 Q&A 질문 추가
  • 한국 독자만을 위한 새로운 삽화와 한글 친화적인 구성

 

헤드퍼스트를 추천하는 이유

헤드퍼스트는 전 세계의 개발자들에게 찬사를 받은 책이다. 디자인패턴 계의 고전이자 바이블로도 불리우는 책은 그 이유가 있을 것이다.

패턴에 대해 설명하고 코드만을 제시하는 것이 아니다. 왜 이러한 패턴이 필요하게 되었는지 많은 개발자들이 마주했던 여러 문제들을 실제로 책에서 제시한다.

1) 기본에 충실한 지침서

 

 

헤드퍼스트 디자인 패턴 개정판은 기존의 헤드퍼스트 디자인패턴에서 보았던 우수한 내용들이 그 이상으로 향상되어 포함되어 있다고 생각하면 된다. 당연히 많은 초보개발자들이 선택했던 이유는 고스란히 담겨있다. 기본에 가장 충실하면서도 재밌게 공부할 수 있는 요소들은 그대로라는 의미이다.

2) 딱딱하지 않은 지침서

다른 도서와 동일하게 UML, 코드, 예시 프로젝트를 제공한다. 하지만 가장 큰 차이는 다양한 일러스트를 통한 이미지 친화적인 도서일 것이다.

 

 

이미지 친화적인 도서는 글로만 읽고 이해하는 것보다 더욱 따른 이해도를 제공한다. 또한 서술식이 아닌 등장인물을 통한 대화식은 더욱 가볍게 지식을 습득할 수 있도록 제공한다.

3) 연습문제

도서에서 제공하는 내용만으로는 단편적인 부분만 이해할 수 밖에 없다. 스스로 문제를 겪어 부딪히며 생각하면서 더욱 성장할 수 있는데, 초보 개발자들은 그런 과정과 기회를 접하기 어렵다. 하지만 해당 도서는 90가지 이상의 연습문제를 제공한다. 해당 문제를 가벼운 빈칸 채우기부터 많은 고민이 필요한 상황 제시까지 문제로 제공한다.

 

 

가장 추천하는 문제는 '뇌단련' 문제들이다. 고민의 고민을 거듭해볼 것을 추천한다. 문제가 너무 쉽다고 넘어가지 말고 해당 문제를 다시 한번 고민해보자. 그리고 코드 작성이 필요하다면 꼭 작성해보고 나의 솔루션에 빈틈은 없는지도 다시 한번 체크해보자.

 

어떻게 공부하면 좋은가

헤드퍼스트는 여러 문제들을 책에서 제시한다고 설명하였다. 그 문제들을 읽고 해결책을 보는 것이 아니라 책을 잠시 덮고 해당 문제를 해결하기 위한 솔루션을 고민하고 제시하고 코드로 작성해보자. 해당 코드가 실제로 객체지향적으로 구현되었고, SOLID 원칙을 잘 준수하고 있는지 확인해보자. 그리고 해답을 보는 것을 추천한다.

이러한 과정을 통해 설계하는 생각하는 힘과 객체지향에 대한 이해도가 한층 높아질 것이다. 그리고 책에서 제시해준 패턴과 본인의 솔루션을 꼭 비교 분석해보자. 왜 나의 솔루션보다 책에서 제시한 해결책이 나은지 비교를 하는 습관을 들이자. 이 습관과 고민의 시간과 과정들이 더 나은 개발자가 될 것이라 믿는다.

 

결론

무슨 말이 필요할까. 헤드퍼스트 디자인패턴 이라는 도서 제목 하나만으로 모든 설명이 다 되었다고 생각한다. 초보 개발자, 처음 디자인패턴을 접하게되는 개발자라면 무조건 입문서로 추천한다.

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

 

자바 개발자라면 한번쯤 들어보았을 디자인패턴에 관한 책이다.

오래 전부터 개발자 선배들이 겪었던 여러 시행착오를 특정 상황에서 발생하는 문제 패턴에 대한 해결방안을 모아두어 자바 개발자라면 반드시 읽어보아야 할 책으로 꼽힌다.

 

​나도 신입 개발자 시절 디자인 패턴에 대해 들어보았고, 한번 읽어본 적이 있다.

그 당시에는 이 내용들이 많이 어렵게 느껴졌었는데, 개발 경력을 쌓아오고 있는 지금에서 다시 한번 읽어보니 당시 어렵게 느껴졌던 내용들이 이해하기 어렵지 않게 느껴졌다.

 

​처음 읽었을 때도 지금도 느끼는 것이지만 디자인 패턴을 익혀두면 애플리케이션을 개발하는데 경험하는 여러 문제와 수정사항들을 줄여나갈 수 있다고 생각한다.

 

​이 책은 하나하나의 패턴에 대해 발생할 수 있는 여러 상황을 해결하며 작동 원리를 이해하는 데에 도움을 주며, 핵심 패턴이 무엇이고 어떻게 적용해야 하는 지에 대해서 요점을 익힐 수 있다.

또한 공부한 패턴을 어떻게 활용할 수 있는 지에 대해서 생각해볼 수 있다는 점에서 실무에서 비슷한 상황에 패턴을 적용해보도록 도움을 준다.

그리고 많은 연습문제를 통해서 이 책에서 익힌 패턴들을 적용해볼 수 있다.

특히 이번 개정판은 실무에서 주로 쓰이는 자바 8~16 이상 버전에서 실행할 수 있도록 수정되었다고 하니 예제 코드를 실행하고 실습하는 데에 어려움은 없을 것이다.

이런 명서가 견고한 시스템을 만드는 데에 여러 개발자들에게 도움이 된다는 점에서 그간 나도 여러 상황에서 도움을 받았던 것 같다.

​아직 디자인 패턴에 대한 책을 읽어보지 못한 분들이나 깊이 있는 공부가 필요한 모든 개발자분들에게 추천한다.

 

대부분의 책들은 개념서같이 설명을 주로 해주는 책이다라는 생각이 나는 책들만 있는데 오라일리 헤드퍼스 책은 주로 그림과 함께 재미있게 볼 수 있는 책이라 가독성과 쉽게 이해하고 웃으면서 볼 수 있어서 너무 좋은 시리즈라 생각된다. ​ 그렇다고 전문성이 떨어지지 않는다. 정확한 내용을 이해하기 쉽게 풀어놓고 있다. 복잡한 것이 간단해질 수 있고, 간단한 것이 복잡해질 수 있는 패턴을 볼 수있어 흥미롭다. 디자인패턴을 가장 효과적으로 소개를 하고 있는데 유머와 훌륭한 예제, 그리고 디자인패턴에 관한 깊이 있는 지식을 골고루 섞어서 재미있게 공부할 수 있게 만들어졌다. ​ 디자인패턴을 이해하면 재사용과 유지관리가 편리한 고품질 소프트웨어를 만들 수 있고 전반적인 문제해결능력이 향상된다. 그러도록 이 책은 패턴마다 하나의 스토리를 만들어 그 스토리에 맞는 패턴을 찾고 적용해보는 과정에서 자연스럽게 패턴을 이해할 수 있도록 구성되어있어서 그 스토리를 따라하다보면 디자인패턴을 재미있고 쉽게 내 것으로 만들수 있다. 나아가 패턴과 패턴을 합쳐서 사용하는 복합패턴까지 설명하고 있기때문에 심화된 내용도 응용할 수 있는 기반을 만들어 준다. 다른건 다 떠나서 입문서로는 최고의 책이다. 책이 일단 재미있고 지루하지 않아서 접근하기 너무 좋다. 진짜진짜 추천한다. 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

	

말이 필요없는 헤드퍼스트의 유명한 책인 디자인패턴의 개정판이다.

그림과 예제 설명 등으로 쉽게 GoF 디자인 패턴을 설명하여 객체지향 설계 및 시스템 유지보수를 쉽게 할 수 있는 코드를 작성 하도록 도움을 줄 수 있는 책으로 개발 및 유지보수를 하는 개발자에게 필독서라 할 수 있을 듯 하다.

> 진행에 앞서

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

 

> 책에 대한 간단한 정보

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

무려 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의 핵심 패턴을 다루었으며, 재치넘치는 설명, 틀에 박히지 않은 구성 모두 이 책에 대한 요약을 제대로 나타내었다는 생각이 든다.

 

 

> 괜찮은 부분

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

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

 

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

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

 

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

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

 

> 아쉬운 부분

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

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

 

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

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

 

> 추천 독자

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

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

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

 

> 개인적인 평점

- 가격: 9 / 10

- 내용: 10 / 10

- 디자인: 10 / 10

- 구성: 9 / 10

 

> 정보

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

옮긴이: 서환수

출판사: 한빛미디어

가격: 36,000원

전체 페이지: 654페이지

 

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

디자인 패턴을 어디다 쓰는것일까?

내가 처음 디자인패턴이라는것이 존재한다는것 을 알았을때 내가 모르는 개발방식을 익히기 위해 공부를 해봤다.

하지만 읽어보니 내가 몰랐던 패턴들이 존재하긴 했지만 

패턴 이름만 몰랐을 뿐 실제 개발하면서 실제로 사용하고있던 방식이었다.

그럼에도 GOF 디자인패턴을 익히고 공부해야 하는 이유로 생각하는것은

"개발자간의 소통을위해" 라고 생각한다.

개발 초기에는 개발 방향을 어떤식으로 진행할것은지 논의하기 위해 의사소통을 할 때 좀 더 상대를 이해시키기 편한 방식으로

사용된다고 생각한다(면접시에도 간혹 물어보는곳잉 있었던것 같다.)

물론 패턴으로서 적재적소의 개발시 사용할 디자인패턴을 적용하여 효율적인 개발을 진행하기 위해 익혀둘 필요가 있다고 생각한다.

*권장 독자

권장독자의 설명이 우숩게 나와있긴하지만 디자인패턴을 공부하고싶은데 따분한 이론설명만 있는게 싫다면

이 책을 적극 추천한다.

*이 책만의 장점

보통 기술서적을볼때는 목차만보고 책 소개, 개요부분은 건너띄고보는데 

이 책은 그냥 지나칠 수 없었다.

여러 디자인패턴 책을 봤지만 매변 몇장 못넘기고 포기한적이 많았는데

이 책에서는 글로만 작성되어있는 다른 책들과는 달리 마치 그림책을 읽고있는듯한 그림위주의 설명이 매우 많았다.

그로인해 자연스럽게 책 소개페이지에 눈이갔는데 보다보니 이 책은 단순 기술서로 보기보단 학습지로 보는것이 맞다는

생각이 들 정도로 디자인패턴을 이해시키기 위해 많은 노력이 녹아들어있다고 느껴졌다.

이 책을 읽기위해서는 UML다이어그램을 읽는법과 기초적인 JAVA언어에 대한 배경지식이 있어야 이해하가 쉽다.

앞서 말한것 처럼 이 책의 대부분은 그림이 꼭 들어가 있으며, 마치 대본을 읽는것같은 대화체로 많은부분이 설명되어있어

소소한 재미를 느끼며 읽어나갈 수 있는게 좋았다.

코드에 대한 설명도 코드밖에서의 설명이 아닌 바로 옆에서 설명하고있어 매우 쉽게 이해할 수 있다.

내가 처음 디자인패턴을 배울 땐 14가지의GoF패턴을 큰 테두리에서만 익히고있었는데 

이 책에서는 14가지 패턴을 이용한 응용법을 다수 보여줄 뿐만 아니라 추가로 9가지의 디자인 원칙을 설명해주고 있어

이번기회에 새로운 패턴을 익힐 수 있을것 같다.

각 챕터가 끝나면 연습문제가 존재하는데

이를보고서 진짜 기술서가아닌 학습지같음을 느낄 수 있어 간만에 수험생이된 느낌을 받을 수 있었다.

설명이 쉽게쉽게 되어있어 개발경력이 적은 신입들이 읽어도 쉽게 익힐 수 있을 정도의 난이도로 설명하고 있어

GoF 디자인패턴을 모르거나 입문하고자 할 때 읽는것을 적극 추천한다.

​​

https://www.hanbit.co.kr/support/supplement_survey.html?pcode=B6113501223

 

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

디자인 패턴.
개발자라면 '꼭' '제대로' 이해하고 싶은 것이죠.
GoF의 디자인패턴이 가장 고전이고 최고이긴 하지만 쉽게 이해하기 어렵습니다.

예전에 지인에게 디자인 패턴에 대한 책을 추천해 달라고 했더니 '헤드 퍼스트 디자인 패턴'을 말하더군요.
그런데 절판중이라 볼 수 없었습니다.
그런데....그 책의 개정판이 나오니 너무 반가웠습니다.

 

designpattern.jpg

 

이 책은 그 많은 디자인 패턴 중 가장 많이 사용하는, 그리고 꼭 알고 있어야 할 14가지 디자인 패턴에 대해 설명하고 있습니다.
결론부터 말하자면 왜 지인이 이 책을 추천했는지를 알 수 있었습니다.
'헤드 퍼스트' 시리즈는 쉬운 설명으로 유명하죠.
쉽지 않은 디자인 패턴을 정말 이해하기 쉽게 설명해 주고 있습니다.

 

adptor.jpg

 

factory.jpg

 

opserver.jpg

 

위 그림만으로도 어떤 내용인지 와 닿지 않나요?
그간 알쏭달쏭했던 디자인 패턴에 대해 이 책으로 정확하게 이해할 수 있었습니다.
함께 제공하는 자바 코드는 어떻게 구현하고 응용할 수 있는지 명확하게 보여줍니다.

 

 

pattern.jpg

 

 

디자인 패턴.
우리말로 옮기면 '디자인 형태, 유형' 정도로 번역할 수 있습니다.
지금까지 소프트웨어를 개발하면서 도출된 공통된 유형들에 대해 최적화된 양식을 제공하는 것입니다.
어느 정도 경력을 프로그래머라면 디자인 패턴을 배우지 않았어도 이미 몇몇의 패턴을 적용해 사용하고 있을 수도 있습니다.
디자인 패턴을 배워야 하는 이유는 이미 잘 설계되고 검증된 패턴을 사용할 수 있다는 것이죠.
같은 수레바퀴를 또 만들 필요가 있을까요?

design.jpg

패턴은 정형화되어 있지만, 그 자체로는 결코 정해져 있지 않습니다.
앞으로도 수많은 패턴들이 나올 것이고, 직접 만들 수도 있습니다.
패턴은 해결을 위한 도구임을 잊지 말아야 합니다.
디자인 패턴에 너무 몰입하게 되면 결과가 아닌 방법에 치우칠 수 있습니다.
디자인 패턴을 배우는 목적은 해결을 위한 다양한 도구 사용법입니다.

누군가 저에게 쉽고 재미있는 디자인 패턴 책을 물어본다면 이 책을 권하고 싶습니다.
이 책은 디자인 패턴이 결코 어렵지 않음을 보여주고 있습니다.

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

 

 

헤드퍼스트 디자인패턴(개정판)

 

헤드퍼스트 디자인패턴 개정판이 나왔다.

2005년 초판 발행이후 17년 만에 개정판이 나온 것이다.

 

왼쪽이 초판, 오른쪽이 개정판이다.

 

초판 발행 이후 개정판이 나오기까지 오랜 시간이 흘렀다.

그 오랜 시간만큼 소프트웨어 개발 방법은 많이 변했을까??

프로그래밍 언어 자체에 대한 버전업과 수많은 언어들의 탄생, 개발도구(IDE 등)과 같은 것들은 많이 발전했지만

소프트웨어에 녹아든 개발 방법론에서 핵심적인 내용은 예전이나 지금이나 별반 다르지 않다.

 

이번에 새로나온 디자인패턴 개정판도 기존 책의 핵심적인 내용은 크게 다르지 않다.

하지만 시간이 가면 그 시대의 유행이나 트랜드가 바뀌는 것처럼

초판 발행 당시의 삽화나 문구가 현재에 맞게 대폭 수정되었다.

또한 내용을 이해아는데 필요하다고 생각되는 부분에는 추가적인 내용을 덧붙여 내용이 보강되었다.

 

 

 

 

하지만 예전 그대로 회사동료간의 대화나 스승과 제자 사이의 대화처럼

구어체를 사용한 개념 설명은 어려운 내용을 쉽게 이해할 수 있도록 도와준다.

 

 

 

 

 

디자인패턴을 모른다고 프로그램을 짤 수 없는 것은 아니다.

프로그램을 못 짜지도 않는다.

하지만 다른 개발자와 대화를 할때 기능에 대한 장황한 설명보다는 그 기술에 맞는 디자인 패턴을 이야기 하면

이야기도 단순해지고 시간도 절약된다.(개발자에게 시간은 금이다!) 

 

이 책을 읽어야 할 독자가가 따로 존재 한다고 보지 않는다.

개발을 공부하는 학생이든, 개발을 시작한지 얼마 되지 않은 신입 개발자이든

소프트웨어를 설계하는 설계자이든 모두가 보아야 할 책이 아닌가 생각된다.

 

 

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

 

#헤드퍼스트 #GoF #패턴

한빛미디어의 “헤드퍼스트 디자인 패턴 (개정판)” 도서를 소개합니다.

 

 

DesignPattern-1.png

 

 

 

 

디자인 패턴이라고 하면 대부분 GoF 디자인 패턴을 떠올릴 것이다. 본인의 경우, 부끄러운 얘기지만 디자인 패턴을 접한지는 몇 년이 채 되지 않았다. 오랜기간 임베디드 개발을 하면서 C 네이티브 코드를 주로 다루게 되면서 디자인 패턴이 나와 무슨 관련이랴…정도로만 생각을 해왔는데, 네이티브도 C++과 Go로 대체되고, OS 역시 안드로이드가 주류가 되면서 갑자기 필요해진 부분이 있다. 이유야 팀원 간의 협업을 위해서이고, 설계 단계에서 합류한 인원들과 논의를 하다보니 디자인 패턴을 기본으로 논의를 하다보니 급하게 읽은 책이 GoF 디자인 패턴이었다.

 

도서를 읽기 전에 가장 큰 기대는 GoF 디자인 패턴을 얼마나 커버하고, 쉽게 전달할지 였다. GoF 디자인 패턴을 끝까지 읽고 이해한다는 것이 본인에게는 쉽지 않아서, 그렇다면 다른 독자들에게는 이러한 내용들을 얼마나 쉽게 전달할지, 어떤 방식으로 전달할지가 기대와 함께 우려 또한 되었다. 가령, 생성 패턴 5개, 구조 패턴 7개, 행위 패턴 11개, 총 23개의 패턴을 모두 구성할 것인지… 이것은 목차를 살펴보면 기대에 부합되는 내용들이 포함되어 있는 것을 알 수 있었다.

 

- 01장 디자인 패턴 소개와 전략 패턴 | 디자인 패턴의 세계로 떠나기

- 02장 옵저버 패턴 | 객체들에게 연락 돌리기

- 03장 데코레이터 패턴 | 객체 꾸미기

- 04장 팩토리 패턴 | 객체지향 빵 굽기

- 05장 싱글턴 패턴 | 하나뿐인 특별한 객체 만들기

- 06장 커맨드 패턴 | 호출 캡슐화하기

- 07장 어댑터 패턴과 퍼사드 패턴 | 적응시키기

- 08장 템플릿 메소드 패턴 | 알고리즘 캡슐화하기

- 09장 반복자 패턴과 컴포지트 패턴 | 컬렉션 잘 관리하기

- 10장 상태 패턴 | 객체의 상태 바꾸기

- 11장 프록시 패턴 | 객체 접근 제어하기

- 12장 복합 패턴 | 패턴을 모아 패턴 만들기

- 13장 실전 디자인 패턴 | 패턴과 행복하게 살아가기

- 14장 기타 패턴 | 다양한 패턴 빠르게 알아보기

__ 브리지 패턴

__ 빌더 패턴

__ 책임 연쇄 패턴

__ 플라이웨이트 패턴

__ 인터프리터 패턴

__ 중재자 패턴

__ 메멘토 패턴

__ 프로토타입 패턴

__ 비지터 패턴

 

헤드퍼스트, 역시 쉬운 전달

앞서 본인의 경험으로 디자인 패턴을 접하게 된 계기를 언급하였는데, 지금은 시간이 흘러서 본인 역시 패턴을 기준으로 설계하고 있으나, 패턴이 새로운 것은 아니었고, 구현해야 하는 형태와 동작에 따라 이러이러하게 구조화를 한다는 것이 패턴이라는 이름으로 정리가 되었을 뿐이라고 생각하고 있다.

 

 

가령 “헤드퍼스트 디자인 패턴”에서 패턴들을 목차 내용에 따라 바로 진입하기 보다는 어플리케이션 설계를 예를 들어 설명하고 있다. “가상 모니터링 애플리케이션”을 설계를 한다고 했을 때 센서 데이터를 모니터링 애플리케이션으로 보여주기 위해서 자료를 어떻게 전달할지를 예시로 들고 있다. 물론 이것은 “구현 목표”에 따라 설계 내용이 달라지는 것은 당연합니다. 이 과정에서 어떠한 패턴을 적용하는 것이 유리한지 유도됩니다.

 

위의 처리를 위해서 도서에서 처음으로 소개하는 패턴은 옵저버 패턴(observer pattern)입니다.

옵저버 패턴은 객체의 상태 변화를 관찰하는 관찰자들(옵저버) 의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 앞서 센서 데이터의 변화를 모니터링하기에 가장 좋은 패턴이 아닌가…

 

이와 같이 디자인 패턴을 목록화하여 각각의 패턴을 직접적으로 설명하기 보다는 어떤 소프트웨어 설계를 하는 예시를 두고, 이를 어떻게 구조화할지, 그래서 어떤 패턴을 적용할지를 독자에게 생각하도록 내용을 구성하여 디자인 패턴을 처음 접하는 독자는 자연스레 고개를 끄덕일 수 있다는 것이 본 도서의 장점이 아닐까 싶다.

 

 

DesignPattern-6.png

 

 

-->

 

KakaoTalk_Photo_2022-04-24-23-25-23 001.jpeg

 

 

개발을 하다보면 늘 코드의 형태를 고민하게 된다. 재사용할 수 있고, 의도가 분명하며, 특정 문제를 해결할 수 있는 코드를 작성하기 위해 디자인 패턴을 이해하는 것이 큰 도움이 된다. 이 책은 유명한 GoF 객체지향 디자인 패턴을 알기쉽게 정리한 입문용 책이다. 중고 서점의 개발서 책장을 둘러보면 이 헤드퍼스트 개정 이전 책이 항상 조금 낡은 상태로 꽂혀져 있었다. 개정 전 책도 그림책과 말풍선이 가득해서 만화책 보듯이 이 책을 훑어봤던 기억이 난다. 당시에 이런 파격적인 책 구성에 끌려서 모든 <헤드퍼스트> 시리즈를 너무 사고 싶었는데, 이번에 한국 정서에 맞는 멋진 일러스트로 업데이트된 개정판 신간이 나왔다!

 

<헤드퍼스트> 시리즈가 지향하는 학습 방향은 두뇌를 자극해 재밌게 공부하는 것이다. 그래서 이 책은 대화체를 사용해서 이야기 하듯이 개념을 설명하고, 스토리와 그림이 가득하다. 두껍고 그림 없는 개발서적이 끌리지 않는 학습자들에게 딱 맞는 책이다. 팩토리 패턴 챕터에서는 피자를 만들기를 예로 들면서 이 패턴을 공부한다. 스스로 실습해볼 수 있는 코드 및 확인 퀴즈가 있어서 심심할 틈 없이 공부할 수 있다.

 

이 책에서 소개하는 디자인 패턴은 옵저버, 데코레이터, 팩토리, 싱글턴, 커맨드, 어댑터, 프록시 등 정말 다양하다. 자바, 파이썬을 공부했을 당시에 '싱글톤', '데코레이터' 같은 패턴 이름을 자주 들어봤다. 초보자인 내가 블로그 글과 강의만으로 이 개념들을 이해하는 데 한계가 있었다. 딱딱한 개념설명에 좌절하는 디자인 패턴 입문자에게는 헤드퍼스트 디자인패턴을 추천한다. 패턴을 사용하는 이유와 활용 방법을 이해하고 긴단하게 실습 코드를 작성해보는 과정을 통해 누군가에게 설명할 수 있을 정도로 명확하게 개념을 이해할 수 있을 것이다.

 

 

이 책은 개발자가 만든 것 같지 않을 정도로 훌륭한 학습 철학과 가이드를 담고 있다. 그럼에도 페이지를 넘길 때마다 개발자스러운 유머가 보여서 개발자가 만든 거 맞네 하고 고개를 끄덕이게 된다. 다들 개발하다가 머리 터질 때마다 헤드퍼스트 원고를 쓰면서 스트레스를 푸셨을 것 같다. 대단한 사람들. 헤드퍼스트 개발서 시리즈가 계속 출간되어서 많은 사람들이 재밌게 프로그래밍 공부에 빠져들었으면 좋겠다.

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

- 디자인 패턴에 대해 공부하고 싶다면 꼭 추천하고 싶은 책.
- 다양한 예시가 있어 이해하기 쉽다.
- 사놓고 두고두고 읽고 싶은 책.
- 실무에서 하나씩 적용해보고 싶다.

신입사원 때 당시 팀장님이 매일 디자인 패턴을 공부해오게 한다음 발표를 시키셨다.

인터넷에서 찾아보는 것도 좋지만 검증된 책을 가지고 공부하는게 좋겠다고 하셔서 사내 도서관에서 찾아서 공부했던 책이 바로 헤드퍼스트 디자인패턴이었다.

디자인 패턴에 대해서 어렴풋이 알고 있었지만 정확히 어떤 것들이 있는지 그때 처음 알게 되었고 이를 계기로 GOF의 디자인 패턴 책을 사서 보게 되었다 (물론 다는 못봤지만....ㅎㅎ)

이렇게 디자인 패턴에 대해 알게 해주었던 헤드퍼스트 디자인패턴이 개정판으로 나왔다는 소식을 페이스북을 통해서 알게되었다. (아직도 기억나는 피자가게 예제...)

그래서 개정판은 어떤지 궁금했던 찰나에 개정판을 볼 수 있는 좋은 기회가 생겨 읽게되었다! (Lucky~!!!)

헤드퍼스트 디자인패턴

워낙 예전에 이전 버전을 읽었던 지라 개정판 이전 내용들은 기억이 안나지만 그래도 읽으면서 헤드퍼스트 시리지 특유의 구성은 여전했다.

다양한 그림과 말주머니가 가득한 이야기 형식으로 보다 이해하기 쉽게 구성되어 있었다 (이런 부분이 호불호가 있다고 하지만)

대학교 때 교재로 헤드퍼스트 시리즈를 많이 접했던 나에게는 매우 친숙한 구성이다.

또한 헤드퍼스트 디자인패턴은 예제 소스들이 자바로 되어 있어서 자바 개발자인 나에게는 매우 좋았다. (이전 버전에 발표할 때도 해당 예제 소스들을 바탕으로 발표하였었다)

번역체들이 이전 버전과 많이 달라졌다고 하는데 그 부분까지는 잘 기억이 안나지만 개정이 되면서 확실히 더 자연스럽고 깔끔한 문체들로 바뀐 것 같고, 최신 버전의 설명들로 바뀐 부분이 있는 것 같았다.

읽다보니 신입 개발자 시절 발표할 때가 생각나면서 여전히 나에게는 디자인 패턴은 헤드퍼스트 디자인패턴인 것 같다ㅎㅎ

 

designpattern.jpg

 

안녕하세요 괴짜 개발자 namedboy 입니다.
 
오늘은 아는 사람은 다 아는 디자인패턴에 대해 얘기를 조금 해볼까 합니다.
 
헤드퍼스트 디자인패턴은 굉장히 오래된 책입니다.
한국어로 번역된 초판이 무려 2005년에 나왔으니까 한국어로 번역된 책이 나온지도 20년이 넘은셈이죠.
 
이 책은 일반적인 개발 서적과 조금 다릅니다. 
코드만 나오는 것도 아니고, 그렇다고 줄글로만 주구장창 쓰여져 있지도 않지요. 
이 때문에 책을 읽으면서 여행하는 느낌이 나기도 합니다.
 
책에는 총 16가지의 패턴을 다루게 됩니다.
물론 여러 패턴들 얘기하기 전에 예제를 통해 전체적인 패턴을 사용하는 방식에 대해 얘기합니다.
 
옵저버, 데코레이터, 팩토리, 싱글턴, 커맨드, 어댑터, 퍼사드, 템플랫 메소드, 반복자, 컴포지트, 상태, 프록시 등의 패턴을 얘기해봅니다.
물론 이 모든 패턴에 대해 익숙해지면 좋겠지만 모든 것이 그렇듯 필요할 때 적재 적소에 쓰는 것이 중요합니다.
 
중요도에 따라 더 많이 쓰이는 패턴이 있기도 하고 상대적으로 덜 사용되는 패턴도 있지요.
저는 오히려 이 책에서 얘기하는 내용 중에는 패턴도 중요하지만 유연하게 개발하는 것에 대해 생각할 수 있도록 얘기하는 것도 정말 중요하다고 생각합니다.
 
- 디자인 패턴은 만병통치약이 아닙니다.
- 패턴이 정말 필요한가?
- 무조건 패턴을 적용해야 하는가?
 
등의 질문을 통해 패턴을 적용하는 것에 대해 생각해보게 되는 것.
이 패턴이 정말 필요한 것인가? 같은 생각들을 하는 것을 통해 점점 더 나은 개발을 해야 하는 것이죠.
 
디자인패턴이라는 것은 선배 개발자들의 경험과 노하우를 녹인 일종의 전래동화 같은 것이라고 생각합니다.
그러한 이유로 경험을 공부하고 학습하면서 왜 이런 패턴이 나오게 되었는지 확인하고 그 상황이 되었을 때 내가 더 자연스럽게 비슷한 형태의 패턴을 사용한다면 디자인 패턴에 대해 제대로된 학습을 했다고 생각이 들 것 같습니다.
 
무턱대고 디자인 패턴이 좋으니까 적용하자! 또는 사용할 곳이 명확하지도 않은데 이걸 사용해야 해! 같은 것은 하지 않았으면 하는 바램입니다.
 
이 리뷰 내용은 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.
책의 내용이 궁금하다면 [이곳]을 통해 확인할 수 있습니다.
 

안녕하세요 도미닉입니다.

오늘은 헤드퍼스트 디자인패턴을 읽고 느낀점을 공유하고자 합니다.

저는 헤드퍼스트 디자인패턴 책을 기존에 나왔던 책으로 읽어본 경험이 있었습니다.

이전에 책도 설명이 굉장히 잘되있고 소설책을 읽는 것처럼 책의 내용을 따라가다 보면 디자인 패턴을 이해할 수 있는 점이 인상적이었습니다.

이 책은 이전의 헤드퍼스트 디자인패턴 책에서 조금 조잡할 수 있었고 난해할 수 있었던 내용들이 개선되었습니다.

우선 책의 가독성이 많이 좋아졌습니다.

개정판 이전의 책은 글자의 위치가 페이지마다 제각각이고 글씨의 폰트도 다양해서 조금 난잡하다는 생각이 들었습니다.

이번 개정판은 글씨의 폰트도 일정한 편이고 글자들이 있어야할 것으로 예상되는 곳에 글자가 있어서 훨씬 읽기 좋아졌습니다.

이렇게 하면 책이 획일화되면서 기존의 읽기 재밌었던 장점이 없어진 것이 아닐까 생각하실 분들도 계실 것 같습니다.

코드 예제라던지 내용들은 기존의 뼈대를 유지하고 있어서 책을 읽는 것은 여전히 재밌었고 흥미로웠습니다.

이 책을 읽다보면 소설을 읽는 것처럼 자연스럽게 하나씩 디자인패턴에 대해서 이해할 수 있습니다.

이런 점은 다른 책들과의 차별점이라고 생각합니다.

보통 디자인 패턴은 완벽히 똑같이 만들 수 있는 구조라고 생각을 합니다.

하지만 이 책에서도 적혀있듯이 디자인 패턴은 코드보다는 경험을 재사용하는 것입니다.

이런 이유로 선배 개발자들은 어려움을 느꼈고 그래서 이러한 경험을 통해서 이런 구조를 만들었다라는 것을 이 책을 통해 알 수 있었습니다.

또한 디자인 패턴을 처음 공부할 때는 무조건 외워야하는, 어렵게 생각하는 분들이 많이 있습니다.

그런 분들도 이 책을 읽다보면 소설을 읽듯이 주인공에게 몰입하여서 함께 희노애락을 겪으며 디자인 패턴을 공부할 수 있는 좋은 책입니다.

이 책을 통해 디자인 패턴을 익혀보면 어떨까요?

 

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



출처: https://kiljh.tistory.com/251 [Dominic Blog]

디자인 패턴... 그래, 그거.

객체지향 프로그래밍의 여러 문제 유형들을 해결하기 위한

모범 답안 같은 그것.

 

지금까지 디자인 패턴,

어디까지 읽어봤니?

 

 

헤드퍼스트디자인패턴.jpg

 

헤드 퍼스트는 지금까지의

어떤 디자인 패턴 책과 비교할 수 없는 듯 하다.

강추한다...!!!

 

진정 디자인을 위한 생각을 하도록 이끌어준다.

쉽게 정답만 보고 넘어가려고 하면

어떻게 알고 왔는지... 옆에 파란색 글씨를 적어놨다. ㅋ

"정말 꼭 풀어보고 가세요."

"정말 꼭 생각해보고 가세요."

알겠다. 오바.

 

 

디자인 패턴을 쓰게 되지만...

그 이면에 어떤 배경이 있는지

어떻게 생각해 나가야 하는지...

어떻게 고쳐가야 하는지...

진지하게 접근한다는 느낌을 받는다.

 

 

 

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

 

 

개발 공부 중에서 개발 입문자에게는 디자인 패턴 공부가 가장 추상적으로 와닿는 부분이라고 생각한다. 제대로 파고 들겠다며 각 잡고 공부하더라도, 학습하고 나서 활용하지 않으면 쉽게 잊어버리기 마련이다. 이 책은 딱, 그런 독자들을 위한 책이라고 할 수 있다.

 

책에서 다루는 디자인 패턴

중점적으로 다루고 있는 디자인 패턴

옵저버, 데코레이터, 팩토리, 싱글턴, 커맨드, 어댑터, 퍼사드, 템플릿 메소드, 반복자, 컴포지트, 상태, 프록시

 

간략하게 언급만 하는 패턴

브릿지, 빌더, 책임 연쇄, 플라이웨이트, 인터프리터, 중재자, 메멘토, 프로토타입, 비지터

 

 

추천 독자

디자인 패턴과 그를 기반으로 하는 객체지향 디자인을 배우고 싶은 사람

 

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

01.jpg

 

02.jpg

 

재사용성으로 대표되는 잘 설계된 객체지향 구조는 패턴으로 가득 차 있습니다. 여러 개발자가 협업하여 시스템을 개발할 때는 물론이고 혼자서 개발한다 하더라도, 객체 사이의 협력 방법에 얼마나 주의를 기울였는지가 객체지향 시스템의 품질을 좌우하게 되기도 합니다. 복잡한 개발 과정에서 우리 선배 개발자들은 같은 실수를 반복하지 않기 위해 노력해 왔습니다. 즉, 자신들의 시행착오를 바탕으로 특정 상황에서 발생하는 문제 패턴을 정의하고 또한 효과적으로 해결하는 방안을 기록으로 남겼습니다. 이를 '디자인 패턴'이라고 부릅니다.

누군가 겪은 문제가 누군가'만' 겪는 문제는 아닙니다. 그러므로, 디자인 패턴에 대한 이해는 동일한 문제를 해결했던 경험을 활용하여 소프트웨어 설계의 효율을 추구할 수 있게 해 줍니다. 코드의 재사용으로 대표되는 라이브러리나 프레임워크의 사용이 개발과정의 속도를 혁신적으로 개선해 주었다면, 디자인 패턴의 사용은 소프트웨어의 설계와 유지 관리를 더 쉽고 유연하게 진행할 수 있도록 도와줍니다.

즉, 디자인 패턴에 대한 학습을 통해, 같은 실수를 반복하지 않고, 효율적인 소프트웨어 설계를 가능하게 하며, 장황한 설명을 하지 않고도 '싱글턴 패턴을 쓰자'와 같이 한 문장으로 동료 개발자와의 의사소통이 가능하게 됩니다.

디자인 패턴은 1987년에 발표된 논문에서 처음으로 제안된 개념이라고 합니다. 이후 1995년에 GoF(Gang of Four)로 불리는 4인방 - 에릭 감마, 리처드 헬름, 랄프 존슨, 존 블리시디스 - 이 "Design Patterns - Elements of Reusable Object-Oriented Software" 를 출간하여 구체화 하였습니다.

우연하게도 역시 4명의 공저자가 지은, 이 책 "헤드 퍼스트 디자인 패턴(Head First Design Patterns)"은 2004년에 초판이 출간되었고 2005년에 한국어 번역 초판이 한빛미디어를 통해 국내에 소개되었습니다. 이후 2021년, 16년만에 개정되었고, 개정을 기념하여 한국에는 한국 독자들만을 위한 특별판으로 구성되어 출간되었다고 합니다.

 

03.jpg

 

헤드 퍼스트 시리즈의 독특한 특징이죠. 마치 여러 사람들과 대화하듯이 설명하는 페이지가 많은데, 원서를 보지 않아 정확하지는 않습니다만, 원서에는 아마도 미국인 사진이 사용되었을 것 같습니다. 하지만, 이번 한국 특별 개정판에는 동양인 일러스트로 대체되어 있는 것 같습니다. 개인적으로 시선이 더 편안하고 이질감이 덜 느껴져서 독서가 더 편안해 진 것 같습니다.

 

04.jpg

 

디자인 패턴을 설명하기 위해 사용한 샘플 예제에는 자바가 사용되었습니다. 화살표 지시선을 사용하여 코드 한줄 한줄 상세하게 설명해 줍니다. 다만, 회색과 연한 하늘색의 배합이라 선명하지 않은 듯 해서 살짝 눈에 피로감이 있네요. 그리고, 색맹인 분들에게 잘 보이는지도 조금은 염려가 됩니다.

 

05.jpg

 

UML처럼 보이지만 엄격한 의미의 UML은 아니고 UML을 적당히 고친 다이어그램을 사용하여 객체 설계를 설명하는 것도 좋은 것 같습니다. 사실 UML이 복잡한 면도 있는데 단순화한 설명이라 이해하기 더 쉬운 것 같네요.

다만, 이 책은 클래스를 다형적으로 사용하는 방법, 계약에 따른 디자인과 상속의 유사성, 캡슐화 작동 방법과 같은 뜻 모를 객체지향의 기초 지식을 이미 갖추고 있는 독자들을 대상으로 합니다. 자바를 완전히 꿰고 있지는 않아도 되지만 객체지향의 기본 개념과 원칙에 대해서 어느정도 기본 지식이 필요합니다.

 

06.jpg

 

원조 Gof가 23가지 디자인 패턴을 정리했다면(위), 헤드 퍼스트 4인방은 이 중 가장 많이 사용되는 14가지 디자인 패턴에 대하여 설명하고 있습니다. 또한 그 설명을 위해 디자인의 근간이 되는 9가지 디자인 원칙을 적절히 사용하고 있습니다(아래).

 

07.PNG

 

08.PNG

 

원조 디자인 패턴보다는 당연히 '헤드 퍼스트 디자인 패턴'의 설명이 더 가깝게 느껴지는 건 저만은 아닐겁니다.

편집의 단점인지 장점인지 모르겠습니다. 여러 '헤드 퍼스트' 시리즈들을 읽다 보면 ... 종종 뭔소리를 하고 있는지 조금은 산만하게 느껴지기도 하는 '헤드 퍼스트' 시리즈이기는 합니다. 하지만, 하나의 패턴을 설명하기 위해 한 챕터를 하나의 개발과정 이야기로 구성한 '헤드 퍼스트 디자인 패턴'과 대화하다 보면, 복잡하게만 여겨지던 객체지향 디자인 패턴들이 조금씩 손에 잡힘을 느끼게 해 줍니다.

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

 

개발자라면 누구나 한번쯤은 들어봤을 법한 아주 유명한 책입니다.

초판이 나온지 무려 17년이나 된 책입니다. 탁월한 통찰력과 전문성으로 디자인 패턴이라는 개념을 만들어 내고

널리 전파하여 소프트웨어 설계 분야를 송투리째 바꿔 놓고 전 세계 개발자의 삶을 좋은 방향으로 바꿔준 그야 말로 레전드인 책입니다.

디자인 패턴을 활용하면 단지 코드만 "재사용"하는 것이 아닌, 더 큰 그림을 그리기 위한 디자인도 재사용할 수 있습니다.

디자인 패턴은 프로그램을 개발하는 과정에서 빈번하게 발생하는 디자인 문제를 정리해서 상황에 따라 간편하게 적용 할 수 있게 정리한 것입니다. 

잘 활용 할 수 만 있다면 적지 않은 시간과 노력, 시행 착오를 줄일 수 있습니다.

더 이상의 설명이 뭐가 필요하겠습니까. 

 

​이 책에는 그림이 많이 있습니다. 사적인 대화하듯 설명을 곁들이며 대화체를 사용합니다. 

더 집중하며 책을 볼 수 있을것 같습니다. 또한 90개 이상의 연습문제가 있습니다. 

읽을 때보다 실제로 어떤 일을 할때 더 잘 배우고 더 잘 기억하기 때문입니다. 

그리고 여러 가지 학습 유형을 섞어서 사용하였습니다. 

단계별로 공부하는 쪽을 선호 할 수 있도 큰 그림을 파악하는 쪽을 선호하는 독자도 있고 예제만 보면 된다는 독자도 있기 때문입니다. 

 

- 마치며 -

 

이책에는 14가지의 패턴을 일상에서 발생하는 상황등을 이용하여 설명하고 있습니다. 

기본적인 상황 설명을 하고 클래스와 객체를 만들고 설명하고 다이어 그램을 그리는 방식으로 진행하며 객체지향 프로그래밍 원칙들에 대해서 설명합니다.

 

90여개의 연습문제를 통해 실제 코딩해보고 이해를 해 볼 수 있습니다. 

디자인 패턴은 만능이 아닙니다. 모든 도구는 용도에 맞게, 적절하게 쓰일 때 큰 위력을 발휘합니다. 

주어진 상황에 맞게 디자인 패턴을 잘 활용한다면 정말 강력한 도구가 될것입니다.

 

이번 개정판을 통해 자바 초급자나 디자인 패턴을 알고는 있지만 정확히 이해하고 활용 할 없었던 분들에게 무조건 추천합니다!

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

 

IMG_2348 중간.png

 

 

 

 

우선 이 책은 초급 개발자들에게 추천할 만한 책이고 중급 이상의 개발자 들도 한번 쯤 읽어봐도 좋을 듯하다.

헤드퍼스트 시리즈는 굉장히 설명을 잘하는 책이라고 생각된다.

 

이 책이 초급 개발자들에게 좋다고 생각하는 이유 중 하나는 설명하는 방식에 있다.

많은 도서들은 대부분 있는 기술이나 정의를 설명하는데 많은 초점을 둔다.

 

하지만 헤드퍼스트는 대화형으로 설명하는 부분이 있는데 왜 이런 기술과 정의를 사용해야 하는지에 대해 의문을 던지고 설명을 한다.

물론 이러한 설명이 모든 질문과 설명을 포함하고 있지는 않지만 적어도 초급 개발자가 접근하는 수준에서는 충분한 설명을 하고 있다.

IMG_2351 중간.png

 

 

또한 중간중간에 있는 생각해 보기와 퀴즈 등을 하나씩 따라가면서 부담 없이 디자인 패턴을 익혀 나갈 있을 거라 생각된다.

 

IMG_2350 중간.png

 

옵저버패턴, 데코레이터패턴, 팩토리패턴, 싱글턴패턴 등 다양한 디자인 패턴을 잘 설명하고 있으니

기존에 구현되어 있는 코드의 디자인 패턴 들을 확인해 보면서 다시 한번 고민해 보는 것도 많은 도움이 될듯하다.

 

 
객체지향, 함수형, 선언형, 반응형 등의 갖가지 프로그래밍 방법론이 프로그래밍 세계를 뒤덮으며 활발하게 사용되고 있는 2022년...
오.. 이럴수가.. 지금과 같은 혼돈기가 아니었던 것으로 생각되는, 2000년대에 읽었던 디자인패턴 도서의 개정판이 나와버렸다. 
예전의 병맛 낙서스러운 일러스트들이 정상적인 느낌으로 바뀐 점이 아쉽지만, 아무튼 깔끔하게 정리된 컬러판으로 출간되었다. 'ㅅ')
 
오랜 시간 개발을 해오면서도 다시금 자신을 돌아보게 만드는 격언들이 즐비한 아름다운 이 도서. 다시 읽어보아도 배울 점이 태산이다. 
기본적으로 널리 알려진 디자인 패턴들에 관해 Java 코드를 통해 쉽게 설명하며, 프로그래밍 디자인 원칙들을 함께 곁들인다. 
예를 들어 아래와 같이...
 
애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분과 분리한다.
구현보다는 인터페이스에 맞춰서 프로그래밍한다.
상속보다는 구성(composition)을 활용한다.
상호작용하는 객체 사이에는 가능하면 느슨한 결합을 사용해야 한다.
등등...
 
출간 당시에는 초보자가 읽을만한 디자인 패턴 관련 서적이 크게 많지 않았던 것으로 기억하는데, 
현재는 각 언어의 특성에 맞춘 패턴 관련 서적이 상당수 출시된 상태이기에 이 도서가 현재도 경쟁력이 있느냐 생각하면... 경쟁력이 있다. 'ㅅ')
적당히 복잡한 문제와 그를 해결하기 위한 코드 및 자세한 설명으로, 패턴 리뷰/스터디를 하기에 전혀 모자랄 것이 없는 알찬 도서이다. 
전부 다시 읽기에는 시간이 걸리는 볼륨이나, 리뷰하는 내내 좀 더 읽고 싶은 마음이 드는 추억의 도서였다. 'ㅅ')b
 
.
 
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."
 

16여 년 만의 개정을 기념해 재탄생한 한국 특별판???

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

서환수 옮김

 

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

 

2022년 4월

2022 나는 리뷰어다 활동의 세 번째 리뷰

 

4월의 리뷰할 책은 "헤드퍼스트 디자인 패턴(개정판)"이다.

무려 16년 만에 개정판이 나왔다. 개정판이라고 할 수 있을지는 모르겠으나 아무튼 한국 특별판이다.

 

몇 페이지를 휘리릭 봤을 때 느낀 점은 예전 본판보다 보기가 훠어~~ 얼씬 편해졌다.

헤드퍼스트 디자인 패턴이라는 책이 워낙에 좋은 책으로 소문이 많이 났었기 때문에 꼭 봐야지 봐야지 했는데 뭔가 미쿡스런 책의 그림과 구성에 지쳐버리고 말았다. (공부 열심히 하지 않아서 그런 건 아니랍니다...)

어디를 어떻게 봐야 하는 거지? 라는 생각을 많이 했던 것 같다.

책의 일부분을 보여드립니다...

나는 정말 정신 없었다...

 

그런데!

개정판이 나왔다.

구성이 정말 깔끔하게 잘 나왔다.

 

훨씬 보기 편하고 텍스트 색감도 너무 좋다. 

이것 보세요 여러분!!!!

정말 잘 나왔다! 당장 읽어 보고 싶을 정도로 좋은 구성이다.

옮긴이의 말처럼 한국 정서에 맞게 일러스트레이션도 싹 바뀌고 뼈대와 태가 바뀌었다.

어디에 감사를 드려야 하나 ㅎㅎㅎ

일단 한빛미디어에 감사드립니다!!

(늘 감사하고 있어요!!)

 

그럼 이제 책의 본문에 집중해보자.

헤드퍼스트 디자인패턴은 친절하게도 책을 보는 방법을 잘 설명해준다.

여러분의 두뇌를 정복하는 방법

1. 천천히 하세요.

2. 연습문제를 꼭 풀어보세요.

3. <무엇이든 물어보세요> 부분은 꼭 읽어보세요.

4. 자기 전 마지막으로 이 책을 보세요.

5. 물을 많이 마십시다.(????)

6. 배운 내용을 얘기해 봅시다.

7. 두뇌의 반응에 귀를 기울여 봅시다.(힘들면 쉬라는 뜻)

8. 뭔가를 느껴 봅시다.

9. 직접 디자인해 봅시다.

 

진짜 이대로만 하면 개발 실력이 쑥쑥 성장할 수 있을 것 같다.

이 책뿐만 아니라 다른 책들도 이런 식으로 공부한다면 내 머릿속에 잘 남으리라.

 

어쨌든,

이 책은 디자인 패턴을 말하는 책이다.

디자인 패턴을 잘 활용하면 코드 재사용뿐만 아니라 더 확장될 앱을 준비할 수가 있다.

괜히 패턴이라는 단어를 사용하는 것이 아니다. 선배 개발자 분들이 시행착오를 많이 겪은 후에 가장 효율적이라고 생각하는 것을 패턴으로 남겼을 테니 말이다.

지속적으로 공부하고 접목시켜 보다 보면 디자인 패턴을 가장 현명하게 활용하는 법을 깨달을 수 있을 것이다.

 

이 책은 우선 초급 개발자에게 가장 도움이 될 책이라고 생각이 된다.

물론 요즘 시대에 초급 / 중급으로 굳이 구분하고 싶지는 않지만 언어를 공부하고 프레임워크를 다뤄보기 시작한 개발자가 디자인 패턴을 공부하면 가장 도움이 될 것 같기 때문이다.

본인이 생각하기에 자바와 객체지향을 지속적으로 사용해야 한다면 이 책은 필수라고 생각한다.

 

디자인패턴을 이야기하자면 보통 GoF의 디자인 패턴을 많이 이야기한다.

하지만 GoF의 책은 난이도가 좀 있는 편이기 때문에 이 책으로 먼저 시작하고 디자인 패턴에 대해서 더 궁금하다면 GoF로 넘어가는 것도 좋은 방법일 것 같다. 패턴도 패턴이지만 객체를 설계하는 법에 대해 설명을 잘해주는 책이기 때문에 강추하는 책이다.

 

마지막으로, 개정판이라고 해서 내용은 크게 바뀌진 않았다.

일단 예제 코드가 최신 자바버전인 자바 16에 대응 가능하도록 변경이 된 것 제외하고는 내용에서 큰 변화는 없는 것으로 보인다.

 

디자인 패턴을 재미있게, 그리고 효과적으로 공부하고 싶은 분들은 헤드퍼스트 디자인패턴으로 시작하자.

괜히 16년 만에 개정판이 나온 것이 아니다. 그것도 한국 특별판으로.

 

Love Yourself.

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."
헤드퍼스트 디자인패턴 개정판

한빛미디어의 "헤드퍼스트 디자인패턴 개정판"을 리뷰하게 되었습니다.

 

 

헤드 퍼스트 디자인 패턴(개정판)

유지관리가 편리한 객체지향 소프트웨어 만들기! “『헤드 퍼스트 디자인 패턴(개정판)』 한 권이면 충분합니다!”

m.hanbit.co.kr

 

디자인 패턴

패턴은 특정 컨텍스트 내에서 주어진 문제의 해결책이다.
어떤 컨텍스트 내에서 일련의 제약조건에 의해 영향을 받는 문제가 발생했다면,
그 제약조건 내에서 목적 달성을 위한 해결책이 되는 디자인을 적용하면 된다.

책에서는 디자인 패턴에 대해 위와 같이 설명하고 있습니다. 디자인 패턴의 구조는 패턴이 적용되는 상황을 가리키는 컨텍스트, 컨텍스트의 목표 또는 제약조건을 뜻하는 문제, 그리고 해결책으로 나눌 수 있습니다.

 

디자인 패턴은 개발자로서 꼭 알아야 하는 개념이라고 생각합니다. 여러 개발자의 코드를 디자인 패턴을 통해 통일화하여 의도를 파악하기 쉽게 할 수 있고, 코드의 재사용성을 늘릴 수 있으며 하나의 의사소통 수단으로도 사용할 수 있습니다.

 

책 소개

이 책에서는 이런 중요한 개념인 디자인 패턴을 굉장히 쉽고 재밌게 배울 수 있도록 구성한 것이 보입니다.

책은 14가지의 챕터로 나뉘어 있으며 각각 오리지널 GoF의 디자인 패턴 중 핵심 패턴에 대해서 설명하고 있습니다.

 

1. 그림으로 설명

책의 대부분의 설명은 그림으로 그려져 있습니다.

어려운 개념이다보니 글과 코드만 봐서는 이해가 잘 안 갈 수 있는데, 그림으로 보니 보다 쉽게 이해가 되는 것이 좋았습니다.

 

2. 예제와 Q&A

 

그림만으로는 어떻게 적용해야 하는지 감이 안 잡히는 게 당연합니다.

때문에 자바 코드로 이루어진 예제 또한 제공하며 대화체를 사용하여 책 또는 저자와 대화하여 배우는 듯한 느낌을 줍니다.

그리고 Q&A가 있으며 책의 핵심 내용을 한 번 더 짚고 넘어가도록 구성되어 있습니다.

 

3. 다양한 연습문제

책에는 다양한 양식의 연습문제가 있습니다.

십자말풀이, 깊게 생각하고 답을 구해야 하는 뇌 운동, 코드 테스트 등 단순히 형식적인 객관식 문제가 아니라 재미도 있고 스스로 제대로 공부가 되었는지, 이해는 했는지 물어보는 것 같아서 좋은 경험이었습니다.

 

마무리

괜히 여러 개발자 선배 분들이 추천하는 책이 아니다라는 생각이 들 정도로 좋은 책이었습니다.

저는 책이 두꺼우면 이걸 언제 다 읽을까라는 생각이 드는 데, 이 책은 쉽게 읽히는 데다가 재미까지 있으니 두꺼워서 오히려 좋아라는 느낌이었습니다.

 

어느 정도 프로그래밍 언어를 이용해 간단한 무언가를 만들 수 있다면 그다음 단계로 넘어가기 위해 꼭 읽어야 하는 책이며, 제 주변인들에게도 꼭 추천하고 싶은 책입니다.

 

헤드1.jpg

 

헤드2.jpg

 

더 좋은 코드를 만들기 위해 고민하는 모든 분들께 강력히 추천합니다.

 

처음으로 헤드퍼스트 책을 읽게 되었습니다.

그림이 많고 중요한 일부 내용들을 쉽게 풀어쓴 초보자를 위한 책으로 알고 있었는데, 주니어와 시니어 모두가 읽기 좋은 기본에 충실한 개념서였습니다.

 

디자인 패턴을 어떤 경우에 어떻게 사용해야 하며 어떤 효과가 있는지, 상당히 실용적이고 친절하게 설명하고 있습니다.

지루하고 이해하기 어려울 수 있는 디자인 패턴들을 실제 프로젝트에서 겪을 수 있는 상황들을 예로 들어, 쉽게 공감하고 이해할 수 있었습니다.

 

다양한 디자인 패턴들을 알고 있는 건 좋지만, 모든 걸 디자인 패턴으로 해결하려고 하는건 조심해야 한다고 생각합니다.

이 책에서는 중요한 개발 원칙들을 기반으로, 상황에 따라 유연하게 디자인 패턴을 적용하는 사고를 할 수 있는 길러줍니다.

 

개발을 하는 모든 분들이 곁에 두고 반복적으로 보시면 좋을 것 같습니다.

 

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

2005년 9월 초판이 나왔던 책의 새로운 버전을 지난달에 재번역 발간한 책입니다.

저는 이 책의 예전 판을 읽었었는데요. 2010년 10월이었습니다. 당시 책을 읽고 "Head First 시리즈를 안 좋아했는데, 괜찮다는 느낌이 온다"라고 메모해 두었네요. 당시만 해도 GoF의 "디자인 패턴"을 읽고, 이해되지 않는 부분들이 있어서 고민하던 중이었거든요. 그런데 이 책을 읽고 이해도를 꽤 높일 수 있었습니다.

예전판의 번역자는 "서환수"님이셨는데요. 이번 판도 "서환수"님이 번역하셨더군요. 17여 년 만에 같은 책을 번역하신 셈인데요. 책 내용을 보다 보면 정말 재미있는 부분들이 있습니다. 과거 서완수 님의 번역 문체와 현재 서완수 님의 번역 문체가 미묘하게 바뀐 건데요. 예를 들어서 예전판에, "전문 용어는 신참 개발자들에게 훌륭한 자극제가 됩니다"라고 번역되어 있는 부분이 이번에는 "전문 용어는 신입 개발자에게 훌륭한 자극제가 됩니다" (64페이지)로 번역되었더군요. 모르기는 몰라도, 과거 번역 결과를 그대로 가져오기 보다 새로운 판의 번역을 따로 하신 게 아닌가 싶었습니다.

원전의 내용도 꽤 많이 바뀐 것 같았는데요. 전체적인 구조나 각 장이 설명하는 뼈대는 그대로 둔 채로, 설명하는 방식을 바꾸기도 하고, 자바 기술 변화에 맞춰서 내용을 수정/추가한 것을 볼 수 있었습니다. 예를 들어, 예제에 자바 클로저를 사용하는 코드가 추가된 부분이나 내장 옵서버 객체가 사라지는 바람에 이 부분을 사용하는 방법을 보여주는 대신 Observer가 사라졌다고 언급하는 부분이 보이더군요.

2010년에 읽을 때도 그렇게 생각했지만, <헤드 퍼스트 디자인 패턴>은 디자인 패턴을 공부하면서 이해해야 할 "용어"가 모두 등장하고 있습니다. 얼마 전 저는 "데미테르 법칙"에 대해서 글을 쓸 기회가 있었는데요. 데미테르 법칙은 "최소 지식 원칙"이라고 <헤드 퍼스트 디자인 패턴>에서 설명하고 있거든요.

"할리우드 원칙" 같은 용어도 다른 책에서 잘 언급하지 않지만 디자인 패턴 이해를 위해 꽤 중요한 용어이고요. 그래서, "디자인 패턴"을 공부하고 있는 개발자라면 <헤드퍼스트 디자인 패턴>으로 도움을 많이 받으실 수 있을 것 같습니다.

다만, 책의 예제가 모두 자바를 사용하고 있기 때문에 다른 언어를 사용하는 개발자라면, 조금 낯설다는 느낌을 받겠더군요. 설명하는 내용들이 객체지향언어 특히 자바를 사용하는 디자인 패턴에 대한 내용이기 때문인데요. 디자인 패턴은 결국 특정 언어 패러다임과 프로그램언어를 목표로 설명하게 되지만 디자인 패턴이 필요한 이유는 객체지향이나 자바를 위해서가 아니기 때문에, 다른 언어를 사용하는 사용자라도 이 책에서 얻을 게 없다고는 말할 수 없을 것 같습니다. 저 같은 경우도 자바를 현업에서 사용한 적이 없지만, 디자인 패턴이나 예전 버전 리팩토링 책을 읽으면서 많은 걸 느낄 수 있었거든요. 아마도 "왜" 이런 패턴이 필요하게 되었는지에 대한 이해는 결국 언어에 의존적이지 않기 때문이 아닐까 싶습니다.

책의 말미, 615쪽에 보면

" 시스템이 점점 복잡해지면서 처음에 기대했던 유연성이 전혀 발휘되지 못한다면 패턴을 과감하게 버리는 게 낫습니다. 즉 패턴보다 간단한 해결책이 더 나을 것 같다 싶을 때 패턴을 제거하면 됩니다"라고 언급하고 있는데요. 이런 마무리가 결국 "디자인 패턴"을 제대로 설명하기 위한 마무리가 아닐까 싶습니다.

근본적으로 디자인 패턴을 사용하는 것이 "유연성" 때문이라는 생각인 건데요. 그렇다면 프로그래밍 언어가 무엇이 되었던, 어떤 패러다임이 되었던 비슷한 고민과 해결책이 필요하게 되고, 디자인 패턴으로 정리될 수 있게 되는 거죠. 그럼, 아마도 <헤드퍼스트 디자인 패턴>에서 이야기하고 있는 디자인 패턴 용어들을 가져다 쓰게 될 것이고요.

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

프로젝트를 진행하다가 이전 코드를 수정하려고 보면 알 수 없는 구조에 수정이 힘들 때가 많았다.

그래서 결국 프로젝트를 리팩토리 하는데 많은 시간을 보내곤 했다.

그럴 때마다 디자인 패턴을 공부해서 코드에 적용해 보고 싶다는 생각을 종종 했다.  

이 책은 자칫 지루할 수 있는 개념들을 재미있게 대화체로 풀어냈다.

그래서 포기하지 않고 마지막까지 읽을 수 있었다.

디자인 패턴의 근간이 되는 9가지 디자인 원칙(캡슐화, 구성 우선, OCP 등)부터 실전에서 많이 사용하는 14가지 디자인 패턴(전략, 데코레이터, 싱글턴 패턴 등)까지 한 책으로 개념을 한 번에 확인할 수 있어서 좋았다.

또한 디자인 패턴 같은 경우 개념을 이해하더라도 디자인 패턴을 코드에 녹여내는 것이 힘든데, 자세한 예제 코드를 통해 디자인 패턴을 적용하는 법까지 나와있어 수월하게 공부할 수 있었다.

앞에서 설명한 개념을 연습 문제를 통해 제대로 익혔는지 확인할 수 있다.

책 내용이 재밌게 풀어져 있어 개념서의 역할을 제대로 못하면 어떡하지 싶었지만, 자세한 코드 리뷰와 연습 문제를 통해 재미와 자세한 설명 두 마리의 토끼를 잡은 책이다.

디자인 패턴을 처음 공부하는 분에게 추천하고 싶다.

 

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



> 책을 읽기 전, 나의 상황

 

 

여러 프로젝트를 진행하면서, 기획의 필요성과 중요성을 절실히 느꼈다.

특히 이번에 소프트웨어 분석 및 설계라는 과목을 수강하면서 UML이 얼마나 코딩에 도움이 되는지,

코딩은 실제 프로젝트에 있어서 작은 한 부분일 뿐이라는 것을 깨달았다.

 

나는 지금 무턱대고 코딩하지 않는 법을 배우는 중이다.

 

이 책은 개발자로 활동하고 계시는 분들이 추천하는 책이기도 한 것 같았다.

부담스럽지 않게 흥미를 돋우며 읽을 수 있는 책인 것 같아서 마음에 들었다.

 


> 리뷰

초보자도 전문가도 읽기 좋은 책

이 책은 실력 차이와 무관하게 디자인패턴을 공부하고 싶다면 무난하게 읽을 수 있다.

왜냐하면 UML에 대한 지식이 없고 프로그래밍을 잘 몰라도, 풍부한 그림들과 쉬운 설명들이 이 책을 이해하는데 어려움이 없도록 도와주기 때문이다.

 

컴퓨터공학과에서 수업을 들어보니, 로드맵이라는 것이 존재했고, 학생들이 이 로드맵에서 벗어나려고 하지 않는다. 단계별 학습이라는 것이 분명히 존재하고 따라가면 좋은 점도 있을 것이다.

하지만 소프트웨어를 분석하고 문제에 대해 정확히 탐구하는 과정은 어느 단계에 있든 배워두면 좋다고 생각한다.

 

이 책은 친절하게  디자인 패턴 이외의 기본 지식은 그림으로 이해를 도와 준다.

 

이와 같이 조금이라도 프로그래밍을 공부한 사람이라면 이해하기 쉬운 단순한 코드일지라도,

이를 모르는 사람이 '책에서 강조하는 개념을 이해하는데 방해받지 않도록' 도와준다.

지루할 틈이 없는 구성, 흥미유지에 최적화된 책

책 두께에 조금 당황했었던 것이 사실이다.

하지만 책을 조금 둘러보니 이해가 갔다.

 

이 책의 구성은 정말 지루할 틈이 없다. 각종 그림과 인터뷰로 궁금증을 덜어가면서도 재미있게 공부를 지속할 수 있다.  자기조절학습의 필수요소인 흥미유지는 이 책이 알아서 책임진다.

 

 

> 공부를 끝낸 뒤

 

이 책은 두고두고 계속 읽어보고 싶다.

내 코드가 유지보수에 탁월해질 수 있도록...



 

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

 

 

출처: https://blog.naver.com/sonrisa-bonita/222709715751

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

디자인 패턴의 중요성

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

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

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

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

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

헤드퍼스트 디자인패턴

 

 

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

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

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

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

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



출처: https://jaksam.tistory.com/51 [작삼심일의 블로그]

이 책에서는…

book


지금이야 다양한 디자인 패턴을 활용하고 또 필요에 따라 응용하기도 하지만 처음부터 그런 것은 아니었습니다. 학부생시절 강의를 통해 디자인패턴을 배웠으나 그 당시에는 디자인 패턴의 중요성을 깨닫지 못했습니다. 그 당시 학생수준에서 개발한 소스코드는 제출로 끝인 과제만 있었기 때문에 유지보수에서 일어나는 문제를 알 수 없었고 결과적으로는 디자인 패턴의 필요성도 느끼기 어려웠습니다. 그러나 상용 프로그램을 개발하기 시작하면서 부터 깨달은 점은 개발자는 새로운 것을 개발하는 시간보다 더 많은 시간을 기존에 개발되어 있는 소스코드를 수정하는 데 쏟는 다는 점입니다. 쉽게 말해 SW불변의 진리는 변화입니다.


계속 변화하는 SW

변화하지 않는 SW는 죽은 SW 뿐입니다. 즉 살아있는 SW프로젝트라면 변화할 수 밖에 없습니다. 개발자가 산출물을 빠르게 내는 것 보다 유지보수하기 좋은 코드를 짜는 것을 더 중요하게 생각하는 이유도 여기에 있습니다. 디자인패턴은 이러한 SW 유지보수하며 나올 수 있는 공통적인 문제를 객체지향 디자인 원칙에 따라 해결하는 가장 효과적인 방법 혹은 모범사례라 할 수 있습니다. 그리고 이 헤드퍼스트 책은 그 디자인 패턴을 가장 효율적으로 학습할 수 있는 책입니다. 이 책에서는 단순히 디자인패턴을 나열하며 소개하는 것을 넘어 객체지향적 디자인 원칙(설계 원칙)을 소개하고 그에 적합한 디자인패턴을 하나씩 소개합니다. 그 과정에서 디자인 패턴이 ‘왜 필요한지’를 충분히 공감할 수 있도록 구체적인 문제 시나리오를 설정하고 그 문제를 ‘어떻게 해결 할 것인지’를 단계별로 이해할 수 있도록 많은 지면을 할애해가며 차분히, 그리고 반복적으로 설명합니다.




헤드퍼스트 시리즈

헤드퍼스트는 독보적으로 실용적이고 효과적인 책입니다. 눈에 띄는 이미지와 구어체로 정보를 여러분 머릿속에 강제로 주입합니다. 어렵고 격식있고 정제된 문어체 대신 직관적이고 쉬운 구어체와 이미지들로 소화하기 쉬운 상태로 내용을 전개하는 등, 책의 구성 자체가 중요한 정보를 뇌리에 박히게끔 의도되어 있습니다. 은근 페이지가 많아보이는데 그 이유는 더 많은 내용을 설명하기 위해서가 아니라 더 쉽고 친절하게 설명하기 위해 지면을 투자하기 때문입니다. 이번 개정판에서는 전체적으로 이미지와 레이아웃이 깔끔해져서 가독성이 좋아졌지만 아이러니하게도 더 이상 예전의 헤드퍼스트 특유의 이질적인 느낌의 사진과 삽화를 볼 수 없는 점은 개인적인 아쉬움이 있습니다. 그러나 디자인 패턴을 의인화 하여 인터뷰를 하고, 퀴즈를 내고, 스승과 제자의 대담 등으로 구성되어 여전히 재미있으며 쉽고 빠르게 학습할 수 있도록 당신의 뇌를 말랑말랑하게 활성화 시켜줄 것입니다.




디자인패턴이란

디자인 패턴이란 Gof(Gang of Four)가 정립한 개념으로 SW개발(특히 유지보수/코드수정)에서 흔히 발생하는 문제들을 객체지향 디자인 원칙에 맞게 코드수준에서 해결하는 검증된 방법론 또는 코드 형식입니다. 이미 개발자 생태게에서는 상식수준으로 통용되어 장황하게 설명하는 대신 FactoryRepositoryAdapter 처럼 디자인 패턴 이름만으로도 어떤 문제를 어떻게 해결하고자 한 코드인지 정확하게 파악이 가능하여 훨씬 효율적으로 소통할 수 있게 해줍니다.

장황하게 설명했으나, 객체지향적 코드 패턴이라 이해하시는 걸로 충분합니다.
그보다 중요한 점은 개발자라면 상식으로 반드시 알아야한다는 것입니다.




abstract

객체지향 디자인 원칙이 아주 원론적이고 가장 추상적인 개념이라고 한다면 디자인 패턴은 이러한 디자인 원칙을 바탕으로 한 실제 코딩 유형 또는 전략에 해당합니다. 여전히 추상적인 수준이고 언어에 종속되지 않고 객체지향 언어라면 어느 언어에서나 적용할 수 있습니다. 그러나 디자인 패턴이 라이브러리나 프레임워크로 존재하기 어렵습니다. 그 이유는 대부분의 디자인 패턴이 실제 소스코드로 구현된 수준이 아닌 그 이상의 추상화를 필요로 하고 또 실제 용도에 따라 다르게 응용되거나 적용되는 방법이 다양하기 때문입니다. 실제로 Java에서도 옵저버 패턴이 java.util.Observer로써 존재했으나 Java9 부터 deprecate 된 사례도 있습니다. 결론적으로 디자인 패턴은 구현된 라이브러리로 참조해서 사용하는 대신 패턴으로써 필요한 순간에 개발자가 자신의 목적에 맞게 직접 구현해야하므로 디자인 패턴을 언제 어떻게 사용해야하는지 확실하게 이해하고 있어야 합니다.




결국엔 추상화와 인터페이스

궁극적으로는 디자인패턴은 추상화 통해 SW의 본질인 수정과 유지보수에 유리한 구조를 만드는 작업이라고도 할 수 있겠습니다. 디자인패턴은 결국 어떤식으로 추상화를 하느냐, 즉 인터페이스 설계에 관한 이야기라고 봐도 무방합니다. 클래스의 책임을 나누어 결합성을 낮추고 그래서 수정으로 인한 영향을 다른 클래스에 전파하지 않도록 하거나, 비슷한 역할을 모아서 응집도를 높여서 관리포인트를 줄일 수도 있습니다. 이 책에서는 객체지향의 추상화가 무엇인지 다시 한번 고민해보게끔 도와주며 또 객체지향 디자인 원칙만으로는 실무 수준에서 코드를 설계하는데 모든 문제를 대응할 수 없는 이유를 다시금 설명합니다. 대표적으로 학부생 시절에 상속을 통해 재사용성을 높인다고 배운 점이 실제로는 어떤 부작용을 초래하는지 등 사례를 통해 실전레벨의 추상화를 배우실 수 있습니다.




이런 사람들에게 추천합니다.

개발경력을 이제 막 시작한 주니어 개발자에게 강력 추천합니다.

만약 1~3년차정도의 주니어 개발자가 성장에 정체기가 왔다면, 혹은 주니어 티를 벗고 이제는 중니어(?) 개발자가 되고 싶다면 이 책으로 시작해보세요. 개발자의 학습을 돕는 많은 자료는 초심자를 위한 입문서거나 아니면 아예 수준급 전문가를 위한 내용인 경우가 많습니다. 하지만 반대로 입문 이후 실무를 뛰면서 생기는 고민들을 해결해주거나 내공을 쌓기위해 볼만한 자료들을 생각보다 찾기 어렵습니다. 이 책은 그런 점에서 주니어개발자라면 꼭 한번 읽어볼 책으로 강력히 추천드립니다. 또 이미 어느정도 연차가 있으신 분들도 이 책을 읽으면서 디자인 패턴을 잘 사용하고 있는지, 또 객체지향 디자인 원칙을 잘 준수하고 있는지 되돌아보기 위해 읽어보는 것도 좋을 것 같습니다. 하지만 아직 실무 경험이 없는 학생이라면 이 책을 읽어보는 것도 분명 도움이 되겠지만 와닿지 않을 수도 있을 것 같습니다. 헤드퍼스트 시리즈인 만큼 학생도 충분히 읽을 수는 있으나 아무래도 유지보수 경험이 생긴 이후에 좀 더 그 의미를 공감하면서 재밌게 읽으실 수 있을 것입니다. 그러나 신입 개발자분들이라면 오히려 이 책을 읽고 모든 것을 디자인패턴으로 구현하려는 디자인패턴-만능주의에 빠지는 개발자-사춘기에 빠질 수도 있으니 주의가 필요합니다. 물론 그 순간을 슬기롭게 지나고 나서, 어느새 성장해있는 본인의 모습을 발견하실 수 있을 것입니다.

◎ 추천 포인트

  1. 원서의 미국인 취향 이미지를 한국인 취향으로 완전 변경
  2. “GoF의 디자인 패턴”을 보기전 몸풀기
  3. 가벼운 마음으로 읽을수 있는 구성
  4. 1판을 본적 없다면…

 

몇년 전에 읽어본 책인데, “16년만에 개정된 한국 특별판”이라는 문구에 끌려 보게 되었다.
헤드 퍼스트 디자인 패턴은 “GoF의 디자인 패턴”중 많이 쓰이는 패턴을 쉽게 이해해도록 구성된 책이다.
이미 유명한 책이서 내용에 대해 크게 리뷰할 것은 없어 보인다.

결론부터 말하자면, 1판을 본사람은 굳이 또 볼 필요는 없겠다.
한국 특별판은… 그림이 다를 뿐이다.


이런 미국인 취향에서


이런 한국의 그림스타일로 바뛰었다.
내용의 변경점은 거의 느낄수 없었다.

 
사실 이런 그림을 미국인이 아닌 우리나라사람이, 그것도 요즘 세대에서 보면 이해하기 어려울 것 같다.
헤드퍼스트라는 시리즈에서 추구하는 학습방법면에서 오히려 걸림돌이 될수도 있다.
그런 부분을 우리나라 독자에 맞게끔 초월번역한것은 칭찬받아 마땅할 것이다.

하지만 한국만의 이미지를 제외하고 나면 단점도 좀 보인다.
우선 시인성이 많이 떨어진다.
1판과 달리, 2도 인쇄를 한건 좋은데… 색 선택이 잘못된것 같다.
 
그림의 느낌을 살리기 위해서 인것 같은데… 진한 남색 같은 색을 썼으면 더 좋았을것 같다…

내용면에서 보자면 1판과 바뀐게 거의 없다.
GoF 디자인 패턴이 바뀐게 없으니 당연할 수도 있지만, 뭔가 새로운 예시나 현대적인 내용이 추가된것이 없다.
1판을 본 사람이라면 굳이 볼필요가 없겠다.

그리고, 헤드퍼스트 특유의 구성이 안 맞는다면 오히려 보기 않좋을 수도 있다.
개인의 취향에 따라 조금 난잡하거나 혼란스럽게 느낄수도 있다.
그리고, 600페이지나 되는 볼륨치고 내용은 그리 많지 않게 느껴진다.
몇개의 주요 패턴 위주로 구성되고, 나머지는 가볍게 소개하는 수준이다.
(경우에 따라선 핵심적인것만 살펴볼수 있으니 이게 장점일 수도 있다.)

오늘 리뷰할 책은 정말 오랜만에 개정판이 나온 반가운 책이다.
 
소프트웨어를 개발하는 사람들에게, 특히나 자바 개발자들에게 정말 유용한 [헤드 퍼스트 디자인 패턴] !!!
 
 
 

신판 표지.jpg

 

 
이 책이 특별히 반가운 이유는 내가 2005년 판을 가지고 있기 때문이다. 

수많은 한빛미디어와 오렐리 책이 있었지만, 

그동안 몇차례의 이사와 보관의 압박으로 상당수의 책을 폐지 수거하시는 분들에게 드렸었다. 

그 와중에도 특별히 이 책은 애정이 가는거라 보관하고 있었던거였다.
 
 

구판.jpg

 

 
신판의 목차와 책을 쭈~욱 빠르게 본 결과... 구판에 비해 내용상으로 크게 바뀌지는 않았다. 
 
IT가 워낙 빠르게 변하는 부분이지만, 디자인 패턴 자체는 거의 변화가 없는 부분이라 그럴 것이다. 
 
어쨌든 신판과 구판의 사진을 비교해보면...
 
- 구판의 단색 인쇄가 신판에서는 2색 인쇄로 바뀌어 가독성이 좋아졌다.

신판 코드.jpg

 

 
- 구판의 클래식? 복고풍? 사진들이 깔끔한 한국식 일러스트로 바뀌었다.
 
 

신판 그림.jpg

 

 
- 마지막에 목차 하나 정도가 추가
 
- 용지도 훨씬 고급진거로 변경
 
어쨌든 "헤드 퍼스트" 시리즈는 많은 그림과 함께 대화체로 쉽게 설명하는 내용들로 이루어진 시리즈 책이므로 
 
무조건 추천한다.
 
수많은 패턴들 중에서 엄선된 패턴들을 많은 그림, 자세한 설명, 자바 코드들로 설명하고 있고 챕터 뒤에는
 
퀴즈도 있다. 이 퀴즈는 재미도 있고, 공부한 내용을 확인하기 위해 꼭 풀어보길 권한다. 정답도 있으니까.
 
 

신판 퀴즈 정답.jpg

 

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

IMG_4125.JPG

 

 

우리나라에 헤드 퍼스트 디자인 패턴 책이 2005년 초판이 나온 이후 16여 년 만에 개정판으로 돌아왔습니다. 특히 이번 개정판은 한국 특별판으로 재탄생했습니다. 제가 가지고 있는 헤드 퍼스트 시리즈 책과 비교해 봐도 신경을 많이 썼다는 것을 느낄 수 있어습니다. 세련된 디자인과 일러스트레이션 들로 인해 이전 시리즈 들에서 느껴졌던 이질감 같은 것이 사라져 완전 새로운 시리즈의 책을 읽는 것 같았습니다.

 

소프트웨어를 설계할 때 중요하다고 하는 디자인 패턴이 워낙 종류도 많고 어떻게 배울 지 막막하던 참에 이 책을 만날 수 있어 행운이라고 생각했습니다. 그나마 제가 알고 있는 패턴 이라함은 MVC 패턴 뿐이었습니다. 아무래도 php로 웹 개발을 주로 하다보니 디자인 패턴에 대해 크게 고민하지 않고 배우지 않았던 것 같습니다. 게임회사에 근무 할 때 C# 게임 개발자 동료들이 옵저버 패턴, 싱글턴 패턴 등에 대해 이야기 할 때 무슨 이야기를 하는지 몰랐던 기억이 있습니다. 전에 이 책을 만나 읽었더라면 이야기에 낄 수 있었을텐데 아쉽습니다.

 

정말 간단한 Java언어 예제로 디자인 패턴을 설명하기 때문에 제가 사용하는 주언어가 아님에도 디자인 패턴을 학습하는데에는 크게 문제되지 않았습니다. 그리고 보통의 학습서들은 그림이 많이 나오지 않는데 헤드 퍼스트 시리즈 답게 적재 적소에 다양한 그림을 활용해 개념들을 설명하기 때문에 지루하지 않게 한 챕터 한 챕터 학습하실 수 있습니다.

 

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

 

이번 달은 디자인 패턴 관련 서적 중 인기가 많은 헤드퍼스트의 디자인 패턴을 받아 읽게 되었습니다.

 

부트캠프에서 멘토님께서 다양한 디자인패턴을 적용한 코드를 보여주셨기 때문에 패턴의 중요성에 대해 인지를 하고 있는 상태였고, 관련해서 공부를 하고 싶다는 마음도 있었습니다.

 

코딩 테스트, 자바, DB 등 팀원들이 진행하던 스터디 중 디자인 패턴도 물론 존재했고 이 책으로 진행하여 좋은 후기를 남겼던 것이 기억에 남아 이번 달 도서 목록에 이 도서가 있었다는 것이 굉장히 기뻤습니다.

 

개인적으로 디자인패턴은 객체지향 개념을 토대로 만들어졌기 때문에 자바 개념을 어느 정도 확립하고 공부하면 효율성이 더 좋다고 생각해 현재보다는 이후에 공부할 계획이었습니다.

 

하지만, 좋은 기회로 책을 제공받은 만큼 특정 패턴 몇 개만 집중적으로 읽어보고 후기를 남기기로 하였습니다.

 

헤드퍼스트 디자인패턴

 

 

책의 구성을 먼저 살펴보면 일반 서적과는 서술 방식이 많이 다르기 때문에 어떻게 책을 읽어야 하는지에 대한 방법이 서술되어 있고, 이를 기반으로 총 14개의 챕터(패턴)를 읽을 수 있습니다.

 

헤드퍼스트에 대한 저의 개인적인 경험은 부정적이었습니다. 왜냐하면 대학생 때 자바를 처음 접하던 시절 헤드퍼스트 서적을 택해 공부하였는데 아는게 1도 없던 시절에 그림이 다양하고 톡톡 튀는 느낌의 설명을 받아들이기 어려워 다른 책으로 학습했기 때문입니다.

 

하지만, 오늘 이 책을 읽은 결과 그림을 통한 예제와 대화체를 통한 의문 제기 등이 오히려 저에게 쉽게 다가와 내용을 쉽게 익힐 수 있었습니다.

 

1장은 디자인 패턴 소개와 간단한 예제를 통해 코드에 전략 패턴을 입히는 과정으로 진행되는데 해당 내용에 관해 간략하게 내용을 작성해보겠습니다.

 

 

Chapter 1. 전략 패턴

 

오리가 꽥꽥소리를 내고 헤엄을 치는 등의 관련 행동을 코드로 나타내면서 시작합니다.

 

어느 프로젝트나 그렇듯 먼저 동작하게 구현하는 것이 중요하기 때문에 Duck이라는 슈퍼클래스로 오리와 관련된 모든 코드를 작성합니다.

 

이후에 클래스를 확장해 나가면서 다른 종류의 오리를 만듭니다.

 

간단하게 생각하면 상속을 받아 메서드를 재정의해 사용하면 오리 종류별로 다른 행동을 나타낼 수 있다.

 

물론, 코드를 재사용할 수 있어 좋은 방법이라고 생각할 수 있지만 유지보수를 생각했을 때 많은 코드가 중복되어 좋아 보이지 않는다.

 

이처럼 상속을 사용하면 코드가 중복되고, 모든 오리의 행동을 알기 힘들다는 단점이 있다.

 

그렇다면 상속 이외에 어떤 방법이 있을까? 

 

책에서는 먼저 디자인 원칙 중 첫 번째 원칙인 '애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분과 분리한다'을 추천하고 있습니다.

 

이 방법은 달라지는 부분을 먼저 찾고 캡슐화를 적용해 이외의 코드에 영향을 주지 않도록 하는 방법이기 때문에 시스템의 유연성을 향상할 수 있습니다.

 

위 개념은 모든 디자인 패턴의 기반이라고 알고 있으면 되는 만큼 패턴을 공부할 때 전제를 깔고 진행하시면 좋을 듯합니다.

 

이후에 변화하는 부분을 뽑아내고 두 번째 디자인 원칙인 '구현보다는 인터페이스에 맞춰서 프로그래밍한다'를 적용해보자.

 

나는 행동을 예로 들면 FlyBehavior이라는 인터페이스를 만들고 fly()라는 메서드를 만들어 이 행동을 필요로 할 때 구현체를 만들어 각기 다른 나는 방법을 만들어낼 수 있습니다.

 

이 방법을 사용하면 상속을 사용할 때 생기는 문제를 피하면서 재사용의 장점을 누릴 수 있습니다. 

 

추가로 setter를 사용해 동적으로 필요한 행동을 지정해 동작하도록 만들 수도 있습니다.

 

 

 

간단하게 한 챕터의 예제를 리뷰해보았는데 제 글보다 실제로 책을 본다면 그림을 통한 예제와 직접 대화를 나누는 것처럼 진행되어 훨씬 이해가 잘 될 것입니다.

 

총 14개의 패턴이 서술되어 있는 만큼 한 번 쭉 읽어본 후에 실제 패턴을 적용할 일이 있다면 해당 패턴을 집중적으로 다시 공부한다면 충분히 패턴에 중독될 수 있을 것이라고 생각합니다.

 

저도 객체지향에 대해 다시 공부하고 있는 입장이라 현재는 얕게 이해하고 넘어가지만 추후에 다시 읽어본다면 저에게 많은 도움이 될 것이라고 느꼈습니다.

 

600쪽이 넘는 방대한 양인만큼 혼자서 공부하면 지루할 수 있으니 스터디를 만들어 같이 공부하는 것도 좋은 방법이겠네요ㅎㅎ

 

쉽고 머리에 쏙쏙 박히는 디자인 패턴 서적을 원하신다면 강추합니다!!

 

 

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


헤드퍼스트 시리즈는 대화하듯이 재밌게 개발을 알려줍니다.

 

지금 알려드리려는 책도 그 시리즈 중 하나인데요.

알려드릴 책은 ‘헤드퍼스트 디자인패턴 개정판’입니다.

 

기존 책도 재밌게 읽었는데요.

14가지 GoF 디자인 패턴과 9가지 디자인 원칙도 알려줍니다.

 

실전에서 많이 쓰이는 디자인 패턴을 쉽게 풀어준 책입니다.

 

또한 패턴을 쓰지 말아야 하는 경우도 있는데요.

사용하지 말아야 할 때를 아는 안목도 필요합니다.

 

헤드퍼스트 디자인 패턴책을 같이 알아보겠습니다.

 

 

4220423.jpg

 

 

◆ 디자인 원칙

사람들이 객체지향을 공부하고 적용을 하려 합니다.

 

하지만 적용을 제대로 못 하는 경우도 있습니다.

 

못하는 경우는 디자인의 근간인 디자인 원칙을 이해하지 못했기 때문입니다.

 

객체지향을 잘 적용하려면 캡슐화 원칙, 인터페이스 우선 원칙 등을 이해해야 합니다.

 

각장마다 연습문제도 있어서 공부한 내용을 복습도 하며 소화를 할 수 있을 것입니다.

 

 

2220423.jpg

 

 

◆ 객체지향에 대한 이해

객체지향을 처음 배울 때 상속을 쉽게 떠 올립니다.

 

시니어 개발자와 주니어 개발자가 대화하듯이 객체지향을 풀어냅니다.

 

주니어 개발자라면 개발하면서 고려하지 못하는 부분이 있을 수 있는데요.

개발할 때 고려해야 할 개념을 이해할 수 있도록 다이어그램과 일러스트로 코드 구성을 한눈에 볼 수 있습니다.

 

코드에도 상세한 설명이 되어 있어 설명을 참고하며 공부하면 됩니다.

 

이야기를 통해 객체지향을 여러 관점에서 생각해보며 학습할 수 있습니다.

 

 

3220423.jpg

 

 

끝으로 디자인 패턴을 알려줄 때 답을 알려줍니다.

 

그림 설명과 객체지향을 제대로 알아가는 과정을 알려줍니다.

 

핵심 용어를 공부하면서 알려준 것을 문제를 통해 체크할 수 있습니다.

 

개정판이 한국 독자만을 위해 재탄생했단 부분이 더 의미 있었습니다.

 

개정판의 좋은 점은 자바 8부터 최신버전인 자바 16까지 문제없이 작동하도록 예제코드도 수정이 되었습니다.

 

디자인 패턴을 재미있게 공부하며 여러 관점에서도 생각할 수 있는 질문도 던져줍니다.

 

GoF 디자인 패턴의 핵심을 공부하고 싶은 분들에게 이 책을 추천합니다.

 

1220423.jpg

 

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

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

 

 

챕터 1에서 읽으면서 이걸 왜 해야하는 거지? 하고 갖고 있던 문제집을 봤다.(사실 이 책을 읽는 이유 중 하나는 내가 여태 자격증 하나를 제대로 못 따서 그런 것도 있다..) 읽고 왜 챕터 1에서 이런 예시를 들어가며 이야기를 풀어갔는지 납득했다.(기껏 눈높이 교육을 해주고 있는데 받아먹지 못하는 내 자신을 되돌아보며 약간 고민 좀 하고)

 

 

대상 독자는 전문가 수준으로 요구하지는 않지만 그래도 자바나 C#을 어느 정도 알고 있는 사람들이 대상이다. 그리고 참고서 같은 책을 찾는다면 이 책은 별로 좋은 책이 아니라고 하는데 개인적으로 이 정도면 충분히 참고서아닌가 싶다. 자격증 공부하면서 이게 뭔 소리야.. 하고 아리송했던 그 디자인패턴에 대해서 개인적으로 정말 아주 만족스러운 예시로 설명해주고 있었다. 특히 학습만화같은 느낌의 흐름이 있어서 좀 글자만 있어서 눈이 감길까 싶은 걸 방지해주는 거 같기도 하다.

이 책은 유명한 IT도서 시리즈 해드퍼스트의 디자인패턴 개정판이다.

내가 개발공부하면서 정말 많은 도움을 받았던 해드퍼스트 시리즈 이기 때문에

개인적으로 신뢰도가 높다.

이 시리즈의 공통점은 독자가 효율적으로 학습하기 위해 상당히 노력을 기울였다는 것이다.

어떠한 개념을 설명하기 위해 효과적인 예시와 이야기 형식으로 문제를 다룬다.

학습자와 같은 시선으로 따라 들어가 문제가 발생하고 해결하기 까지 같은 시선으로

충분한 이해를 돕는데 탁월하게 구성이 되어있는게 특징이다.

따라서 어떠한 개념에 대해서 처음 접하는 입문자에게 큰 도움을 준다.

하지만 이러한 특성 때문에 어느정도 기초적인 개념을 알고 필요한 부분만 참고하기에는

적절하지 못하다는 특징이 있다.

그렇기 때문에 해드퍼스트 시리즈는 보통 입문자에게 추천을 한다.

하지만 이 책은 다르다 디자인 패턴자체가 한번 읽고 체득하는게 아니라

테스트 주도 개발(TDD)과 같이 계속해서 갈고 닦아야 하는 기술이다.

계속 보면서 이해하고 깨닫고 다시 보면서 내것으로 만드는 과정이 필요하다.

(디자인패턴이든 TDD 제대로 할줄도 모르는건 안비밀)

디자인패턴?

여기서 말하는 디자인 패턴을 풀어서 이야기 하자면

프로그램 개발중에 접할 수 있는 다양한 경험들에 대해서 일종의 베스트 프렉티스(Best Practice)를

패턴화 하여 정립한 것을 말한다. 최선책이지 절대적인 방법을 말하는 것은 아니다.

어느정도 프로그램의 작성경험이 있는 독자가 본다면 자신이 자연스럽게 작성했던 패턴과 비슷한

형태를 가지고 이름을 지었다는 생각을 가질 수도 있다.(천재인가? 나는 아님)

나름대로 정의한 단순한 정의는

경험의 재사용성 극대화

-내 생각-

소스코드 작성에 있어서 재사용성의 대한 효율성을 극대화 하기위한 개념이 발전한 것이라 생각한다.

어떠한 값을 재사용하기 위해 변수를 사용하고 그것이 진화하여 같은 형태의 값들을 재사용하기위한 효율적인 방식[배열] 더 나아가 [구조체나], [클래스]의 형태로 점점 개념이 진화하고(물론 클래스는 이것 이상의 개념이 있지만)

점더 큰 개념으로 [디자인패턴]이라는 "경험"을 재사용하고 그것이 보다 더 큰 개념에서 [프레임워크]라는 것을 통해서 재사용성을 극대화 시켰다라고 생각한다.

모든 것이 재사용성이라는 효율성을 극대화해서 생겨난 개념이라 생각한다.

그리고 소프트웨어에 이 같은 개념이 하드웨어로 넘어가는게 점점 확대 되면서 이 세상도

극단적으로 효율성을 추구하고 있다.

이제는 세상에 비효율적인 것이 사라지고 효율적인 것들만 남게 될 것이다.

그..그렇다면 이제 나도.....

계속 글을 작성하면 망언을 할 것 같아서 여기까지만 작성해야겠다.

 
 

-->

 


[도서 소개]


유지관리가 편리한 객체지향 소프트웨어 만들기!


“『헤드 퍼스트 디자인 패턴(개정판)』 한 권이면 충분합니다!”


이유 1. 흥미로운 이야기와 재치 넘치는 구성이 담긴 〈헤드 퍼스트〉 시리즈!

하나의 패턴에 하나의 이야기를 담았습니다. 틀에 박히지 않아 지루할 틈이 없는 구성과 친구와 이야기하듯 편안한 대화체로 이야기를 풀어냅니다. 이야기 속에 다양한 방법으로 해결할 수 있는 질문과 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++등 객체지향 언어를 안다면 이해를 할수 있습니다.)

  • 참고서를 원하는 전문 객체지향 디자이너나 개발자

  • 특정 디자인이나 개발 전문가가 볼 만한 참고서를 찾는 사람

  • 뭔가 새로운 형태에 대해서 싫어하는 사람

  • 자바 컴포넌트를 의인화한 책은 제대로 된 기술서가 될 수 없다고 생각하는 사람



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

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

우선은 그동안 가지고 있던 선입견을 깬 책이었다.

그 전에 읽었던 '헤드퍼스트' 시리즈는 때문에,

이 시리즈는 입문용으로 깊이가 얕고,

많은 이미지와 독특한 구성으로 쉽게 접근할 수 있지만, 다루는 내용은 많지 않다.

그리고, 같은 내용을 반복하는 경향이 많다.

하지만, 이 책은 많이 달랐습니다.

다른 책과는 다른 독특한 구성을 가지고 있는 것은 동일하지만,

다루는 내용은 다른 디자인 패턴책보다 부족하지 않습니다.

특히 예제 소스는 가장 충실하다고 생각됩니다.

서평 중에 패턴 수업은 이 책으로 충분했다라고 써 있어서,

과장이라고 생각했지만, 책을 다 읽은 후에 생각은 동감입니다.

이 책에서도 이 책을 읽은 후에 GOF의 책을 읽어보라고 추천하지만,

만약 제가 패턴 스터디를 한다면 이 책만을 가지고 진행하려고 합니다.

패턴도 충실하게 다루면서, 객체 설계에 대한 디자인 원칙도 다루고 있으며,

개발자가 생각할 꺼리도 많이 던저 주고 있습니다.

지금까지 본 디자인 패턴 책 중에서는 최고의 입문서라고 생각합니다.

 

객체지향 언어로 소프트웨어를 개발하면서 필수로 알아야 하는 디자인 패턴을 정리해놓은 책이 이번에 개정판으로 돌아왔다. 바로 "헤드퍼스트 디자인 패턴"이 그 주인공이다. 이 책은 우리의 좌뇌와 우뇌가 골고루 일 할 수 있도록 알차게 구성되어 있다. 독자가 책을 더 깊이 있게 이해하고 흥미롭게 읽을 수 있도록 글과 그림을 적절히 섞어뒀다. 아마 오랫동안 머릿속에 기억될 듯한데 하나씩 살펴보도록 하자. 

 

 

 

호기심을 한껏 당겨주는 도입부가 인상적이다. 헤드퍼스트에서 발간되는 모든 책에 들어가는 내용인지는 모른다. 헤드퍼스트 책은 처음이라. 많은 페이지에 적절하게 그림이 들어가 있다. 지금까지 이런 책은 처음이다.

 

 

 

독자가 진심으로 공부할 수 있도록 두뇌를 정복하는 방법까지 지면으로 설명하고 있다. 이 정도면 패턴 가스라이팅(...) 훌훌 읽지 말고 제대로 공부해야 한다. 책을 어떻게 읽어야 할지 충분히 설명하고 있기 때문에 이대로만 읽어주면 된다. 책 옆에 필기도구는 필수다. 책에 낙서하는 걸 좋아하지 않는다면 연습장에라도 적어보도록 하자. 충분히 학습됐다고 보이면 누군가에게 설명한다고 가정하고 패턴에 대해서 이야기를 해보자.

 

 

 

클래스 다이어그림을 통해 단계적으로 설명하기 때문에 용어적인 어려움만 없다면 따라가는데 어려움은 없을 것으로 보인다. 위에 이미지를 보면 알 수 있듯이 객체가 서로 어떻게 연결되어 있는지 아주 친절하게 설명되어 있다.

책에는 무려 14가지 필살 패턴이 정리되어 있다. 독자에 따라서는 이미 알고 있는 패턴이 있을 수 있고, 경험적으로 개발은 해왔지만 패턴의 이름은 몰랐던 경우도 있을 수 있다. 자, 그럼 개발이 처음인 독자에게는 어떨까? 분명 이 책은 아주 훌륭한 책이다. 그리고 심지어 재밌다. 하지만 전제가 필요하다. 위에서 언급한 것처럼 용어적인 어려움이 없어야 하는데 거기에는 프로그래밍 언어 Java도 포함된다. 추가로 비즈니스 설계 경험이 있다면 조금은 읽기 수월할 거다. 혹은 센스가 있거나.

막연하게 이 책에 있는 내용을 머릿속에 털어 넣으려고 하는 순간 지옥 같은 시간을 보내게 될지도 모른다. 혹시 책을 읽다가 어렵다면 그 부분은 훌훌 넘어가도 좋다. 나중에 경험이 더 쌓였을 때 다시 읽어보면 되니까. 책을 읽으며 아주 잠깐이라도 지루하게 느껴진다면 잠시 쉬어가시라. 이 책은 뇌가 충분히 말랑말랑해져 있는 상태에서 즐겁게 상상하며 봐야 하는데 잘못하면 눈만 따라가게 될 테니까.

 


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

책소개


몇년전 디자인 패턴을 공부하기 위해 처음 찾은 책은 그 유명한  GoF의 디자인패턴 이었다. 그때 당시를 생각하면 완독을 했었지만 몇 프로나 이해를 하고 봤을까 하는 생각이 든다. 그 후 계속해서 개발을 해오면서 자연스럽게 디자인 패턴을 코딩하는데 사용하였지만 디자인 패턴을 이용하여 만들어야지 또는 이런 문제는 이런 디자인 패턴을 써야지 하고 생각하면서 코딩을 하지는 않았다.

그 이유를 이번에 나온 헤드 퍼스트 디자인 패턴(개정판)을 읽으면서 느낄 수 있었다. 나는 아직까지도 디자인 패턴을 이해하고 활용할 수 있을 정도로 정확히 알지는 못한다는 것이었다.

이번에 나온 헤드 퍼스트 디자인 패턴(개정판)은 지금까지 개발한 코드를 생각하면서 읽게 되었는데 다시 한번 패턴을 이해하고 생각할 수 있게 해 준 고마운 책이었다.


이 책에 대해 간략히 소개하자면 14가지의 패턴(전략, 옵저버, 데코레이터, 팩토리, 싱글턴, 커맨드, 어댑터, 파사드, 템플릿 메소드, 반복자, 컴포지트, 상태, 프록시, 복합)을 일상에서 발생하는 상황(고무오리, 커피공장, 리모컨, 피자 등등 )을 이용하여 설명하고 있다.

기본적인 상황설명을 먼저 하고 그에 따른 클래스/객체를 만들고, 패턴을 설명하고, 다이어그램을 그리는 방식으로 진행하며 각 패턴에 따른 객체 지향 프로그래밍 원칙들을 설명한다.

중간중간에 이해한 내용을 기반으로 직접 써가며(코딩이나 이해를 완성하기위한 퀴즈 등) 배울 수 있게 공간을 제공한다.

책 말미에 디자인 패턴으로 생각하기나 14가지 패턴 외의 9가지 패턴을 간단히 설명하고 있는 부분도 설명되어 있다.

이렇게 이책은 주요한 패턴은 상세한 상황을 기준으로 자세히 설명하고, 독자를 이해시키기 위한 장치를 여러 내용으로 보여 주며, 그외 패턴도 간략하게나마 설명을 하여 완성된 구성으로 이루어져 있다.

 

총평


지금은 구글링이나 다른 많은 책들에서 디자인 패턴에 대한 내용을 접할 기회는 많고 굳이 책까지 보면서 디자인 패턴을 이해할 필요가 있나하고 생각하는 분들이 많을 수 있으나 자바 초급자나 나 같이 디자인 패턴을 알고 있지만 정확히 이해하고 활용할 수 없었던 분들은 이 책을 꼭 추천 드리고 싶다. 현존하는 디자인 패턴관련 정보 중에 가장 쉽고 이해할 수 있게 해 줄 수 있을 거라 자신한다.

단, 이 책 서두에서 밝히듯이 이 책은 디자인 패턴에 대한 이해를 돕는 책이지 코딩을 가르치는 책은 아님을 알아야 한다.


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

 

개발을 하다보면 언젠가 꼭 만나게 되는 디자인 패턴

사수가 없어도 책으로도 쉽게 이해할 수 있도록 된 책 들중 원탑!

  제목에서 알 수 있듯이, 디자인 패턴 설명하고 있는 책이다. 다 다루는 것은 아니다. 실무에서 자주 사용하는 디자인 패턴들을 집중해서 다루고 있다. (14가지 패턴 : 전략패턴, 옵저버 패턴, 데코레이터 패턴, 팩토리 패턴, 싱글턴 패턴, 커맨트 패턴, 어댑터 패턴, 퍼사드 패턴, 템플릿 메소드 패턴, 반복자 패턴, 컴포지트 패턴, 상태 패턴, 프록시 패턴, 복합 패턴) 그 면이 오히려 좋았다. 책은 총 654페이지로 굉장히 두꺼운데, 그림이 대다수를 차지하고 있다. 일부로 가독성+학습을 위해서 책의 한페이지를 글로 꽉꽉 채우지 않은 것 같다.

  책이 IT 책치고는 굉장히 친절한 편이다. 책 쓰신 분이 뇌 과학에 관심이 많은 듯했다. 어찌되었든 이 책 앞단에서 말하는 것에 따르면, 두뇌는 사물보다는 사람에게 더 많은 관심을 가지기 때문에 책에서도 여러 사람이 등장하고, 사적인 대화체를 많이 사용했다고한다. 읽을 때보다 어떤 일을 실제로 할때 더 잘 배우고 더 잘 기억하기 때문에 연습문제도 많이 배치했고 양쪽 두뇌를 모두 사용할 수 있는 내용을 담았다고 한다.   여러 디테일을 신경쓰면서 열심히 만들으셨다고 한다. 덕분에 디자인 패턴책은 전공책스럽겠지라는 편견을 깨버리고, 의외로 재밌었다..

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다
 
개정판이 나왔다고 하길래 예전 헤드퍼스트 디자인패턴은 언제 나왔는지 찾아보니 와우 2005년도에 책이 나왔었네요. 
헤드퍼스트 시리즈를 처음 접했을때 꽤 놀라왔습니다. 기술적인 책도 이렇게 쉽고 재밌게 읽힐 수 있구나 하는.
만화책을 보는 듯한 큼지막한 일러스트에 대화형의 말풍선 문장들, 개인 노트에 포스트잇을 추가로 붙여놓은 거 같은 설명등으로
워드문서를 읽는게 아닌 파워포인트 문서를 보는거 같은 느낌이 듭니다.
 
이미 수많은 디자인 패턴 책, 온 오프라인 강좌등이 있습니다. 구현코드까지  올라온 것도 많아서 프로그래밍을 좀 해본 사람들은 쉽게 가져다가 사용할 수 있습니다. 하지만 설명의 방향이 일방적이죠.  어떤 문제를 해결하기 위해 그런 패턴이 만들어졌고 다른 비슷한 패턴들과의 차이가 무엇일지 충분히 이해하지 못했다면 다음에 비슷한 문제가 생겨도 스스로 고민해서 해결하기보다 검색해서 붙여넣기할 가능성이 높습니다.

이 책은 사용자가 해결하고픈 고민이 생겼을때 (시니어개발자나 그 내용을 잘 아는 )동료를 찾아가 바로 옆자리에서 1:1로 페어프로그래밍하듯 대화하면서 문제를 해결해 나가는 식으로 구성되어 있습니다.
사용자가 고민할때 독자도 그 문제를 어떻게 해결할 수 있을지 같이 고민합니다. 
사용자는 이제 동료에게 자기가 생각하는 내용과 궁금한 내용들을 동료에게 얘기합니다. 기존 코드가 있고 동료가 개선사항을 얘기하면 사용자는 고민하고 추가 질문을 합니다. 그러면 또 동료가 그 질문에 대답을 해줍니다.
이 과정은 체크박스 퀴즈, 크로스워드퀴즈 줄긋기 퀴즈, 주관식 문제등을 통해 독자도 같이 고민하면서 내용을 머릿속에 잘 기억할 수 있도록 해주고 있습니다.

하나의 챕터가 끝날때마다 해당챕터의 글과 다이어그램등으로 내용을 정리해주고 있습니다.  뒤로 갈수록 다른 패턴들도 학습하기 때문에 비슷해 보이는데 차이를 아직 잘 모르는 패턴들이 나올 수 있습니다.  각 패턴들을 의인화시켜서 대화식으로 구성한 후 (패턴)본인의 성격을 확실하게 드러내주고, 다른 패턴들과의 논쟁을 통해 차이점을 잘 부각시켜주고 있습니다.

예전에 나왔던 책과 구성이나 내용은 크게 달라지지 않았다고 느꼈지만
초보 개발자든 경력이 오래된 개발자이든 각자의 입장에서 다시금 디자인패턴에 대해 정리하고 익힐 수 있는 좋은 책인 거 같습니다.

이 책으로 디자인패턴을 공부를 처음 시작했는데
가장 좋았던 점은 어떤 패턴인지 직관적으로 설명하는 것이 가장 좋았습니다.
마치 패턴과 내가 대화를 하는듯한 느낌을 주는 느낌을 받았습니다.
이건 여담인데 제가 회사 면접때 디자인 패턴을 공부한적이 있다고 했고 특정 패턴에 대해 설명한적이 있었습니다.
그때 설명한 패턴이 어뎁터 패턴이었습니다. 저는 그 회사에 합격을 해서 지금도 잘 다니고 있습니다.
이것을 갑자기 말한 이유는 아마 제 합격이 가능한것은 이 책의 지분이 어느정도 있다고 생각합니다.
실제로 입사를 했을때 보다 먼저 구입을 하였습니다.

근데 이 책의 가장 큰 단점이 있었는데 그건 바로 너무  책 표지가 올드하다는 점입니다. 
제가 이 책을 처음 구입한것이 2010년 이후였던것으로 감안해도 너무 표지가 올드하였습니다.
책 내용이 아무리 좋아도 선뜻 책 구입이 망설여지는 그런 표지였습니다.
아마 이 책을 구입하는 대부분 사람들이 이 책이 얼마나 좋은지에 대해 소문을 들었기 때문에 이 책을 구입을 해도 과언이 아니라고
확신을 가질 수 있습니다.

그러다 새롭게 바뀐 이 책은 위에서 말한 단점이 하나도 보이지 않았습니다.
더 깔끔해졌고 읽기 편해졌습니다. 확실히 가독성이 높아졌다는 것이 느껴졌습니다.
전체적으로 크게 바뀐 부분은 없었지만 그 전보다 훨씬 읽기 편하게 변한것이 진심으로 느껴졌습니다.

부록/예제소스
자료명 등록일 다운로드
DOWNLOAD 예제소스 2022-05-11 다운로드
결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

도서판매처

리뷰쓰기

닫기
* 도서명 :
헤드 퍼스트 디자인 패턴(개정판)
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
헤드 퍼스트 디자인 패턴(개정판)
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
헤드 퍼스트 디자인 패턴(개정판)
구입처*
구입일*
부가기호*
부가기호 안내

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?