📚 Study

책 요약 <Clean Code>

date
Jul 3, 2023
slug
book-clean-code
author
status
Public
category
📚 Study
tags
Book
summary
<Clean Code>를 읽고 메모한 내용을 남깁니다.
type
Post
thumbnail
clean-code-image.png
 
(2023.07.03 월)

들어가면서

 
핵심은 팀이나 공동체에서 서로 동의하는 합리적인 원칙을 세우기 위한 소통에 있다.
 
장인 정신을 익히는 과정은 두 단계로 나뉜다. 바로 이론과 실전이다. 첫째, 원칙, 패턴, 기법, 경험이라는 지식을 습득해야 한다. 둘째, 열심히 일하고 연습해 지식을 몸과 마음으로 체득해야 한다.
 
이 책은 세 부분으로 나눠진다. 처음 몇 장은 깨끗한 코드를 작성하는 원칙, 패턴, 실기를 설명한다. 코드가 많아 읽기가 힘들지도 모르지만 둘째 부분을 준비하는 단계다. 둘째 부분은 여러 사례 연구를 소개하는데, 복잡도는 점점 더 높아진다. 각 사례 연구는 코드를 깨끗하게 고치는, 즉 문제가 있는 코드를 문데가 더 적은 코드로 바꾸는 연습이다. 상세히 살펴보려면 집중력이 필요하다. 설명과 코드를 번갈아 뒤적여야 한다. 코드를 분석하고 이해하며 코드에 가하는 변경과 이유를 납득해야 한다. 셋째 부분은 결말이다. 사례 연구를 만들면서 수집한 냄새와 휴리스틱을 마지막 장에서 열거한다. 코드를 분석하고 정리하면서 우리는 우리 행위의 모든 이유를 휴리스틱이나 냄새로 정리했다. 코드를 짜고, 읽고, 정리하는 관점에서, 우리가 생각하는 방식을 묘사한 지식 기반을 구축했다. *휴리스틱(Heuristics) : 문제를 해결하거나 불확실한 사항에 대해 판단을 내릴 필요가 있지만, 명확한 실마리가 없을 경우에 사용하는 편의적 발견적인 방법. 다른 말로 표현하면 간편법, 발견법, 어림셈 등. “경험적인, 스스로 발견하게 하는”의 뜻을 가진 영단어.
 

1장 깨끗한 코드

 
궁극적으로 코드는 요구사항을 표현하는 언어라는 사실을 명심한다. 요구사항에 더욱 가까운 언어를 만들 수도 있고, 요구사항에서 정형 구조를 뽑아내는 도구를 만들 수도 있다. 하지만 어느 순간에는 정밀한 표현이 필요하다. 그 필요성을 없앨 방법은 없다. 그러므로 코드도 항상 존재하리라.
 
우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경험이 있다. 우리 모두는 대충 짠 프로그램이 돌아간다는 사실에 안도감을 느끼며 그래도 안 돌아가는 프로그램보다 돌아가는 쓰레기가 좋다고 스스로를 위로한 경험이 있다. 다시 돌아와 나중에 정리하겠다고 다짐했었다. 물론 그때 그 시절 우리는 르블랑의 법칙을 몰랐다. 나중은 결코 오지 않는다.
 
깨끗한 코드를 작성하려면 ‘청결’이라는 힘겹게 습득한 감각을 활용해 자잘한 기법들을 적용하는 절제와 규율이 필요하다. 열쇠는 ‘코드 감각’이다. 어떤 사람은 코드 감각을 타고난다. 어떤 사람은 투쟁해서 얻어야 한다. ‘코드 감각’이 있으면 좋은 코드와 나쁜 코드를 구별한다. 그뿐만이 아니다. 절제와 규율을 적용해 나쁜 코드를 좋은 코드로 바꾸는 전략도 파악한다. ‘코드 감각’이 있는 프로그래머는 나쁜 모듈을 보면 좋은 모듈로 개선할 방안을 떠올린다. ‘코드 감각’으로 최고 방안을 선택한 후 여기서 거기까지 이동하는 경로를 계획한다.
 
비야네 스트롭스트룹(Bjarne Stroustrup) : C++ 창시자
깨끗한 코드는 한 가지를 제대로 한다. 각 함수와 클래스와 모듈은 주변 상황에 현혹되거나 오염되지 않은 채 한길만 걷는다.
나쁜 코드는 나쁜 코드를 ‘유혹’한다! 흔히 나쁜 코드를 고치면서 오히려 더 나쁜 코드를 만든다는 것이다.
 
그래디 부치(Grady Booch)
깨끗한 코드는 해결할 문제의 긴장을 명확히 드러내야 한다.
그래디가 언급한 ‘명쾌한 추상화’는 참으로 재미난 모순어법이다. ‘명쾌한crisp’이라는 단어는 ‘구체적인concrete’이라는 단어와 유사하지 않던가? 코드는 추측이 아니라 사실에 기반해야 한다. 반드시 필요한 내용만 담아야 한다. 코드를 읽는 사람에게 프로그래머가 단호하다는 인상을 줘야 한다.
 
데이브 토마스(Dave Tomas) : OTI 창립자이자 이클립스 전략의 대부
데이브는 깨끗한 코드란 다른 사람이 고치기 쉽다고 단언한다. 당연하게 들리지만 아무리 강조해도 지나치지 않은 교훈이다. 실제로 읽기 쉬운 코드와 고치기 쉬운 코드는 엄연히 다르다!
테스트 케이스가 없는 코드는 깨끗한 코드가 아니다.
 
마이클 페더스(Michael Feathers)
깨끗한 코드는 언제나 누군가 주의 깊게 짰다는 느낌을 준다. 누군가 시간을 들여 깔끔하고 단정하게 정리한 코드다. 세세한 사항까지 꼼꼼하게 신경을 쓴 코드다. 주의를 기울인 코드다.
 
론 제프리스(Ron Jeffries)
최근 들어 나는 켄트 백이 제안한 단순한 코드 규칙으로 구현을 시작한다. (그리고 같은 규칙으로 구현을 거의 끝낸다.) 중요한 순으로 나열하자면 간단한 코드는
  • 모든 테스트를 통과한다.
  • 중복이 없다.
  • 시스템 내 모든 설계 아이디어를 표현한다.
  • 클래스, 메서드, 함수 등을 최대한 줄인다.
나는 중복에 집중한다. 같은 작업을 여러 차례 반복한다면 코드가 아이디어를 제대로 표현하지 못한다는 증거다. 나는 문제의 아이디어를 찾아내 좀 더 명확하게 표현하려 애쓴다.
중복을 피하라. 한 기능만 수행하라. 제대로 표현하라. 작게 추상화하라.
 
워드 커닝햄(Ward Cunningham)
코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 되겠다. 코드가 그 문제를 풀기 위한 언어처럼 보인다면 아름다운 코드라 불러도 되겠다.
프로그램을 단순하게 보이도록 만드는 열쇠는 언어가 아니다. 언어를 단순하게 보이도록 만드는 열쇠는 프로그래머다!
 
깨끗한 변수 이름, 깨끗한 함수, 깨끗한 클래스를 만드는 방법
주변 코드를 읽지 않으면 새 코드를 짜지 못한다. 주변 코드가 읽기 쉬우면 새 코드를 짜기도 쉽다. 주변 코드를 읽기가 어려우면 새 코드를 짜기도 어렵다. 그러므로 급하다면, 서둘러 끝내려면, 쉽게 짜려면, 읽기 쉽게 만들면 된다.
 

참고