티스토리 뷰
책 한권 읽는게... 이렇게 힘들다니.. ㅜㅜ
단순히 읽는것도 힘들었지만, 실제 패턴 코드들을 보면 '아 그렇구나..' 라는 생각은 드는데 막상 내가 이걸 어디에 활용할 수 있을까? 라는 의문도 생기고, 나중에 이걸 기억했다가 쓰기도 힘들것 같다.
게다가 모든 패턴들이 다 납득? 이해? 가 되지도 않는걸 보면 아직은 내 실력이 많이 부족하구나.. 라는 생각이 든다.
열심히 노력해야지 ㅜㅜ
Chap 1. 이 책을 쓴 이유
- 과도한 설계
코드를 필요 이상으로 융통성 있게 또는 정교하게 만들 때, 이를 과도한 설계라고 한다. 어떤 프로그래머들은 시스템에 대한 미래의 요구사항을 알고 있다고 믿기 때문에 과도하게 설계한다. 오늘 설계를 좀 더 융통성 있고 정교하게 해두어, 내일의 요구사항을 수용할 수 있게 하는 것이 최선이라 생각하는 것이다. 그럴싸하게 들린다. 여러분이 무당이라도 된다면 말이다.
그러나 예상이 틀렸다면 귀중한 시간과 비용을 낭비한 꼴이 된다.
게다가 필요할 것이라 예상하고 만들었지만 전혀 쓰이지 않는 코드는 절대 없어지지 않는다. 그 코드를 제거하는 것이 귀찮거나 또는 언젠가 필요해질지도 모른다고 생각하기 때문이다.
과도하게 설계된 코드는 생산성에도 영향을 미친다. 그 코드를 받은 프로그래머가 그것을 마음대로 확장하거나 제대로 유지보수 하려면, 설계의 의미를 파악하기 위해 많은 시간을 투자해야 하기 때문이다.
-> 작고 단순하고 이해하기 쉬운 코드를 작성하는 데 주의를 기울여야 한다. (이게 말이 쉽지... 얼마나 어려운데 ㅜㅜ)
- 테스트 주도 개발(TDD)과 지속적인 리팩터링
1. 질문 : 테스트를 작성함으로써 시스템에 질문한다.
2. 대답 : 테스트를 통과하는 코드를 작성해 질문에 대답한다.
3. 정제 : 아이디어를 통합하고, 불필요한 것은 제거하고, 모호한 것은 명확히 해서 대답을 정제한다.
4. 반복 : 다음 질문을 물어 대화를 계혹한다.
Chap2. 리펙터링
- 리펙터링이란?
"겉으로 보이는 동작을 바꾸지 않고, 이해하거나 수정하기 쉽게 소프트웨어의 내부 구조를 바꾸는 것" (Martin Fowler)
- 리펙터링을 하는 이유
1. 새로운 코드를 더 쉽게 추가할 수 있도록 하기 위해.
2. 기존 코드의 설계를 개선하기 위해
3. 기존 코드를 더 잘 이해하기 위해.
4. 덜 짜증나는 코드로 만들기 위해.
"컴퓨터가 이해하는 코드는 어느 바보나 다 짤 수 있다. 훌륭한 프로그래머는 사람이 이해할 수 있는 코드를 짠다."
(Martin Fowler)
- "설계부채"는 다음 세 가지를 꾸준히 수행하지 않을 때 발생한다.
1. 중복 제거
2. 코드 단순화
3. 코드의 의도 명료화
: 설계부채로부터 완전히 자유로운 시스템은 거의 없다. 인간이 처음부터 완벽한 코드를 작성할 수 없기 때문에, 우리는 설계 부채와 떨어질래야 떨어질 수 없다. 자연스럽게 부채가 쌓여간다. 따라서 문제는 '빚을 언제 갚을 것인가?'로 바뀐다.
Chap3. 패턴
- 패턴의 진정한 성과는 패턴을 현명하게 사용할 때 나타난다. 리팩터링은 중복을 제거하고, 코드를 단순화하고, 코드가 그 의도를 잘 드러내도록 하는 데에 우리의 주의를 집중하도록 함으로써, 패턴을 현명하게 사용하도록 도와준다. 리팩터링을 통해 점진적으로 패턴을 도입하면, 패턴으로 인한 과도한 설계가 발생할 기회도 줄어든다. 그리고 리팩터링을 더 잘 이해할수록 패턴이 주는 즐거움을 이해할 확률도 높아진다.
Chap4. 코드속의 냄새
- 가장 흔한 설계 문제는 다음과 같은 원인들로 인해 생긴다.
1. 중복된 코드가 있다.
2. 코드의 의미가 명확하지 않다.
3. 코드가 복잡하다.
- 코드 속의 나쁜 냄새
: 중복된 코드, 긴 메서드, 복잡한 조건문, 기본 타입에 대한 강박관념, 추잡한 노출, 문어발 솔루션, 인터페이스가 서로 다른 대체 클래스, 게으른 클래스, 거대한 클래스, switch문, 조합의 폭발적 증가, 괴짜 솔루션
'독서' 카테고리의 다른 글
[독서] 흥분하지 않고 우아하게 리드하는 말센스 (0) | 2019.04.11 |
---|---|
[독서] 자네 일은 재미있나? (0) | 2019.02.23 |
[독서] 뼈 있는 아무 말 대잔치 (0) | 2019.02.17 |
프로그래머가 되기 전에 알았더라면 좋았을 것들 (0) | 2018.11.12 |
데일 카네기 - 인간관계론 (0) | 2018.07.26 |
- Total
- Today
- Yesterday
- 서삼독
- 독서
- 자기개발
- 메이트북스
- 블랙피쉬
- 토니로빈스
- 책리뷰
- graphql-java
- 오건영
- 강형욱
- 퇴근길인문학수업
- 한빛비즈
- 송희구
- 더숲
- 경제
- 인류3부작
- aws 자격증
- 유발하라리
- 재테크
- 사경인
- docker
- graphql
- 투자
- PostgreSQL
- 백상경제연구원
- 개리비숍
- 알에이치코리아
- 가나출판사
- ebs다큐프라임
- sethgodin
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |