📘 Read

클린 코드 | 깨끗한 코드

category
📘 Read
 
흔히 말해 깨끗한 코드, 클린 코드란 무엇일까요? 깨끗한 코드와 나쁜 코드를 어떻게 구별할까요? 궁금증을 해결하기 위해 클린 코드 책을 읽으면서 중요한 부분을 정리하겠습니다.

목차

이 책의 목차로는
  1. 깨끗한 코드
  1. 의미 있는 이름
  1. 함수
  1. 주석
  1. 형식 맞추기
  1. 객체와 자료구조
  1. 오류 처리
  1. 경계
  1. 단위 테스트
  1. 클래스
  1. 시스템
  1. 창발성
  1. 동시성
  1. 점진적인 개선
  1. JUnit 들여다 보기
  1. SerialDate 리팩터링
  1. 냄새와 휴리스틱
이렇게 17가지 목차와 3가지 부록으로 이루어져 있다. 책에 본격적으로 들어가기 전에 이 책을 읽으면서 가져야하는 태도&자세에 대해 나와있다.

클린 코드 책을 읽으면서 가져야 하는 자세

이 책을 읽고 난 다음에 한동안 프로그램을 짜기 싫어질 수도 있다. 본인이 여태까지 계속 나쁜 코드를 만들어 왔다는 것을 깨달았기 때문이다. 하지만 늦었다고 생각했을 때가 가장 빠를 때라 정신을 차린 다음에 프로그램을 짜고 있다. 과거와는 달리 조금 더 나아진 방법으로 코드를 만들기 위해 의식적으로 신경을 쓴다. 이 책의 앞부분에서 몇 가지 패턴과 규칙을 익혔다면 저자 머릿속에서 코드를 정리하는 흐름에 따라 코드를 깔끔하게 정리하는 후반부에 집중하도록 하자. - 박재호
본인이 여태까지 나쁜 코드를 만들어왔다는 것을 빠르게 인정하고 더 나은 코드를 만들기 위해 의식적으로 신경써라. 책을 읽으면서 앞부분에 나온 패턴과 규칙을 익힌 후, 후반부에 나오는 코드를 정리하는 흐름을 익히자.
 
뭔가 대단한 비법을 기대했다면 실망한 가능성이 크다. 오랫동안 개발에 몸담은 개발자라면 한 번쯤 들어보고 한 번쯤 생각한 이야기를 좀 더 체계적으로 정리했을 뿐이다. 이 책은 대충 읽고 넘기는 책이 아니다. 밑줄을 쳐가며 공부하는 책이다. 코드를 하나하나 짚어가며 저자가 코드를 고쳐간 방식을 이해하고 납득해야 가치를 발휘하는 책이다. 그 흐름을 따라가고 이해하려는 노력이 필요하다. 많이 고민하고 생각하는 만큼 여러분의 프로그래밍 실력이 늘어나리라 믿는다. - 이해영
이 책만 읽고 대단한 코드를 작성하는 개발자가 될거라는 기대는 버려라. 눈으로만 읽지 않고 손으로 필기를 하며 읽어라. 읽으면서 많이 고민하고 생각하며 저자의 의도를 이해해라.

깨끗한 코드를 작성하는 방법은 배우기 어렵다. 단순히 원칙과 패턴을 안다고 깨끗한 코드가 나오지 않는다. 고생을 해야 한다.
이 책은 세 부분으로 나눠진다.
  1. 깨끗한 코드를 작성하는 원칙, 패턴, 실기를 설명한다.
  1. 준비하는 단계, 코드를 깨끗하게 고치는 것을 연습한다. (집중력이 필요하다.)
  1. 결말, 수집한 냄새와 휴리스틱을 열거한다.
두번째 부분의 사례 연구를 주의깊게 읽어보지 않으면 가치를 발휘하지 못한다. 이 책이 그저 “기분 좋은 책”으로 머물지 않기를 바란다. 손으로 몸으로 마음으로 익히기 바란다.

1장. 깨끗한 코드

이 책을 읽고 나면
  1. 좋은 코드와 나쁜 코드를 구분하는 능력
  1. 좋은 코드를 작성하는 방법
  1. 나쁜 코드를 좋은 코드로 바꾸는 실력
을 얻을 수 있다.
 

1. 코드란 무엇일까?

요구 사항을 표현하는 언어
 

2. 나쁜 코드

이 놈은 어떻게 나오게 되었을까? 어째서 나쁜 코드를 짰는가?
급해서? 서두르느라? 제대로 짤 시간이 없다고 생각해서, 다른 업무가 너무 밀려 … 모두가 겪어본 상황이다. 우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경험이 있다. 물론 그때 그시절 우리는 르블랑의 법칙을 몰랐다. 나중은 결코 오지 않는다.
2-1. 나쁜 코드로 치르는 대가
  • 나쁜 코드가 쌓일수록 팀 생산성은 떨어진다.
  • 나쁜 코드는 개발 속도를 크게 떨어뜨린다.
 
나쁜 코드를 만들지 않는 유일한 방법은, 언제나 코드를 최대한 깨끗하게 유지하는 습관을 가지는 것이다.

3. 깨끗한 코드

그렇다면 깨끗한 코드는 무엇인가?
3-1. ‘비야네 스트롭스트룹’
  • 우아하고 효율적인 코드
우아하다 = 보기에 즐겁다. 따라서 깨끗한 코드는 보기에 즐거운 코드 라고도 할 수 있다
  • 의존성은 최대한 줄인 코드
  • 오류는 철저히 처리한 코드
이 말은 세세한 사항까지 꼼꼼하게 처리한 코드라고 요약할 수 있다.
나쁜 코드는 나쁜 코드를 ‘유혹’한다. 흔히 나쁜 코드를 고치면서 오히려 더 나쁜 코드를 만든다는 뜻이다.
 
3-2. ‘그래디 부치’
  • 설계자의 의도가 잘 보이는 코드
  • 명쾌한 추상화 & 단순한 제어문
가독성을 강조한다. 코드는 추측이 아니라 사실에 기반해야 한다. 반드시 필요한 내용만 담아야 한다.
 
3-3. ‘데이브 토마스'
  • 다른 사람이 읽고 수정하기 쉬운 코드
인간이 읽기 좋은 코드를 작성하자.
  • 의미있는 이름
  • 의존성은 최소화
  • 테스트 케이스가 존재하는 코드
아무리 코드가 가독성이 높아도, 테스트 케이스가 없으면 개끗하지 않다.
 
3-4. ‘마이클 페더스’
  • 누군가 주의 깊게 짰다는 느낌을 주는 코드
  • 모든 사항을 고려한 코드
 
3-5. ’론 제프리스’
  • 모든 케이스를 통과한다.
  • 중복이 없다.
같은 작업을 여러 차례 반복한다면 코드가 아이디어를 제대로 표현하지 못한다는 증거다.
  • 시스템 내 모든 설계 아이디어를 표현한다.
  • 클래스, 메서드, 함수 등을 최대한 줄인다.
 
3-6. ‘워드 커딩햄’
  • 읽으면서 짐작했던 기능을 수행하는 코드
코드를 독해하느라 머리를 쥐어짤 필요가 없어야 한다.
프로그램을 단순하게 보이도록 만드는 열쇠는 언어가 아니다. 언어를 단순하게 보이도록 만드는 열쇠는 프로그래머다.
 

4. 우리들 생각

우리가 가르치는 기법을 따른다면 깨끗하고 수준 높은 코드를 작성하리라 감히 장담한다. 하지만 우리 생각이 절대적으로 ‘옳다’라는 단정은 금물이다.
기법들을 보면서 무조건 ‘옳다’ 생각하지 않고 충분히 다양한 관점에서 고민해봐야 한다!
새 코드를 짜면서 우리는 끊임없이 기존 코드를 읽는다. 기존 코드를 읽어야 새 코드를 짜므로 읽기 쉽게 만들면 사실은 짜기도 쉬워진다. 읽기 쉬운 코드를 만들어라.
 

5. 보이스카우트 원칙

잘짠 코드가 전부는 아니다. 시간이 지나도 언제나 깨끗하게 유지해야하는 것도 중요하다.
캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라.