그렇다. 막상 상속과 다형성을 배우고 객체지향이 뭔지 배운 후에 뭔가를 짜다보면 항상 뭔가 답답한게 노답으로 느껴질 때가 있다. 분명 유지보수를 쉽게하고 효율적으로 내용을 추가하기 위해 객체 지향을 쓴다고 했는데 내 코드는 전혀 그렇지 않은 것이다..!

이를 해결하기 위해 디자인 패턴을 공부하자.

책에서는 자바를 사용하지만 여기에선 C++로 코드를 짜본다.


요약


1. 디자인 패턴의 세계에 오신 것을 환영합니다 : 디자인 패턴 소개

2. 객체들에게 연락망을 돌립시다 : 옵저버 패턴

3. 객체 꾸미기 : 데코레이터 패턴

4. 객체지향 빵 굽기 : 팩토리 패턴

5. 세상에서 단 하나뿐인 특별한 객체 : 싱글턴 패턴

6. 호출 캡슐화 : 커맨드 패턴

7. 적응시키기 : 어댑터 패턴과 퍼사드 패턴

8. 알고리즘 캡슐화 : 템플릿 메소드 패턴

9. 잘 관리된 컬렉션 : 이터레이터와 컴포지트 패턴

10. 객체의 상태 : 스테이트 패턴

11. 객체 접근 제어 : 프록시 패턴

12. 패턴들로 이루어진 패턴 : 컴파운드 패턴

13. 실전에서의 디자인 패턴 : 패턴과 함께 하는 행복한 삶

14. 부록 : 기타 패턴


서문



책에 그림이 많은 이유는 두뇌의 관심을 유지하기 위함이라고 한다. (내 블로그에도 그림 좀 넣어야 할까?)

뇌에게 지루하지 않은 내용을 강제로 기억하게끔 하는건 쉬운일이 아니다.


머리를 들이밀고있는 표지가 특징이기도 한 이 시리즈의 헤드 퍼스트 원리란 다음과 같다.


1. 비주얼하게 만들기

단어를 관련된 그림 안에, 그 옆에 집어넣으면 관련 문제를 성공적으로 해결할 가능성이 두 배 이상 올라간다고 한다.

2. 개인적인 대화 형태의 문체

딱딱하고 형식적인 말투보다 개인적인 대화를 나누는 듯한 문체로 설명하는 경우에 학습 효과가 좋다.

3. 더 깊이 생각할 수 있도록 하자

연습문제, 질문, 감각을 활용할 수 있는 일 등등으로 동기, 흥미, 호기심, 사기를 불어넣어 뇌를 활발하게 움직이게 해야한다.

4. 독자가 계속해서 주의를 기울일 수 있게 하자.

뇌는 언제나 일상적이지 않고, 재미있고, 특이한, 눈길을 끄는것, 예상치 못한 것에 주의를 기울인다. 지루하게 하지 말자

5. 독자들의 감성을 자극하자

뭔가를 기억하는 능력은 내용이 얼마나 감성을 자극하는지에 크게 영향받는다. 놀라움, 호기심, 재미, 성취 등.


메타 인지(metacognition) : 생각하는 것에 대해 생각하는 것

더 빠르고 더 자세하게 배우고 싶다면 자신이 어떤 식으로 인지하는지에 대해 인지할 필요가 있다. 

무언가를 공부할 때 최대한 많은 것을 얻어내려면 두뇌를 풀가동해야한다. 그럴려면 배우는 것이 지금당장 생존에 필수적인 내용이라고 느끼게 해야한다. 그렇지 않으면 내용을 거부하는 뇌와 씨름할 수밖에 없다.


디자인 패턴을 중요한 것으로 인식하는 방법

느리고 지루한 방법은 반복에 의지하는 것이다. 

빠른 방법은 서로 다른 유형의 두뇌가 활동하게끔 하는 방법을 사용하는 것이다.

예를들어 어떤 단어를 설명하는 그림 안의 단어는 그 그림과 단어의 관계를 뇌가 해석하기 위해 더 활발히 움직인다. 활발히 움직이면 뇌는 더 중요한 것이라고 인식해 기억에 오래 남는다.

대화하는 문체가 나은 이유는 우리는 무의식적으로 대화를 이해하고 내용을 따라잡기 위해 노력하기 때문이다. 문체가 딱딱하면 대형 강의실에 앉아서 수업을 들을 때처럼 학습효과가 떨어진다.

책에서는

1. 그림과 함께하는 텍스트를 많이 사용한다. 

2. 같은 내용을 여러 방법으로 소개한다.

3. 개념과 그림을 예상하기 힘든 방법으로 활용한다.

4. 개인적인 대화를 하는 듯한 문체를 사용한다.

5. 연습 문제가 많다.

6. 여러 학습 유형을 섞어서 사용한다.

7. 좌뇌와 우뇌를 모두 사용할 수 있게끔 한다.

8. 여러 관점에서 볼 수 있게 한다.

9. 도전의식을 자극하는 연습문제, 뚜렷한 답이 없는 질문을 포함시킨다. 너무 어려운 문제는 없다.

10. 많은 사람들이 등장한다. (사람에 관심을 더 가지니까)

11. 80/20 원칙을 사용한다.


두뇌를 정복하는 방법

1. 천천히 많이 이해해

무작정 읽지 말고 쉬면서 생각하고 깊이 신중하게 생각할 수록 더 잘 배우고 기억할 수 있어

2. 연습문제를 꼭 풀어. 간단하게 메모도 하고

답을 보고 넘어가는건 다른 사람이 운동하는걸 보는 거랑 같아

3. 바보같은 질문은 없습니다. 부분을 반드시 읽어봐

4. 잠자리에 들기 직전에 마지막으로 책을 읽어봐

학습 과정중 일부는 책을 놓은 후에 일어나. 뇌에서 처리하는데 시간이 필요하기 때문이지. 그 과정중에 다른게 끼어들면 잊어버릴 가능성이 커.

5. 물을 많이 마셔

머리가 잘 돌아가려면 물이 많이 필요해

6. 새로 배운 걸 소리내서 말해봐

소리내서 읽을 때의 뇌는 눈으로 읽기만 할 때랑 다른 부분이 활성화되. 더 잘 이해하고 기억하고 싶으면 큰게 소리내서 말해봐. 설명하면 더 좋고. 더 빠르게 배울 수 있는데다 몰랐던 것도 새삼 알게되니까

7. 뇌의 반응에 귀를 기울여보자

지금 뇌가 너무 힘들어하고 있는건 아닌지 생각해봐. 대충 훑어보고 있거나 방금 읽은 걸 바로 잊는다는 느낌이 들면 쉬는 것이 좋아. 무조건 파고든다고 해서 더 빨리 배울 수 있는 게 아냐. 

8. 뭔가를 느껴봐

뇌가 지금 하는 게 중요하다고 생각해야해. 책 속에 나와있는 이야기에 몰입해봐. 책의 사진에 제목도 붙여보고. 아무거라도 느끼는 게 중요해

9. 직접 디자인 해봐

기존 프로젝트를 리팩터링해보거나 지금 디자인하고 있는 거에 새로운 것을 적용해봐. 해결할 문제랑 연필만 있으면 되. 경험할 수 있는 뭐든지 좋아.


'프로그래밍 책 공부' 카테고리의 다른 글

23장 길찾기  (0) 2018.04.02
2장 템플릿  (0) 2018.03.24
게임 프로그래머를 위한 자료구조와 알고리즘 - 목차  (0) 2018.03.23
1. 디자인 패턴 소개  (0) 2018.03.19