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

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

깨끗한 코드란?

비야네 스트롭스트룹

(C++ 창시자이자 The C++ Programming Language 저자)

  • 효율이 단순히 속도만을 뜻하지 않는다. CPU 자원을 낭비하는 코드도 우아하지 못하다.
  • 나쁜 코드는 나쁜 코드를 유혹한다!
  • 흔히 나쁜 코드를 고치면서 오히려 더 나쁜 코드를 만든다는 뜻이다.
  • 철저한 오류 처리
    • 깨끗한 코드는 세세한 사항까지 꼼꼼하게 처리하는 코드
  • 깨끗한 코드란 한 가지를 잘 한다.
    • 나쁜 코드는 너무 많은 일을 하려 애쓰다가 의도가 뒤섞이고 목적이 흐려진다.
    • 깨끗한 코드는 한 가지에 집중 한다.

그래디 부치

(Object Oriented Analysis and Design with Application 저자)

깨끗한 코드는 단순하고 직접적이다.
잘 쓴 문장처럼 읽힌다.
결코 설계자의 의도를 숨기지 않는다.
오히려 명쾌한 추상화와 단순한 제어문으로 가득하다.

  • 코드는 추측이 아니라 사실에 기반해야 한다.
  • 반드시 필요한 내용만 담아야 한다.
  • 코드를 읽는 사람에게 프로그래머가 단호하다는 인상을 줘야 한다.

‘큰’ 데이브 토마스

(OTI 창립자이자 이클립스 전략의 대부)

  • 깨끗한 코드란 다른 사람이 고치기 쉽다.
    • 실제로 일기 쉬운 코드와 고치기 쉬운 코드는 엄연히 다르다!
  • 깨끗한 코드를 테스트 케이스와 연관 짓는다.
    • 테스트 케이스가 없는 코드는 깨끗한 코드가 아니다.
    • 아무리 코드가 우아해도, 가독성이 높아도, 테스트 케이스가 없으면 깨끗하지 않다.
  • 큰 코드보다 작은 코드에 가치를 둔다.
    • 작을수록 좋다.
  • 사람이 읽기 좋은 코드를 작성하라.

마이클 페더스

(Working Effectively with Legacy Code 저자)

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

론 제프리스

(Extreme Programming Installed,
Extreme Programming Adventrue in C# 저자)

    1. 중복 줄이기
    1. 표현력 높이기
    1. 초반부터 간단한 추상화 고려하기

      내게는 이 세 가지가 깨끗한 코드를 만드는 비결이다.


워드 커닝햄

(워키 창시자, 익스트림 프로그래밍 공동 창시자,
디자인 패턴을 뒤에서 움직이는 전문가, 스몰토크와 객체지향의 정신적 지도자,
코드를 사랑하는 프로그래머들의 대부)

  • 깨끗한 코드는 읽으면서 놀랄 일이 없어야 한다.
  • 언어를 단순하게 보이도록 만드는 책임은 우리에게 있다.
    • 프로그램을 단순하게 보이도록 만드는 열쇠는 언어아니다.
    • 언어를 단순하게 보이도록 만드는 열쇠프로그래머다!

우리들 생각

  • 깨끗한 변수 이름, 깨끗한 함수, 깨끗한 클래스를 만드는 방법을 소개한다.
  • 오브젝트 진영이 생각하는 깨끗한 코드를 설명한다.
  • 동의하든 동의하지 않든 우리 시각을 이해하고 존중하려 애써주면 좋겠다.

우리는 저자다

  • 새 코드를 짜면서 우리는 끊임없이 기존 코드를 읽는다.
  • 비율이 이렇게 높으므로 읽기 쉬운 코드가 매우 중요하다.
  • 기존 코드를 읽어야 새 코드를 짜므로 읽기 쉽게 만들면 사실은 짜기도 쉬워진다.
  • 그러므로 급하다면, 서둘러 끝내려면, 쉽게 짜려면, 읽기 쉽게 만들면 된다.

보이스카우트 규칙

캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라.

  • 잘 짠 코드가 전부는 아니다.
  • 시간이 지나도 언제나 깨끗하게 유지해야 한다.
  • 우리는 적극적으로 코드의 퇴보를 막아야 한다.
  • 한꺼번에 많은 시간과 노력을 투자해 코드를 정리할 필요가 없다.
  • 코드 정리의 예시
    • 변수 이름 하나를 개선
    • 조금 긴 함수 하나를 분할
    • 약간의 중복을 제거
    • 복잡한 if문 하나를 정리
  • 시간이 지날수록 코드가 좋아지는 프로젝트에서 개선한다고 상상해보자!
  • 지속적인 개선이야말로 전문가 정신의 본질이다.

결론

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

  • 공연장으로 가다가 길을 잃은 연주회의 바이올리니스트에 대한 우스개 소리를 기억하는가?
  • 그는 길거리에서 한 노인에게 카네기 홀로 가는 방법을 물었다.
  • 노인은 연주자와 그가 든 바이올린을 보고 이렇게 말했다. “연습해, 연습!”

느낀점

  • 이 책의 내용을 본격적으로 마주하기 전에 가질 마음가짐에 대해 정리할 수 있는 시간이었다.
  • 프로그래밍 분야에서 유명한 명사들의 깨끗한 코드에 대한 견해를 접하면서
    그 본질이 무엇이며 왜 깨끗한 코드가 중요한지를 느낄 수 있었다.
  • 이 책을 읽는다고 코드감각을 확실히 얻는다는 보장이 없다는 내용이 있어 공감이 되었다.
  • 나는 프로그래밍과 인생, 이 두 가지에서 확실한 보장이라는 것은 애초에 존재하지 않는다고 생각한다.
  • 이 책을 그저 소설책 읽듯이 읽기만 해서는 얻는 건 베스트 셀러인 클린 코드를 읽었다는 자기 만족 뿐일 것이다.
  • 책에 나오는 여러 예제 코드, 특히 깨끗한 코드로 개선하기 전과 후를 비교하는 예제들을 내 손으로
    직접 타이핑하고 비교해보며 습관처럼 체득하고자 한다.
  • 그저 연습만이 있을 뿐이다.