01. 클린 코드 - 1. 깨끗한 코드(1)

클린 코드 - 애자일 소프트웨어 장인 정신(로버트 C.마틴 지음 | 박재호.이해영 옮김)
를 읽고 정리한 내용입니다.
개인적으로 공부한 내용을 정리하려는 목적임을 알려드립니다.

코드가 존재하리라

  • 어느 수준에 이르면 코드의 도움 없이 요구사항을 상세하게 표현하기란 불가능하다.
  • 기계가 실행할 정도로 상세하게 요구사항을 명시하는 작업, 바로 이것이 프로그래밍이며 이렇게 명시한 결과가 코드이다.

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

  • 요구사항에 더욱 가까운 언어를 만들 수 있고, 요구사항에서 정형 구조를 뽑아내는 도구를 만들 수도 있다.
  • 어느 순간에는 정밀한 표현이 필요하다.
  • 그 필요성을 없앨 방법이 없으므로 코드도 항상 존재하리라.

나쁜 코드

잘 나가던 회사의 일화

  • 80년대 후반 킬러 앱 하나를 구현한 회사가 있었는데, 커다란 인기를 끌었다.
  • 제품 출시 주기가 늘어지면서 버그가 다음 버전에도 그대로 남아있었다.
  • 회사는 얼마 못가 망했다.

잘 나가던 회사가 망한 이유

  • 출시에 바빠 코드를 막 짰다.
  • 기능을 추가할수록 코드가 엉망이 되었고, 결국은 감당이 불가능한 수준에 이르렀다.
  • 회사가 망한 원인은 바로 나쁜 코드 탓이었다.

어째서 나쁜 코드를 짜는가?

  • 급해서? 서두르느라? 아마 그랬을 것이다.
  • 많이들 겪어본 상황이다.
  • 많은 프로그래머들이 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경험이 있다.
  • 또한 대충 짠 프로그램이 돌아간다는 사실에 안도감을 느끼며 그래도 안 돌아가는 프로그램보다 돌아가는 쓰레기가 좋다고 느낀 경험이 있다.
  • 다시 돌아와 나중에 정리하겠다고 다짐들을 하지만 나중은 결코 오지 않는다.

나쁜 코드로 치르는 대가

나쁜 코드가 쌓일수록 팀 생산성은 떨어진다.

원대한 재설계의 꿈

시간을 들여 깨끗한 코드를 만드는 노력이 비용을 절감하는 방법일 뿐만 아니라 전문가로서 살아남는 길이다.

태도

  • 일정에 쫓기더라도 대다수 관리자는 좋은 코드를 원한다.
  • 좋은 코드를 사수하는 일은 바로 우리 프로그래머들의 책임이다.
  • 나쁜 코드의 위험을 이해하지 못하는 관리자 말을 그대로 따르는 행동은 전문가답지 못하다.

원초적 난제

  • 모든 프로그래머가 기한을 맞추려면 나쁜 코드를 양산할 수 밖에 없다고 느낀다.
  • 오히려, 나쁜 코드를 양산하면 기한을 맞추지 못한다.
  • 오히려 엉망진창인 상태로 인해 속도가 곧바로 늦어지고, 결국 기한을 놓친다.

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

깨끗한 코드라는 예술?

  • 깨끗한 코드와 나쁜 코드를 구분할 줄 안다고 깨끗한 코드를 작성할 줄 안다는 뜻은 아니다.
  • 깨끗한 코드를 작성하려면 ‘청결'이라는 힘겹게 습득한 감각을 활용해 자잘한 기법들을 적용하는
    절제규율이 필요하다.
  • 열쇠는 '코드 감각'이다.
    • 어떤 사람은 '코드 감각'을 타고난다. 어떤 사람은 투쟁해서 얻어야 한다.
      • '코드 감각'이 있으면 좋은 코드와 나쁜 코드를 구분한다.

느낀점

  • 나도 시간에 쫓긴다는 이유로 ‘이렇게 코드를 짜면 나중에 고생할텐데… 이렇게 짜면 안되는데..’하면서
    나 자신이 보기에도 마음에 들지 않는 코드를 작성한 경험이 있다.
  • 특히 나쁜 코드를 우선은 마감기한에 맞춰 작동은 가능하게 한 후, 리팩토링 하겠다고 생각했던
    내 자신을 반성하게 된다.
  • 나는 위에서 저자가 말한 ‘코드 감각’을 타고나지 않았다고 느낀다. 그 코드 감각은 노력해서 얻을 수 있다고 생각한다.
    이러한 생각은 내가 더욱 꾸준하게 프로그래밍을 공부할 수 있는 원동력이 된다.
  • 처음부터 클린한 코드를 짜기 위한 방법을 배우고 익혀서 체득하고자 한다.