본문 바로가기

책책책/Clean Code

[Clean Code] 1장 - 깨끗한 코드

[Clean Code]를 읽으면서 정리하는 노트 📝

 

코드가 존재하리라 

코드는 요구사항을 상세히 표현하는 수단이다.
앞으로 프로그래밍 언어에서의 추상화 수준은 점점 높아지며, 특정 분야에 적합한 언어도 다양해질 것이다. 

나쁜 코드

우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경험이 있다. 우리 모두는 대충 짠 프로그램이 돌아간다는 사실에 안도감을 느끼며 그래도 안 돌아가는 프로그램보다 돌아가는 쓰레기가 좋다고 스스로를 위로한 경험이 있다. 다시 돌아와 나중에 정리하겠다고 다짐했었다. 물론 그때 그 시절 우리는 리브랑의 법칙을 몰랐다. 나중은 결코 오지 않는다.

나쁜 코드로 치르는 대가

  • 코드가 엉망이라 프로젝트 진도가 안나간다. 즉 개발 속도를 떨어뜨린다. 
  • 코드를 고칠 때마다 엉뚱한 곳에서 문제가 생긴다.
  • 나쁜 코드가 쌓일 수록 팀의 생산성이 떨어진다.

좋은 코드가 나쁜 코드로 되는 이유는 요구사항에 있는 것이 아니라 우리 프로그래머에게 있다.
좋은 코드를 사수하는 책임이 있기에, 나쁜 코드의 위험을 이해하지 못하는 관리자 말을 그대로 따르는 행동은 전문가답지 못하다.

기한을 마추기 위해, 빠른 속도를 내기 위해 나쁜 코드를 만들어내지만, 
사실 이 때문에 속도가 더 느려지게 된다.

깨끗한 코드라는 예술

잘 그린 그림을 구분하는 능력과 그림을 잘 그리는 능력이 별개이듯이, 
깨끗한 코드를 구별하는 능력과 이를 구현하는 능력은 별개이다. 

깨끗한 코드를 작성하려면 꾸준히 노력해 코드 감각을 익혀야 한다. 
이 코드 감각으로 나쁜 코드를 구별하고 이를 해결하려는 의지가 있어야 한다. 

깨끗한 코드란?

비야네 스트옵스트룹

  • 우아한 코드
    • 보기에 즐거운 코드. 보는 사람에게 즐거움을 선사해야한다.
  • 효율적인 코드
    • 단순히 속도가 빠른 것이 아닌 자원을 낭비하지 않는 코드
  • 철저한 오류 처리
    • 세세한 사항까지 꼼꼼히 처리하는 코드
  • 한가지에 집중
    • 나쁜 코드는 너무 많은 일을 하려 애쓰다 의도가 뒤섞이고 목적이 흐려진다.
    • 각 함수와 클래스, 모듈은 오염되지 않은 채 한길만 걷는다.

그래디 부치

  • 가독성
    • 잘 쓴 문장처럼 읽혀야 한다.
    • 해결한 문장을 명확히 드러내야 한다.
    • 코드는 추측이 아닌 사실에 기반해야 한다.
    • 반드시 필요한 내용만 담아야 한다. 

'큰' 데이브 토마스

  • 다른 사람이 고치기 쉬운 코드
    • 단위 테스트와 인수 테스트가 존재한다.
    • 의미 있는 이름이 붙는다.
    • 테스트 케이스가 없는 코드는 깨끗한 코드가 아니다.
    • 아무리 코드가 우아하고, 가독성이 높아도 테스트 케이스가 없으면 깨끗하지 않다. 
    • 의존성은 최소이며 각 의존성을 명확히 정의한다. 
    • API는 명확하며 최소로 줄였다. 

마이클 페더스

  • 언제나 누군가 주의 깊게 짠 코드
    • 고치려고 살펴도 딱히 손댈 곳이 없음

론 제프리스

  • 중복을 피하라, 한 기능만 수행하라. 제대로 표현하라. 작게 추상화하라.
    • 모든 테스트를 통과한다.
    • 중복이 없다.
    • 시스템 내 모든 설계 아이디어를 표현한다.
    • 클래스, 메서드, 함수 등을 최대한 줄인다.
    • 객체나 메서드가 여러 기능을 수행하면 쪼갠다. 
    • 모든 프로그램은 아주 유사한 요소로 이루어져 있다. 
      • 때문에 이런 상황이 발생하면 추상 메서드나 추상 클래스를 만들어 실제 구현을 감싼다.

워드 커닝햄

  • 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행하는 코드

보이스카우트 규칙

잘 짠 코드가 전부가 아니고, 시간이 지나도 언제나 깨끗하게 유지되어야 한다. 적극적으로 퇴보를 막아야 한다. 

 

이 책에서 주장하는 기법 다수는 논쟁의 여지가 있다. 여러분도 모든 기법에 동의하지 않으리라. 어떤 기법은 격렬히 반대하리라. 그래도 괜찮다. 우리 생각이 무조건 옳다고 주장할 의도는 없으니까. 하지만 다른 한 편으로 이 책은 우리가 오랫동안 숙고한 교훈과 기법을 권고한다. 수십 년에 걸친 경험과 반복적인 시행착오로 습득한 교훈과 기법이다. 그러므로 여러분이 동의하든 동의하지 않든 우리 시각을 이해하고 존중하려 애써주면 좋겠다. 

 

 

'책책책 > Clean Code' 카테고리의 다른 글

[Clean Code] 3장 - 함수  (0) 2021.08.19
[Clean Code] 2장 - 의미 있는 이름  (0) 2021.08.18