Clean Code: A Handbook of Agile Software Craftsmanship

Even bad code can function. But if code isn't clean, it can bring a development organization to its knees. Every year, countless hours and significant resources are lost because of poorly written code. But it doesn't have to be that way.

나쁜 코드도 동작한다. 하지만 코드가 더러우면 망하는 지름길이 될 수 있다. 매년 너무 많은 시간과 자원이 나쁜 코드 때문에 낭비된다. 이 책은 전문적인 개발자란 무엇이며, 개발자가 어떤 마음가짐으로 개발해야 하는지 기술한다. 이 책을 통해 소프트웨어 개발의 전문가 정신과 장인 정신을 기르자.

독서 전에 주의할 점:

  • 이 책에 나오는 모든 지침은 절대적이라 생각하면 안 되며, 언제든지 개선의 여지가 있다고 생각하기.
  • 핵심은 팀이나 공동체에서 서로 동의하는 합리적인 원칙을 세우기 위한 지침으로 사용하는 것.
  • 코드를 쓰는 시간보다, 본인 혹은 남이 작성한 코드를 읽는 시간이 훨씬 많다는 것을 명심하기.
  • 보이스카우트 규칙은 선택이 아닌 필수!

깨끗한 코드를 작성하는 방법은 배우기 어렵다. 단순히 원칙과 패턴을 안다고 깨끗한 코드가 나오지 않는다. 고생을 해야 한다. 스스로 연습하고 실패도 맛봐야 한다. 남들이 실패하는 모습도 봐야 한다. 그들이 넘어지고 일어서는 모습도 봐야 한다. 결정을 내리느라 고민하는 모습, 잘못된 결정으로 대가를 치르는 모습도 봐야 한다. 상세히 살펴보려면 집중력도 필요하다. 코드를 분석하고 이해하며 코드에 가하는 변경과 이유를 납득해야 한다. 그러려면 여러 날이 걸리므로 시간도 충분히 투자해야 한다.

핵심 내용

  • 책임 있는 전문가라면 프로젝트를 시작할 때 생각하고 계획할 시간을 확보해야 한다.
  • 세세함에 주의를 기울이는 태도는 전문가에겐 필수적인 자질이다.
  • 소프트웨어 개발 업무는 80% 이상이 유지보수에 사용된다. 스크럼과 애자일 등 제품을 신속하게 시장에 출시하는 방법론에 대한 논의가 많지만, 실제로는 유지보수에 대한 논의가 더 중요하다.
  • 대표적인 품질 관리론: 5S (정리, 정돈, 청소, 청결, 생활화)
  • 5S 원칙은 선택이 아니라 필수다.
    • 정리(Seiri): "첫 아이의 이름을 짓듯이.." 적적한 명명법 등과 같은 방법을 사용해 무엇이 어디에 있는지 알아야 한다.
    • 정돈(Seiton): "모든 악을 퇴치할 치료약" 물건마다 모두 제 자리가 있다. 코드는 누구나 예상하는 위치 있어야 한다.
    • 청소(Seiso): 과거 이력이나 미래 바람을 기억한 주석 혹은 주석을 처리한 코드는 제거해야 한다.
    • 청결(Seiketsu): "청결 = 경건" 그룹 내에서 일관적인 구현 스타일과 기법의 필요성을 정리하고, 이를 지키도록 해야 한다.
    • 생활화(Shutsuke): "작은 것에도 충실한 사람이 큰 것에도 충실하다." 관례를 따르고, 자기 작품을 자주 돌아보고, 기꺼이 변경하는 규율을 뜻한다.
  • 진정으로 책임 있는 개발자라면 제품 생명주기까지 고려해야 한다.
  • 좋은 코드는 돌아가는 코드만큼이나 중요하다.
  • 작품을 완성할 수는 없다. 단지 어느 시점에서 포기하는 것뿐이다. - 폴 발레리
  • 품질은 하늘에서 뚝 떨어진 위대한 방법론이 아니라 사심 없이 기울이는 무수한 관심에서 얻어진다.
  • 일상적이고 간단한 활동 모두가 인간의 노력에 들어있는 위대함과 아름다움의 바탕이다. 이들을 무시하고서는 제대로 인간적일 수 없다.
  • "코드가 설계다", "단순한 코드", "우리의 코드는 숭고한 설계 노력이 낳은 아름다운 산물" "코드는 반악이며, 깨끗한 코드는 성스럽기까지 하다." ... 코드에 목숨 걸자.
  • 아키텍처도, 깨끗한 코드도, 완벽을 주장하지는 않는다. 단지 최선을 다해 정직하라 요구할 뿐이다. "처음 왔을 때보다 캠핑장을 더 깨끗이 치우고 떠나려고" 최선을 다했는가?

좋은 코드와 나쁜 코드
코드 품질을 측정하는 유효한 척도 = 분당 내지르는 WTF! 횟수

목차

  1. 깨끗한 코드
  2. 의미 있는 이름
  3. 함수
  4. 주석
  5. 형식 맞추기
  6. 객체와 자료 구조
  7. 오류 처리
  8. 경계
  9. 단위 테스트
  10. 클래스
  11. 시스템
  12. 창발성
  13. 동시성
  14. 점진적인 개선
  15. JUnit 들여다보기
  16. SerialDate 리팩터링
  17. 냄새와 휴리스틱