이 책을 몇 문장으로 요약하면 다음과 같다.

 

  • 장인정신을 갖자.
  • 깨끗한 코드는 예술과 같다. 비평을 잘 한다고 훌륭한 예술가가 되는 건 아니다.
  • 깨끗한 코드는 끊임없는 개선에서 나온다. 노력이 필요하다.
  • 깨끗한 코드는 주의 깊게 작성한 코드다.

이 책에서 말하는 깨끗한 코드란 무엇일까?

다양한 유명 프로그래머의 말을 빌려 그 의미를 전달하지만 저자 본인은 한 두 문장으로 정의하지 않는다.

대신 수 많은 원칙을 기준으로 다듬고 다듬어서 깨끗한 코드를 만들 수 있다고 한다.

 

그래도 깨끗한 코드는 무엇인지 이 책에서 언급된 유명 프로그래머의 말을 짧게 요약하면 다음과 같다.

 

  • 한 가지를 제대로 하는 우아하고 효율적인 코드 - 비야네 스트롭스트룹
  • 깨끗한 코드는 잘 쓴 문장처럼 읽힌다 - 그래디 부치
  • 테스트가 존재하며 코드는 문학적으로 표현해야 마땅하다 - 데이브 토마스
  • 깨끗한 코드는 언제나 누군가 주의 깊게 짰다는 느낌을 준다 - 마이클 페더스
  • 중복이 없고 최대한 줄여 간결한 코드 - 론 제프리스
  • 의도한대로 작성되었고 의도한대로 기능하며 읽히는 코드 - 워드 커닝햄

너무 짧게 요약해서 말한 의도가 제대로 정리되었는지는 모르겠다.

어찌됐든 깨끗한 코드에 대한 프로그래머들의 생각은 거의 대부분 다음과 같은 단어로 일반화할 수 있을 것 같다.

 

  • 중복이 없는 간결함, 그로 인해 우아하며 의도가 쉽게 읽히는 가독성, 단위테스트를 통해 오류가 없고 고치기 쉬운 코드

이 책에서는 깨끗한 코드를 작성하는 최선의 실체적인 방법을 다음과 같은 원칙(저자가 말하는 교리)들로 세세하고 구체적으로 다루고 있다. 물론 각 항목별로 더 상세한 원칙들이 존재하며 아래 내용은 임의로 요약했으므로 상세한 내용은 책을 읽어보길 바란다.

 

  • 의미 있는 이름
  • 한 가지만 수행하는 작은 함수
  • 위에서 아래로 읽을 수 있는 코드 작성
  • 나쁜 주석 보단 코드로 의도를 표현하라
  • 형식을 준수하는 코드
  • 객체와 자료구조는 혼용하지 말고 용도에 맞게 사용해라
  • 오류 처리는 프로그램 논리와 분리해서 처리해라
  • 외부 코드를 사용할 때는 Wrapper 클래스나 인터페이스를 사용해서 깨끗한 경계를 유지해라
  • 깨끗한 테스트 코드를 유지해라(TDD 관점에서)
  • 클래스의 캡슐화를 깨지말고 응집도를 높이며 결합도를 낮추도록 작은 클래스를 유지해라(SRP와 OCP)
  • 깨끗한 코드뿐만 아니라 깨끗한 시스템도 중요하다.
  • 창발성(부분을 보면 나타나지 않던 특성이 합쳤을 때 나타나는 것, 하나일 때는 할 수 없는 일을 전체가 되면 할 수 있게 되는 등...) - 단순한 설계 원칙을 준수해라
    • 모든 테스트 실행
    • 중복을 없앤다
    • 프로그래머 의도를 표현한다
    • 클래스와 메서드 수를 최소로 줄인다.
  • 동시성을 구현하는 것은 어렵기 때문에 주의깊게 작성해야 한다.

위에서 정리한 이론적인 내용 이후 실제 코드를 예제로 각 원칙을 적용해 점진적인 개선을 이뤄가는 과정을 설명한다.

해당 내용은 따로 요약할 수 없고 직접 보고 실습을 통해 체화해야 할 것으로 보인다.

 

마지막장인 냄새와 휴리스틱에서는 수많은 냄새를 나열하고 제거하는 방법을 하나씩 차분하게 기술해 놓았다. 저자는 차근차근 읽은 후 필요할때마다 꺼내보길 권장하는데 그 자신만만함이 부럽고 신기하다는 생각이 들었다.

해당 냄새들은 "리팩토링" 저서에서 기술된 다양한 코드 냄새와 대부분 겹치며 저자만의 독특한 냄새를 추가했다고 한다.

 

모두가 유명 예술가가 될 수 없고 오랜 기간 동안 같은 일을 했다고 장인이 될 수도 없다.

그래도 어제보다는 오늘이 더 나은 사람이 될 수 있듯이 프로그래머도 더 나은 프로그래머가 될 수 있다.

 

세세한 원칙을 교리로 삼아 철두철미하게 준수할 필요는 없다고 생각한다.

그저 주의 깊게 코딩하고 끊임없이 개선하려는 노력이 깨끗한 코드를 만드는 깨끗한 프로그래머가 될 수 있게 해 줄 것이다.

 

어제보다는 오늘이 더 나은 프로그래머가 되기를...

 

 

 

 

 

 

 

 

 

 

 

'books' 카테고리의 다른 글

새로운 100년  (0) 2020.07.03

+ Recent posts