티스토리 뷰

도서/클린 코드

깨끗한 코드

woo'^'chang 2022. 7. 4. 15:37

코드가 존재하리라

코드도 자동으로 생성되는 요즘 시대에 코드보다는 모델이나 요구사항에 더 집중해야 할까요? 필자는 그렇지 않다고 얘기하고 있습니다. 코드는 요구사항을 상세히 명시하는 작업이고 실제 세계를 기계가 이해할 수 있도록 하는 추상화를 도와주기에 코드가 사라질 가망은 전혀 존재하지 않습니다.

 

앞으로도 지속해서 추상화 수준은 높아질 것이고 모호한 요구사항을 완벽히 분석해 알맞은 프로그램을 만드는 기계가 나올 확률도 매우 낮습니다. 결론적으로 코드는 요구사항을 표현하는 하나의 언어임에 집중해야 합니다.

나쁜 코드

코드를 작성하는 저희 프로그래머에게 있어서 좋은 코드가 중요하다는 것은 명확한 사실입니다. 긴 시간 동안 나쁜 코드로 인해 불편함을 많이 겪어 왔기 때문입니다. 나쁜 코드는 생산성을 떨어뜨리고 유지보수에도 어려움을 주며 사용자 입장에서도 불편함이 존재합니다.

 

좋은 코드를 충분히 짤 수 있음에도 나쁜 코드를 작성한 이유는 무엇인가요? 그 이유는 다양하지만 경험해 본 사람들은 자신만의 이유가 존재할 것입니다. 저 같은 경우 프로그램의 실행 확인 후 나중에 수정하면 될 거라는 생각으로 급하게 코드를 작성한 후 나중에는 해당 코드를 손댈 엄두가 나지 않았습니다. 하지만 나중은 절대 오지 않습니다.

나쁜 코드로 치르는 대가

다른 사람이 작성한 나쁜 코드로 인해 피해를 본 경험도 다들 존재할 것입니다. 작은 나쁜 코드는 또 다른 나쁜 코드를 생산하고 생산력은 점점 줄어들어 0에 수렴하게 됩니다.

출처: Clean Code

프로그래머에게 있어 생산성은 가치를 평가하는 기준과도 같습니다. 깨끗한 코드를 작성하는 것은 장기적으로 보게 되면 생산 비용을 손쉽게 감소할 방법이며 프로그래머로서 가치를 올리는 수단과도 같습니다.

 

요구사항 분석좋은 코드는 대응되는 관계인가요? 그렇지 않습니다. 요구사항 분석이 잘 되었다고 하더라도 좋은 코드가 나오지 않을 수도 있고 요구사항 분석이 부족하더라도 좋은 코드는 나올 수 있습니다. 각각의 역할이 다를 뿐 프로그래머인 저희의 역할은 좋은 코드를 생산해내야 합니다.

 

시간이 부족해서라는 변명을 들 수도 있습니다. 하지만 진짜 전문가는 깨끗하고 좋은 코드가 시간을 절약할 수 있다는 사실을 잘 알고 있습니다.

깨끗한 코드라는 예술

깨끗한 코드를 작성하는 것은 하나의 그림을 그리는 것으로 비유할 수 있습니다. 그림을 잘 모르는 사람도 그림을 봤을 때 잘 그린 그림인지는 구분할 수 있습니다. (예술적인 의미를 이해하기는 어려울 수 있습니다) 그 말은 깨끗한 코드인지는 깨끗한 코드를 작성할 수 있는 능력이 없더라도 판별할 수 있음을 의미합니다.

 

진정한 전문가가 되기 위해서는 구분하는 것에서 더 나아가 좋은 코드로 개선할 방법을 고민해야 합니다. 이렇게 본다면 프로그래머는 빈 캔버스에 작품을 그리는 화가와 비슷하지 않나요?

깨끗한 코드란?

비야네 스트롭스트룹

  • C++ 창시자이자 The C++ Programming Language 저자
  • 의존성을 최대한 줄여야 유지보수가 쉬워진다.
  • 오류는 명백한 전략에 따라 철저히 처리한다.
  • 성능을 최적으로 유지해야 원칙 없는 최적화로 코드를 망치려는 유혹에 빠지지 않는다.
  • 깨끗한 코드는 한 가지를 제대로 한다.

우아한 코드는 보는 사람에게 줄거움을 선서해야한다는 의미를 담고 있다.

저 또한 진행했던 프로젝트의 코드 리뷰에서 코드가 이쁘다는 말을 들었을 때 좋은 코드를 작성했다는 뿌듯함이 생겼습니다.

철저한 오류 처리에 대해서도 강조하고 있습니다. 메모리 누수, 경쟁 상태(race condition), 명명법 등을 신중하게 결정하고 처리해야 합니다. 한 가지를 제대로 한다는 의미는 주변에 영향을 받거나 주지 않고 자신의 맡은 역할을 온전히 수행함을 의미합니다.

그래디 부치

  • Object Oriented Analysis and Design with Application 저자
  • 깨끗한 코드는 단순하고 직접적이기에 잘 쓴 문장처럼 잘 읽힌다.
  • 설계자의 의도를 절대 숨기지 않는다.
  • 명쾌한 추상화와 단순한 제어문으로 가득하다.

요약하자면 깨끗한 코드는 가독성을 중요시해야 하고 사실에 기반하여 필요한 내용만을 담아야 한다고 말하고 있습니다.

큰 데이브 토마스

  • OTI 창립자이자 이클립스 전략의 대부
  • 깨끗한 코드는 작성자가 아닌 사람이 읽어도 읽기 쉽고 의미 있는 이름이 붙는다.
  • 단위 테스트 케이스와 인수 테스트 케이스가 존재한다.
  • 의존성은 최소이며 의존성을 명확하게 표시한다.
  • 특정 목적을 달성하는 방법은 하나만 제공한다.

다른 사람이 고치기 쉬운 코드를 강조하고 있습니다. 그러기 위해서는 명확한 테스트가 바탕이 돼야 함을 설명하고 있습니다.

마이클 페더스

  • Working Effectively with Legacy Code 저자
  • 깨끗한 코드를 아우르는 특징은 주의 깊게 짜서 고칠 방향을 찾을 수 없게 한다.

론 제프리스

  • Extreme Programming Installed와 Extreme Programming Adventure in C# 저자
  • 모든 테스트를 통과한다.
  • 중복이 없다.
  • 시스템 내 모든 설계 아이디어를 표현한다.
  • 클래스, 메서드, 함수 등을 최대한 줄인다.

중복표현력을 강조하고 있습니다. 표현력을 늘이는 방법에는 여러 가지 동작을 하는 메서드가 존재한다면 메서드 추출을 통해 동작을 분리하는 방법이 존재합니다. 초기에 간단한 추상화를 고려하여 구현을 손쉽게 바꿀 수 있도록 하는 것도 깨끗한 코드를 작성하는 방법의 하나입니다.

워드 커닝햄

  • 위키 창시자, 피트 창시자, 익스트림 프로그래밍 공동 창시자, 디자인 패턴을 뒤에서 움직이는 전문가, 스몰토크와 객체 지향의 정신적 지도자, 코드를 사랑하는 프로그래머들의 대부
  • 코드를 읽으면서 짐작했던 부분들이 그대로 수행한다면 깨끗한 코드라 불러도 된다.
  • 코드가 그 문제를 풀기 위한 언어로 보인다면 아름다운 코드라 불러도 된다.

우리는 저자다

프로그래머도 코드라는 글을 작성하는 것과 같습니다. 이를 읽는 사람과 잘 소통할 책임도 가지고 있습니다.

 

초기에 잘 작성된 코드도 물론 중요하지만, 시간이 지나도 깨끗하게 유지할 수 있도록 노력해야 합니다. 어쩌면 처음 작성할 때 노력보다 더 큰 노력을 들이면서 코드를 수정하거나 추가해야 합니다.

결론

이 책을 읽는다고 좋은 프로그래머가 되리라는 보장도 없고 코드 감각이 생길 것이라는 보장도 없습니다. 이 책을 통해 방법을 읽히고 깨끗하고 좋은 코드를 작성하기 위해 끊임없이 반복하고 노력해야 할 것입니다. 1장을 읽으면서 이 책은 여행을 처음 시작하는 사람들을 위한 가이드라는 생각이 들었습니다. 여행을 처음 해 본 사람은 낯선 환경에 대한 두려움이 있기에 가이드를 참고하지만, 여행을 반복하면서 자신만의 여행 방식을 만들게 될 것입니다.

 

이 책을 읽기 시작한 저는 아직 깨끗하고 좋은 코드를 작성할 수 있는 역량이 부족하기에 최대한 참고하며 따라가겠지만 다 읽은 뒤에는 지속적으로 코드를 작성해보며 저만의 루트를 생각할 수 있는 프로그래머가 되었으면 합니다.

'도서 > 클린 코드' 카테고리의 다른 글

객체와 자료 구조  (0) 2022.07.12
형식 맞추기  (0) 2022.07.10
주석  (0) 2022.07.09
함수  (0) 2022.07.07
의미 있는 이름  (0) 2022.07.05
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Total
Today
Yesterday