> For the complete documentation index, see [llms.txt](https://chloe-codes1.gitbook.io/book-reviews/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://chloe-codes1.gitbook.io/book-reviews/clean-code/01_-_.md).

# 1장: 깨끗한 코드

## TIL (Today I Learned)

2022.02.19 (SAT)

<br>

## 📕 오늘 읽은 범위

추천사 \~ 1장. 깨끗한 코드

<br>

## 💡 책에서 기억하고 싶은 내용

### 추천사

* 소프트웨어는 80% 이상이 소위 "유지보수"다.
* 책임 있는 개발자라면 제품 수명 주기까지 고려해야 한다.
* 읽기 좋은 코드는 돌아가는 코드만큼이나 중요하다.
* 소프트웨어 설계에서 재작업은 가치를 가져온다.

### 1장: 깨끗한 코드

* 기계가 실행할 정도로 상세하게 요구사항을 명시하는 작업, 바로 이것이 프로그래밍이다. 이렇게 명시한 결과가 바로 코드다. (p. 2)
* 나중은 결코 오지 않는다. (p. 4)
* 나는 우아하하고 효율적인 코드를 좋아한다. 깨끗한 코드는 한 가지를 제대로 한다. - Bjarne Stroustrup (p. 9)
* 깨끗한 코드는 세세한 사항까지 꼼꼼하게 처리하는 코드다. (p. 10)
* 깨끗한 코드는 단순하고 직접적이다. 깨끗한 코드는 잘 쓴 문장처럼 읽힌다. - Grady Booch (p. 10)
* 깨끗한 코드는 작성자가 아닌 사람도 읽기 쉽고 고치기 쉽다. - Big Dave Thomas (p. 11)
* 깨끗한 코드는 주의 깊게 작성한 코드다. (p. 12)
* 간단한 코드는 아래와 같은 코드이다. - Ron Jeffries (p. 13)
  * 모든 테스트를 통과한다.
  * 중복이 없다.
  * 시스템 내 모든 설계 아이디어를 표현한다.
  * 클래스, 메서드, 함수 등을 최대한 줄인다.
* 중복 줄이기, 표현력 높이기, 초반부터 간단한 추상화 고려하기. 내게는 이 세 가지가 깨끗한 코드를 만드는 비결이다. - Ron Jeffries (p. 14)
* 보이스카우트 규칙 (p. 18-19)
  * 잘 짠 코드가 전부는 아니다. 시간이 지나도 언제나 깨끗하게 유지해야 한다.
  * "캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라"
  * 변수 이름 하나를 개선하고, 조금 긴 함수 하나를 분할하고, 약간의 중복을 제거하고, 복잡한 if문 하나를 정리하면 충분하다.
* Agile Software Development: Principles, Patterns, and Practices(PPP)에서 이야기하는 원칙
  * `SRP (The Single Responsibility Principle)`: 클래스에는 한 가지, 단 한 가지 변경 이유만 존재해야 한다.
  * `OCP (The Open Closed Principle)`: 클래스는 확장에 열려 있어야 하며, 변경에 닫혀 있어야 한다.
  * `LSP (The Liskov Substitution Principle)`: 상속받은 클래스는 기초 클래스를 대체할 수 있어야 한다.
  * `DIP (The Dependency Inversion Principle)`: 추상화에 의존해야 하며, 구체화에 의존하면 안 된다.
  * `ISP (The Interface Segregation Principle)`: 클라이언트에 밀접하게 작게 쪼개진 인터페이스를 유지한다.

<br>

## ✏️ 소감 및 생각

> *"나중은 결코 오지 않는다"*

* 이 말이 참 와닿았다. 지금까지 개발을 하며 '이 부분 개선할 수 있을 것 같은데... 바쁘니까 리펙터링은 나중에 하자' 라고 했던 순간들이 머릿속을 지나갔다.
* 미래의 나에게 맡기지 말고, 현재의 내가 해결해야겠다고 다짐했다. 변화는 오늘부터!

> *"깨끗한 코드는 한 가지를 제대로 한다."*

* 내가 짠 함수는 한 가지를 제대로 할까? 하나의 함수에서 여러 가지 일을 하려고 한 것은 아닐까?
* 깨끗한 코드가 될 수 있도록 이 말을 명심해야겠다.

<br>

## ❓ 궁금한 내용 | 잘 이해되지 않는 내용

* PPP에서 이야기하는 원칙 5가지
  * `SOLID 법칙` 으로 알고 있으나, 그 내용을 깊이 알지 못했던 것 같다.
  * 이 부분을 사례와 함께 좀 더 깊게 알아봐야겠다
