[Programming] - CleanCode 01. 깨끗한 코드


클린코드의 책에서는 깨끗한 코드가 무엇인지 부터 정의하려고 한다.

(물론 사람마다 정의가 다르다.)

1. 나쁜 코드


먼저 나쁜 코드 부터 알아보자.

왜 나쁜 코드를 짜는가?

급해서? 서두르느라? 아마 그랬을 것이다.

다시 돌아와 정리하겠다고 다짐도 했을 것이다.

“나중은 결코 오지 않는다.” (르블랑의 법칙)

코드를 고칠 때마다 엉뚱한 곳에서 문제가 생기는 경험을 다 해봤을 것이다.

간단한 변경은 없다.

결국 재설계를 하게되지만

그 재설계또한 다시 재설계의 늪에 빠지는 경우가 많다.

깨끗한 코드를 만드는 노력이 전문가로써 살아남는 길임을 인정하라.

1-1) 태도


관리자, 마케팅, PM 등에게 일정과 개발 정보를 제공하는 것은 우리이다.

그렇기에 제품이 잘못된다면 우리 잘못이다.

좋은 코드를 사수하는 일은 바로 우리 프로그래머들의 책임이다.

환자가 의사에게 급하니 손을 씻지말고 수술해달라고 하는 요구를 과연 의사가 들어주겠는가? 환자의 말을 그대로 따르는 행동은 전문가 답지 못하다.

나쁜 코드의 위험을 이해하지 못하는 관리자의 말을 그대로 따르는 행동은 전문가답지 못하다.

1-2) 원초적 난제


오히려 나쁜 코드를 양산하면 기한을 역으로 맞추지 못한다.

기한을 맞추는 유일한 방법은 언제나 코드를 최대한 깨끗하게 유지하는 습관이다.

1-3) 깨끗한 코드라는 예술?


“깨끗한 코드를 어떻게 작성할까?”

그림을 보면 대부분 사람은 그림을 평가할 수 있다.

하지만 평가하는 능력과 그림을 그리는 능력은 별개이다.

결국 “코드 감각”이다. (재능의 영역, 누군가는 투쟁해서 얻어야 한다.)

다시 말해, 깨끗한 코드를 작성하는 프로그래머는

빈 캔퍼스를 우아한 작품으로 바꿔가는 화가와 같다.

프로그래밍에는 예술의 영역이 존재한다. 같은 요구사항을 준다고 하더라도 사람마다 코드가 다르게 나타난다.

1-4) 깨끗한 코드란?


코드계의 거장들의 깨끗한 코드의 정의를 들어보자.

  1. 비야네 스트롭스트룹 (C++ 창시자)
    • 간단해야 한다.
    • 의존성을 줄여라.
    • 오류 처리는 명백한 전략이 있어야 한다.

    깨끗한 코드는 보는 사람에게 즐거움을 선사해야 한다. 나쁜 코드는 너무 많은 일을 하려 애쓰다가 의도가 뒤섞이고 목적이 흐려진다.

  2. 그래디 부치
    • 단순하고 직접적이다.
    • 가독성

    코드는 추측이 아니라 사실에 기반해야 한다.

  3. 데이브 토마스 (이클립스 전략의 대부)
    • 단위 테승트, 인수 테스트
    • 의존성 최소, 의존성 명확히
    • 작성자 외의 사람이 읽기 쉬어야 한다.

    다른 사람이 고치기 쉬워야 한다.

    테스트 케이스가 없으면 깨끗하지 않다.

  4. 마이클 페더스
    • 손댈 곳이 없다.
    • 모든 상황을 고려 했다.

    한마디로 요약하면 “주의 깊게 코드를 짜라”이다.

  5. 론 제프리스
    • 모든 테스트 통과한다.
    • 중복이 없다
    • 설계 아이디어를 모두 표현한다.
    • 의미 있는 이름
  6. 워드 커닝햄
    • 짐작하는 기능을 그대로 수행 (사실 이게 쉽지 않다)
    • 놀랄 일이 없어야 한다. (의도외의 동작 X)

절대로 정답은 없다. 이 책이 절대적으로 ‘옳다’라는 단정은 금물이다.

어떤 기법은 격렬히 반대하라.

2. 보이스카웃 규칙


조금씩 개선 해 나가라.

사소한 곳에서 발휘하는 정직은 사소하지 않다

3. 결론


자전거 타는 방법은, 지식은 전달하기 쉽다.

하지만 자전거 타는 방법을 아는 것과 타는 것은 다르다.

방법을 알고 있다고 하더라고 여러번 넘어지고 다시 일어서며 배워나간다.

즉, 이 책의 방법을 아는것과 할 수 있는 것은 다르다.

“연습, 연습하라”