Skip to main content
soso01 blog
  1. Posts/

클린코드 1장 깨끗한 코드 요약

·3 mins

이 책은 좋은 프로그램 작성 요령을 설명하는 책이다. 코드에 대한 많은 사실, 좋은 코드와 나쁜 코드를 구분하는 능력, 나쁜 코드를 좋은 코드로 바꾸는 실력을 배울 수 있다.

코드가 존재하리라 #

  • 코드는 자동으로 생성하는 시대가 오면 프로그래머는 필요가 없어질까? 아니다. 앞으로도 코드가 사라질 가능성은 없다. 코드는 요구사항을 상세히 표현하는 수단이다. 기계가 실행할 정도로 상세하게 요구사항을 명시하는 작업, 이것이 프로그래밍이다.
  • 우리가 시키는 대로가 아니라 원하는 대로 돌아가는 기계가 나오는 것은 불가능하다. 요구사항을 모호하게 줘도 우리 의도를 정확히 꿰뚫어보는 프로그램 말이다.
  • 창의력과 직관을 보유한 인간조차 고객의 막연한 감정만 갖고는 성공적인 시스템을 구현하지 못한다.
  • 프로그래밍 언어에서 추상화 수준은 점차 높아지겠지만, 코드가 사라지진 않을 것이다,

나쁜 코드 #

  • 우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경험이 있다.
  • 나중은 결코 돌아오지 않는다.

나쁜 코드로 치르는 대가 #

  • 나쁜 코드는 개발 속도를 크게 떨어뜨린다.
  • 시간을 들여 깨끗한 코드를 만드는 노력이 비용을 절감하는 방법일 뿐만 아니라 전문가로서 살아남는 길이다.
  • 우리는 나쁜 코드가 작성한 것에 대해 온갖 이유를 들이댄다. (요구사항 변경, 시간 독촉 등)
    • 하지만 이는 우리의 잘못이다.
    • 시간을 독촉하는 관리자는 그것이 그들의 책임이기 때문에 한 것이다. 좋은 코드를 사수하는 일은 프로그래머의 책임이다.
  • 나쁜 코드의 위험을 이해하지 못하는 관리자의 말을 그대로 따르는 행동은 전문가 답지 못하다.
  • 시간이 없다고 나쁜 코드를 양산하면 오히려 더 늦어진다. 빨리가는 유일한 방법은, 언제나 코드를 최대한 깨끗하게 유지하는 습관이다.

깨끗한 코드라는 예술? #

  • 깨끗한 코드를 작성하려면 ‘청결’이라는 감각을 활용해 자잘한 기법들을 적용하는 절제와 규율이 필요하다.
  • 열쇠는 ‘코드 감각’이다. 타고날 수도 있고, 노력으로 얻을 수 있다.
  • ‘코드 감각’이 있으면 좋은 코드와 나쁜 코드를 구분할 뿐만 아니라, 절제와 규율을 적용해 나쁜 코드를 좋은 코드로 바꾸는 전략도 파악한다.
  • ‘코드 감각’이 없는 프로그래머도 때로는 나쁜 모듈을 알아보지만 그것으로 끝이다. 코드 감각’이 있는 프로그래머는 나쁜 모듈을 보면 좋은 모듈로 개선할 방안을 떠올린다.

깨끗한 코드란? #

  • 유명한 프로그래머에게 의견을 물었다.
  • 비야네 스트롭스트룹
    • 논리가 간단해야 버그가 숨어들지 못한다.
    • 의존성을 최대한 줄여야 유지보수가 쉬워진다.
    • 오류는 명백한 전략에 의거해 철저히 처리한다.
      • 프로그래머들이 대충 넘어가는 부분 중 하나가 오류처리다. 깨끗한 코드를 위해 세세한 사항까지 꼼꼼히 처리하자.
    • 성능을 최적으로 유지해야 사람들이 원칙 없는 최적화로 코드를 망치려는 유혹에 빠지지 않는다.
    • 깨끗한 코드는 한 가지를 제대로 한다.
      • 나쁜 코드는 너무 많은 일을 하려 애쓰다가 의도가 뒤섞이고 목적이 흐려진다.
  • 창문이 깨진 건물은 누구도 상관하지 않는다는 인상을 품긴다.
    • 그래서 사람들도 관심을 끊는다. 창문이 더 깨져도 상관하지 않는다.
    • 마침내 자발적으로 창문을 깨고 외벽에 낙서를 방치하고 차고에 쓰레기가 쌓여도 치우지 않는다. 창문이 깨지고 나면 쇠퇴하는 과정이 시작된다.
  • 그래디 부치
    • 깨끗한 코드는 단순하고 직접적이다.
    • 깨끗한 코드는 잘 쓴 문장처럼 읽힌다.
    • 깨끗한 코드는 결코 설계자의 의도를 숨기지 않는다.
    • 오히려 명쾌한 추상화와 단순한 제어문으로 가득하다.
  • 데이브 토마스
    • 깨끗한 코드는 작성자가 아닌 사람도 읽기 쉽고 고치기 쉽다.
    • 단위 테스트 케이스와 인수 테스트 케이스가 존재한다.
    • 깨끗한 코드에는 의미 있는 이름이 붙는다.
    • 특정 목적을 달성하는 방법은 하나만 제공한다.
    • 의존성은 최소이며 각 의존성을 명확히 정의한다.
    • api는 명확하며 최소로 줄였다.
    • 언어에 따라 필요한 모든 정보를 코드만으로 명확히 표현할 수 없기에 코드는 문학적으로 표현해야 마땅하다.
  • 마이클 페더스
    • 깨끗한 코드는 언제나 누군가 주의 깊게 짰다는 느낌을 준다.
    • 고치려고 살펴봐도 딱히 손 댈 곳이 없다.
    • 작성자가 이미 모든 사항을 고려했으므로 고칠 궁리를 하다보면 언제나 제자리로 돌아온다.
  • 론 제프리스
    • 모든 테스트를 통과한다.
    • 중복이 없다.
    • 시스템 내 모든 설계 아이디어를 표현한다.
    • 클래스, 메서드, 함수등을 최대한 줄인다.
  • 워드 커닝햄
    • 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 부를 수 있다.
    • 코드가 그 문제를 풀기 위한 언어처럼 보인다면 아름다운 코드라 불러도 된다.
  • 프로그램을 단순하게 모이도록 만드는 열쇠는 언어가 아니다. 언어를 단순하게 보이도록 만드는 열쇠는 프로그래머다.

밥아저씨의 생각 #

  • 이 책은 밥 아저씨와 동료들이 정의한 깨끗한 코드를 상세히 설명한다.
  • 사람마다 클린 코드에 대한 정의는 다르므로, 이 책에서 정의하는 클린코드가 진리이고 다른 코드가 틀린것은 아니다.

보이스카우트 규칙 #

  • 잘 짠 코드가 전부는 아니다.
  • 시간이 지나도 언제나 깨끗하게 유지해야 한다.
  • 시간이 지나면서 엉망으로 전락하는 코드가 한둘이 아니다.
  • 캠프장을 처음 왔을 때 보다 더 깨끗하게 해놓고 떠나라.
  • 체크아웃할 때보다 좀 더 깨끗한 코드를 체크인한다면 코드는 절대 나빠지지 않는다.

결론 #

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