Ch01. 클린 코드

읽기 좋은 코드를 작성하자

Posted on 2019-02-11

클린 코드


코드가 존재하리라

코드는 요구사항을 표현하는 언어다.

나쁜 코드

여러가지 사유로 돌아가게만 작성된 나쁜 코드는 결국엔 개발속도를 저하시킨다.

르블랑의 법칙 : ‘우선 돌아가는 프로그램을 작성하고 나중에 정리해야지 다짐한다.’
그러나 나중은 결코 오지 않는다.

나쁜 코드로 치르는 대가

나쁜 코드는 개발 속도를 크게 떨어뜨린다.

원대한 재설계의 꿈

나쁜 코드에 지쳐 결국 기존 시스템의 모든 기능을 제공하는 새 시스템을 설계하게 된다. 새 시스템을 개발하는 동안 기존 시스템에 가해지는 변경도 모두 따라잡아야 한다. 언제 끝날지 모르는 개발이 시작된다. 처음부터 깨끗한 코드를 만드는 노력이 비용을 절감하는 방법이다.

태도

좋은 코드를 사수하는 일은 바로 우리 프로그래머들의 책임이다. 일정, 관리자, 마케팅 부서 등의 탓이 아니다. 나쁜 코드의 위험을 이해하지 못하는 관리자 말을 그대로 따르는 행동은 전문가답지 못하다.

원초적 난제

빨리 만드려면 나쁜 코드를 양산하게 되지만 빨리 가려면 깨끗한 코드를 유지해야 한다.

깨끗한 코드라는 예술?

깨끗한 코드와 나쁜 코드를 구분할 줄 안다고 깨끗한 코드를 작성할 줄 안다는 뜻은 아니다.
‘코드 감각’이 있는 프로그래머는 나쁜 모듈을 보면 좋은 모듈로 개선할 방안을 떠올린다.

깨끗한 코드란?

비야네 스트롭스트룹 : 나는 우아하고 효율적인 코드를 좋아한다. … 깨끗한 코드는 한 가지를 제대로 한다.

  • 자원을 낭비해서는 안된다.
  • 오류는 명백히 처리해야 한다.
  • 깨끗한 코드는 보는 사람에게 즐거움을 선사해야 한다.
  • 나쁜 코드는 나쁜 코드를 ‘유혹’해 더 나쁜 코드로 만든다.
  • 깨끗한 코드는 한 가지에 ‘집중’ 한다.

그래디 부치 : … 깨끗한 코드는 잘 쓴 문장처럼 읽힌다. … 가독성!

  • 코드를 읽는 사람에게 프로그래머가 단호하고 명쾌한 인상을 줘야 한다.

데이브 토마스 : 깨끗한 코드는 작성자가 아닌 사람도 읽기 쉽고 고치기 쉽다. …

  • 깨끗한 코드란 다른 사람이 고치기 쉬워야 한다. 읽기 쉬운 코드와 고치기 쉬운 코드는 엄연히 다르다.
  • 테스트 케이스가 없는 코드는 깨끗한 코드가 아니다.

마이클 페더스 : … 깨끗한 코드는 언제나 누군가 주의 깊게 짰다는 느낌을 준다. …

  • 깨끗한 코드는 주의 깊게 작성한 코드다. 누군가 시간을 들여 깔끔하고 단정하게 정리한 코드다. 세세한 사항까지 꼼꼼하게 신경 쓴 코드다. 주의를 기울인 코드다.

론 제프리스 : 간단한 코드란

  • 모든 테스트를 통과한다.
  • 중복이 없다.
  • 시스템 내 모든 설계 아이디어를 표현한다.
  • 클래스, 메서드, 함수 등을 최대한 줄인다. 표현력은 이름에만 국한되지 않는다. 여러 기능을 수행하는 객체는 분리하고, 메서드는 추출한다.

중복을 피하라. 한 기능만 수행하라. 제대로 표현하라. 작게 추상화하라.

워드 커닝햄 : 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 되겠다. …

  • 깨끗한 코드는 너무도 잘 짜놓은 코드라 읽는 이가 그 사실을 모르고 넘어간다.
  • 언어를 단순하게 보이도록 만드는 열쇠는 프로그래머에게 달렸다.

우리들 생각

밥 아저씨 : 이 책은 우리 오브젝트 멘토 진영이 생각하는 깨끗한 코드를 설명한다. 우리가 가르치는 기법을 따른다면 깨끗하고 수준 높은 코드를 작성하리라 감히 장담한다. 하지만 우리 생각이 절대적으로 ‘옳다’라는 단정은 금물이다.
이 책은 우리가 오랫동안 고민하고 숙고한 교훈과 기법으 권고한다. 수십 년에 걸친 경험과 반복적인 시행착오로 습득한 교훈과 기법이다.

우리는 저자다

새 코드를 짜면서 우리는 끊임없이 기존 코드를 읽는다. 코드를 짜기 위해 코드를 읽는 시간이 훨씬 많다. 주변 코드를 읽지 않으면 새 코드를 짜지 못한다. 주변 코드가 읽기 쉬우면 새 코드를 짜기도 쉽다. 주변 코드를 읽기가 어려우면 새 코드를 짜기도 어렵다. 그러므로 급하다면, 서둘러 끝내려면, 쉽게 짜려면, 읽기 쉽게만들면 된다.

보이스카우트 규칙

캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라. 시간이 지나도 언제나 깨끗하게 유지해야 한다.

프리퀄과 원칙

Agile Software Development: Principles, Patterns, and Practices PPP책은 객체 지향 설계의 원칙을 설명하고 전문 개발자들이 사용하는 실무 기법을 소개한다. PPP를 읽지 않았다면 이 책을 먼저 읽은 후 나중에 읽어보기 바란다.

결론

이 책을 읽는다고 뛰어난 프로그래머가 된다는 보장은 없다. 뛰어난 프로그래머가 생각하는 방식과 그들이 사용하는 기술과 기교와 도구를 소개할 뿐이다. 나머지는 각자 자신에게 달렸다.


Reference
  • CleanCode 애자일 소프트웨어 장인 정신