ENAN

Developer, Artist, Traveler

공부/DevOps, 개발 전반

[Clean Code] 1. 깨끗한 코드

ENAN 2021. 5. 3. 15:34

클린 코드 1장 - 깨끗한 코드

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

1장에서는 우리가 나쁜 코드를 짜온 이유와, 깨끗한 코드란 어떤 것인지와 깨끗한 코드를 유지하는 법에 대해 얘기한다.

솔직히 첫장부터 많이 후두려맞았다. 나 아는 사람인가? 싶을 정도로 내가 무슨 잘못을 저질러왔는지 잘 알고 있다. 읽으면서 같이 뼈가 부숴져 보자!

르블랑의 법칙

나중은 결코 오지 않는다.

우리는 자신이 짠 쓰레기 코드를 보면서 "나중에 손 봐야지"라고 생각한 적이 있을 것이다. 돌아가지 않는 프로그램보다는, 돌아가는 쓰레기가 낫다면서 . .

하지만 우리는 르블랑의 법칙을 알고 있어야 한다. "나중은 결코 오지 않는다." 급하니까 일단 짜놓고 나중에 정리하겠다 → 절~대 나중에 안한다! 아시잖아요?

나쁜 코드와 개발 속도

좋은 코드를 짜고 싶다고 생각하면서도, 왜 우리는 나쁜 코드를 짜게 될까?

이에 대해서 우리는 변한 요구사항과 촉박한 일정을 탓한다. 하지만 일정과 요구사항을 밀어붙이는 것은 관리자의 책임이니까 그렇게 한 것이고, 우리는 좋은 코드를 지킬 책임이 있다.

환자가 의사에게 손 씻을 시간에 빨리 수술해달라고 해도 의사는 손을 씻어야 한다. 왜냐? 환자보다 의사가 감염의 위험을 훨씬 더 잘 아니까. 개발자도 마찬가지다. 나쁜 코드의 위험을 이해하지 못하는 관리자의 말을 그대로 따르는 것은 전문가답지 못하다.

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

깨끗한 코드란?

훌륭한 개발자들의 깨끗한 코드에 대한 생각을 나열해 보자. (겹치는 거 몇개는 뺐다)

  • 우아하고 효율적인, 논리가 간단한
  • 의존성을 최대한 줄이고 명확히 정의한다
  • 명백한 전략에 의거해 오류는 철저히 처리
  • 성능을 최적으로 유지
  • 한 가지를 제대로 한다

  • 잘 쓴 문장처럼 읽힘 (가독성 좋음)
  • 결코 설계자의 의도를 숨기지 않음
  • 명쾌한 추상화와 단순한 제어문으로 가득함

  • 다른 사람이 고치기 쉬움
  • 의미 있는 이름
  • 특정 목적을 달성하는 방법은 하나만 제공한다
  • 단위 테스트 케이스와 인수 테스트 케이스가 존재
  • 코드는 문학적으로 표현해야 함

  • 누군가 '주의 깊게' 짰다는 느낌을 준다

  • 모든 테스트를 통과한다
  • 중복이 없다
  • 명확하게 표현한다
  • 작게 추상화한다

  • 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다
  • 코드가 그 문제를 풀기 위한 언어처럼 보인다

여기서부터는 내 의견

🔑
효율성 / 의존성 최소화 / 명확한 표현 / 전략적 오류 처리 / 책임 / 가독성 / 테스트 코드

읽어보면 이 7개의 키워드 안에서 반복되는 것 같다. 물론 더 줄일 수도 있겠지만, 이정도로 정하고 살펴 보자.

  1. 우선 효율적이란 말은 시간, 메모리 자원 면에서 불필요한 낭비가 없는 코드를 의미한다. 이건 당연한 것!
  1. 의존성이 복잡하게 얽힌 코드는 수정을 어렵게 한다. 문제가 생긴 부분을 변경해도 다른 코드에 지장이 없도록, 의존성 최소화 하기! 디자인 패턴에 대해 공부해야 하는 이유 중 하나라고 생각한다. 좋은 디자인 패턴은 의존성의 흐름을 쉽게 읽을 수 있도록 해 주니까!
  1. 명확한 표현은 의미 있는 이름을 포함한다. 또한 중복되는 코드가 있다면 아이디어를 제대로 표현하지 못한 것이다. 중복을 제거하고, 의미 있는 이름으로 코드가 어떤 의도와 역할을 갖는지 명확히 표현할 수 있도록 하자!
  1. 오류 처리와 같은 세세한 사항도 꼼꼼히 신경 써야 한다.
  1. 책임이라는 말은, 한 코드가 하나의 일만 맡아서 할 것, 그리고 그 일은 그 코드만 할 것. 이 두 가지를 모두 지켜야 한다는 뜻이다.
  1. 가독성이 좋은 코드가 당연히 깨끗한 코드일 확률이 높다. 하지만 단순히 읽기 좋을 뿐만 아니라, 다른 사람이 고치기도 쉬운 코드가 진짜 깨끗한 코드이다.
  1. 테스트 코드의 중요성은 이미 많은 곳에서 드러났다. 테스트 코드가 존재하며, 모든 상황을 커버하고, 통과해야 한다.

잘 짠 코드가 전부는 아니다.

코드를 잘 짜는 것도 중요하지만, 시간이 지나도 언제나 코드를 깨끗하게 유지해야 한다. 그 방법으로, 저자는 보이스카우트 규칙을 얘기한다.

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

체크아웃 할 때보다 좀 더 깨끗한 코드를 체크인한다면 코드는 절대 나빠지지 않는다. 한꺼번에 많은 시간과 노력을 투자해 코드를 정리하는 것보다, 변수 이름 하나를 개선하고, 약간의 중복을 제거하는 등 조금씩만이라도 틈틈이 정리하는 것이 훨씬 쉽다!

지속적인 개선이야말로 전문가 정신의 본질이다. (이 말에 공감+반성..)

정리

이 책을 읽는다고 뛰어난 개발자가 된다는 보장은 없다. 단지 뛰어난 개발자들의 생각과 도구를 알게될 뿐. 앞으로 이 책에서 설명하는 방법들을 실전에서 사용할 수 있도록, 사례를 보면서 충분히 고민하고, 의도를 파악하고, 느껴 보면서 내 것으로 만들자!

'공부 > DevOps, 개발 전반' 카테고리의 다른 글

Throttle vs Debounce  (0) 2021.05.28
[Clean Code] 2. 의미 있는 이름  (0) 2021.05.03
[Clean Code] 0. 들어가면서  (0) 2021.05.03
git 정리 + 커밋 푸시 어떻게 취소해요?  (0) 2021.02.28