[CleanCode] Chapter01 깨끗한 코드

728x90

📖 책 내용 정리

🔶 1장 깨끗한 코드

1️⃣ 코드가 존재하리라

  • 코드는 요구사항을 표현하는 언어이다.
    요구사항에 더 가까운 언어를 만들 수도 있고, 요구 사항에서 정형구조를 뽑아내는 도구를 만들 수도 있다.
    또한, 정밀한 표현이 필요한 순간도 있다.

 

2️⃣ 나쁜코드

  • 바쁘다는 핑계로 코드를 막 짠 후 '나중에 수정해야지'라고 생각하지만 나중은 오지 않는다.
  • 기능을 추가할 수록 코드는 더 엉망이 된다.

 

3️⃣ 나쁜코드로 치르는 대가

  • 프로젝트 초반에는 빠른 개발 속도를 자랑하지만 차츰 속도가 느려지며 코드를 고칠 때 마다 다른 곳에서 문제가 생긴다.
  • 간단한 변경이 없다.
  • 팀의 생산성이 떨어진다.

 

◾ 원대한 재설계의 꿈
  • 재설계를 위해 타이거 팀이 구성되고 나머지는 현재 시스템을 유지보수하면서 새 기능을 개발
    → 아주 오랜 시간이 소요 됨.
    → 새 시스템이 기존 시스템을 따라 잡을 쯤, 타이거 팀원들은 모두 떠난다.
    (현재 시스템이 엉망이라서)
◾ 태도
  • 좋은 코드를 사수하는 일은 프로그래머의 책임이다.
  • 나쁜 코드의 위험을 이해하지 못하는 관리자의 말을 그대로 따르는 행동은 전문가답지 못하다.
◾ 원초적 난제
  • 나쁜 코드가 업무 속도를 늦춘다는 사실은 알지만 기한을 맞추려면 나쁜 코드를 양산할 수 밖에 없다고 느낀다.
    하지만 빠르게 가는 유일한 방법은 언제나 코드를 깨끗하게 유지하는 습관이다.
◾ 깨끗한 코드라는 예술?
  • 코드 감각이 있으면 좋은코드와 나쁜코드를 구분하고 절제와 규율을 적용해 나쁜 코드를 좋은 코드로 바꾸는 전략도 파악한다.

 

◾ 깨끗한 코드란?
👉 비야네 스트롭스트룹
  • 의존성을 최대한 줄여야 유지보수가 쉬워진다.
  • 오류는 명백한 전략에 의해 철저히 처리한다
    → 메모리 누수, 경쟁상태, 일관성 없는 명명법
  • 성능을 최적으로 유지해야한다.
    → 효율이 단순히 속도만을 뜻하지는 않을 것.
  • 깨끗한 코드란 한 가지를 잘 안다.
👉 그래디 부치
  • 단순하고 직접적이며 잘 쓴 문장처럼 읽혀야 한다.
  • 설계자의 의도를 숨기지 않으며 명쾌한 추상화와 단순한 제어문으로 가득해야한다.
👉 데이브 토마스
  • 작성자가 아닌 사람도 읽기 쉽고 고치기 쉬워야한다.
  • 단위 테스트 케이스와 인수 테스트 케이스가 존재해야한다.
  • 의미있는 이름을 지어야 한다.
  • 하나의 코드는 하나의 목적을 달성해야한다.
  • 의존성은 최소로 해야하며, 각 의존성을 명확하게 정의해야한다.
👉 마이클 패더스
  • 세세한 사항까지 주의 깊게 모든 사항을 고려하여 코드를 작성해야한다.
👉 론 제프리스
  • 중복을 피하고 한 기능만 수행해야한다.
  • 제대로 표현하고 작게 추상화 해야 한다.
  • 중요도 : 모든 테스트 통과 → 중복 X → 시스템 내 모든 설계 아이디어 표현 → 클래스,메서드,함수 등을 최대한 줄임
👉 워드 커닝햄
  • 코드를 읽으면 짐각했던 기능을 각 루틴이 그대로 수행해야 한다.

 

4️⃣ 우리들 생각

  • 이 책의 생각이 무조건 옳다고 단정하면 안됨.

 

5️⃣ 우리는 저자다

  • 주변 코드를 읽지 않으면 새 코드를 짜지 못한다.
  • 빠르고 쉽게 코드를 짜려면 읽기 쉽게 만들어야 한다.

 

6️⃣ 보이스카우트 규직

  • 잘 짠 코드가 전부가 아니라 시간이 지나도 언제나 깨끗하게 유지되야 한다.
  • 체크아웃할 때보다 좀 더 깨끗한 코드를 만든다.
    → 변수 이름 하나를 개선하고, 긴 함수 하나를 분할하고, 약간의 중복을 제거하고, 복잡한 if문 하나를 정리

 

7️⃣ 프리퀄과 원칙

  • 다양한 설계 원칙 : SRP, OCP, DIP 등

 

8️⃣결론

  • 책을 읽는다고 뛰어난 프로그래머가 된다는 보장은 없다. 연습을 해야 한다.

 

💌 책에서 기억하고 싶은 내용

깨끗한 코드는 잘 쓴 문장처럼 읽힌다.

작성자가 아닌 사람도 읽기 쉽고 고치기 쉬워야한다.

 

💬 소감

최근까지만 해도 빨리 구현하는 것에 급급해서 코드를 깨끗하게 짜지 못했던 내가 생각났다. 이후에 코드 리팩토링을 하기는 했지만, 처음부터 잘 짰으면 코드 리팩토링을 하는 시간에 새로운 기능을 더 넣었을 것. 시간이 걸리더라도 코드를 깔끔하게 작성하는 습관을 들이고자 노력해야겠다고 생각했다. 다른사람의 코드도 자주 읽어봐야지.

728x90