Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

DOing

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

개발 TIP

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

mangdo 2022. 4. 17. 20:34

   현업에서 개발을 하다보면 느끼겠지만, 기획은 계속 변한다. 어제까지 분명 A라고 했는데 아침 회의에 갑자기 B도 아니고 C로 변해있는 경우도 있고, 열심히 다 만들었더라도 유저들이 다른 것을 요구하거나 새로운 기능을 원할 수 있다. 흔히 있는 일이고 사실 요구사항 변경은 SW의 본질이라고 할 수 있다. 그렇기에 변경 용이한 아키텍처를 작성하는 것이 개발자에게는 중요한 일일 것이다. '헤드퍼스트 디자인패턴'에서는 이런 변경에 용이한 코드를 작성하기 위해 패턴을 제안하고, 예제 코드들을 패턴을 적용해서 개선해나간다.

 

 

[ 책 소개 ]

재미없다고 돌려까는 건가..

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

  책이 IT 책치고는 굉장히 친절한 편이다. 책 쓰신 분이 뇌 과학에 관심이 많은 듯했다. 어찌되었든 이 책 앞단에서 말하는 것에 따르면, 두뇌는 사물보다는 사람에게 더 많은 관심을 가지기 때문에 책에서도 여러 사람이 등장하고, 사적인 대화체를 많이 사용했다고한다. 읽을 때보다 어떤 일을 실제로 할때 더 잘 배우고 더 잘 기억하기 때문에 연습문제도 많이 배치했고 양쪽 두뇌를 모두 사용할 수 있는 내용을 담았다고 한다.

  그냥 여러 디테일을 신경쓰면서 열심히 만들으셨다고 한다. 덕분에 디자인 패턴책은 전공책스럽겠지라는 편견을 깨버리고, 의외로 재밌었다.. (돈받아서 해주는 말이 아니고, 어짜피 돈은 안받았다. 책만 받았다) 주말에 몇시간 정도밖에 안봤지만, 벌써 150쪽까지 봤다. 심지어 남는 내용은 그 이상이라서 뒷부분이 궁금해지더라.

 

[ 책에서 인상 깊었던 파트: 옵저버 패턴 ]

  실제로 회사에서 쓰고 있는 패턴이기도 해서 집중해서 본 파트다. 책에 대해 두루뭉실하게 계속 설명하는 것보다, 이 파트에서 대충 어떤 흐름을 가지고 있는 지 설명하면 이 책에 대한 더 정확한 설명이 되리라고 생각한다.

옵저버 패턴 예제

1. 기상 모니터링 애플리케이션을 만드는 예제 + 요구사항 분석

   책에서 주어진 예제의 요구사항을 간단하게 설명하면 다음과 같다. "WeatherData 객체에서 현재 기상 조건을 측정할때마다, 디스플레이에 최신 기상 데이터들로 갱신해라" 추가적으로 고려해야하는 사항은 "나중에 다른 기상 조건(풍속)이 추가될 수도 있으며, 다른 디스플레이가 추가될 수 있다"라는 점이다. 확장성을 생각하고 설계해야하는 상황이며, 이를 위해서 옵저버 패턴을 적용해보고자 한다.

 

옵저버 패턴 구조

2. 옵저버 패턴 설명

  옵저버 패턴은 신문구독과 흡사하다. 신문사를 주제(subject)라고 하고 구독자를 observer라고 하자. 독자가 신문을 구독하면, 새로운 신문이 나올 때마다 배달을 받는다. 옵저버 패턴은 이와 굉장히 흡사하다.

 1) Subject에 객체를 옵저버로 구독한다.

 2) 옵저버로 등록되면, Subject의 데이터가 바뀔때마다 갱신 내용을 전달한다.

 3) 옵저버에서 나가게 되면, 더이상 갱신내용을 전달 받지 않는다.

옵저버 패턴이란?
한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에 연락이가고 자동으로 내용이 갱신이 되는 방식으로 일대다(one-to-many) 의존성을 정의한다.

3. 옵저버 패턴 구조

  옵저버 패턴은 여러가지 방법으로 구현할 수 있겠지만, 보통은 Subject 인터페이스와 옵저버 인터페이스가 들어있는 클래스 디자인으로 구현한다. Observer 인터페이스만 구현한다면 무엇이든 옵저버 클래스가 될 수 있다. 각 옵저버는 특정 Subject의 registerObserver()를 통해서 등록 할 수 있다. Subject 역할을 하는 구상 클래스에는 항상 Subject 인터페이스를 구현해야한다. 옵저버를 등록하는registerObserver()와 옵저버 등록을 취하는 removeObserver(), 상태가 바뀔때마다 모든 옵저버에게 연락하는 notifiyObservers()가 있다.

* Publish-Subscribe vs 옵저버 패턴

  연관은 있지만 같은 패턴은 아니다. 구독자가 서로 다른 유형의 메시지에 관심을 가질 수 있고, 출판사와 구독자를 더 세세하게 분리할 수 있는 복잡한 패턴이다.

 

4. 옵저버 패턴를 구현하여 예제를 해결한 코드

- Subject를 구현한 WheaterData 클래스
  : 기상을 측정하고, 측정할때마다 옵저버인 디스플레이들에게 최신 데이터들을 알려준다. 

 

- 옵저버를 구현한 Display 클래스

 

- 테스트

 

5. 중간중간 등장하는 대화

중간중간 설계하는데 있어서 중요한 포인트들에 대한 대화들도 있다

 

 

 

[ 추천 독자 ]

아니다.

1. 자바를 잘하진 않더라도, 어느정도는 아는 사람

 예제 코드가 모두 자바로 되어있어서 자바를 아예 모른다면 어려울 것 같다. 그림이 워낙 많은 편이라서 "자바를 모르는 사람도 읽을 수있다!" 이런 의미인것 같은데, 예제코드가 워낙 좋아서 보고 코드를 보고 이해할 수 있는 사람이 보는 것이 좋을 것 같다.

 

2. 디자인 패턴 입문자

  나 역시 디자인 패턴을 따로 공부해본 적은 없었다. 이름을 듣긴 들었지만 뭐하나 제대로 이해한 패턴은 없었다. 근데도 설명이 워낙 잘되어있어서 책장이 술술 넘어간다. 반복해서 설명하는 것도 좋고, 예시가 이해가 잘되는 편이라서 좋았다. 그렇지만 이 책에서는 모든 디자인 패턴을 다루는 것은 아니다. 실무에서 자주 사용하는 디자인 패턴들을 집중해서 다루고 있다.

 

3. 객체 지향을 조금 더 잘 활용해보고 싶은 사람

  객체지향의 특징이라면서 달달 외워댄 "추상화, 캠슐화, 다형성, 상속"을 어떻게 하면 더 잘 적용할 수 있을지에 대해 다루고 있다. 개인적으로 나는 코드 재사용을 막기위해서 상속을 써왔었는데, 그러니까 생각지 못한 곳에 변화가 가해지는 문제가 있었다. 그래서 최근에 내린 결론은 "그렇게 버그를 낼 바에는 코드 몇줄 더 쓰겠다. 안전한 코드가 먼저다." 라는 생각이였다. 그렇게 반복된 코드를 짤때마다 약간 자괴감이 들고있었는데, 그런 상황들에서 적용해볼 수 있는 해법들을 제안해줘서 좋았다.

 

 

  운이 좋게도 내가 딱 추천 독자에 맞는 사람이였고, 그런 의미에서 개인적으로 정말 재밌게 본 책이다. 솔직히 아직 다 보진 못했고 14가지 패턴중에서 데코레이터 패턴까지만 본 상태이다. 지금까지는 굉장히 만족스럽고 공감이 많이 갔다. 한빛미디어에서 책받아서 해주는 말은 아니고 찐심임..ㅎ

 

 

   

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

 

'개발 TIP' 카테고리의 다른 글

애자일과 애자일 방법론  (0) 2021.11.01
떠오르는 협업용 메시저, 슬랙 사용기  (0) 2021.06.30
개발자의 notion 사용하기  (0) 2021.03.27