개발로그/Clean Code

[1장] 깨끗한 코드

떼닝 2022. 10. 31. 01:24

코드가 존재하리라

- 코드는 요구사항을 상세히 표현하는 수단.

- 프로그래밍 언어에서 추상화 수준은 점차 높아질 것이며, 특정 응용 분야에 적합한 프로그래밍 언어(domain-specific language)의 수도 점차 많아질 것

나쁜 코드

- 80년대 후반 킬러 앱 하나를 구현한 회사가 있었는데, 망했다... 필자는 이를 나쁜 코드 탓 이라고 생각하였음

- 대충 짠 프로그램이 돌아간다는 사실에 안도감을 느끼며 안 돌아가는 프로그램보다 돌아가는 쓰레기가 좋다고 위로한 경험이 있다...

- 다시 돌아와 나중에 정리하겠다고 다짐하지만, 나중은 결코 오지 않는다.

나쁜 코드로 치르는 대가

- 나쁜 코드는 개발 속도를 크게 떨어뜨리고, 팀 생산성 또한 떨어지다가 마침내 0에 근접.

- 생산성이 떨어지면 관리층은 인력을 추가로 투입하지만, 새 인력은 시스템 설계에 대한 조예가 깊지 않아 설계 의도에 맞는 변경과 반하는 변경을 구분하지 못한다... 결국 나쁜 코드를 더 많이 양산하게 된다

원대한 재설계의 꿈

- 생산성을 위해 재설계를 하려고 하지만...

- 기존 시스템 기능을 모두 제공하는 새로운 시스템을 내놓으면서, 기존 시스템에 가해지는 변경도 모두 따라잡아야 하기 때문에 시간이 오래 걸린다

- 이런 거 안 하려면... 시간을 들여 깨끗한 코드를 만드는 노력을 해야 한다! 비용 절감을 위해, 그리고 전문가로서 살아남기 위해!

태도

- 좋은 코드가 어째서 순식간에 나쁜 코드로 전락할까? ... 우리가 전문가답지 못했기 때문에

- 요구사항이 많지만... 그 일정에 쫓기면서도 관리자들은 좋은 코드를 원한다. 좋은 코드를 사수하는 일은 프로그래머들의 책임이다.

- 나쁜 코드의 위험을 이해하지 못하는 관리자 말을 그대로 따르는 행동은 전문가답지 못하다.

원초적 난제

- 기한을 맞추려면 나쁜 코드를 양산할 수밖에 없다고 느끼지만, 사실은 빨리 가려고 시간을 들이지 않는 것.

- 오히려 나쁜 코드를 양산하면 기한을 맞추지 못한다. 엉망진창인 상태로 속도가 늦어지게 된다.

- 기한을 맞추는 유일한 방법은, 언제나 코드를 최대한 깨끗하게 유지하는 습관

깨끗한 코드라는 예술?

- 깨끗한 코드를 구현하는 행위는 그림을 그리는 행위와 비슷하다.

- 깨끗한 코드와 나쁜 코드를 구분할 줄 안다고 깨끗한 코드를 작성할 줄 안다는 뜻은 아니다.

- 깨끗한 코드를 작성하려면 '청결'이라는 힘겹게 습득한 감각을 활용해 자잘한 기법, '코드 감각'을 적용하는 절제와 규율이 필요하다.

- '코드 감각'으로 최고 방안을 선택한 후 개선할 방안을 떠올리고, 이동하는 경로를 계획

깨끗한 코드란?

비야네 스트롭스트룹

- C++ 창시자이자 The C++ Programming Language 저자

- 깨끗한 코드는 '보기에 즐거운' 코드. 보는 사람에게 즐거움을 선사해야 한다고 언급.

- '효율'. 속도만을 의미하는 것이 아니라, CPU 자원까지 생각해야 함.

- '철저한 오류 처리'. 세세한 사항까지 꼼꼼하게 신경 씀으로써 메모리 누수, 경쟁 상태(race condition), 일관성 없는 명명법이 없도록 해야 함.

- 깨끗한 코드는 한 가지에 '집중'한다. 각 함수와 클래스와 모듈은 주변 상황에 현혹되거나 오염되지 않은 채 한 길만 걷는다.

그래디 부치

- Object Oriented Analysis and Design with Application 저자

- 깨끗한 코드는 잘 쓴 문장처럼 읽혀야 한다.

- '명쾌한 추상화'. 코드는 추측이 아니라 사실에 기반해야 함. 반드시 필요한 내용만 담아야.

'큰' 데이브 토마스

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

- 깨끗한 코드란 다른 사람이 고치기 쉬운, 읽기 쉬운 코드.

- 코드는 작을 수록 좋다.

마이클 페더스

- Working Effectively with Legacy Code 저자

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

론 제프리스

- Extreme Programming Installed와 Extreme Programming Adventure in C# 저자

- 중복을 피하라, 한 기능만 수행하라, 제대로 표현하라, 작게 추상화하라.

워드 커닝햄

- Wiki 창시자, Fit 창시자, eXtreme Programming 공동 창시자, 디자인 패턴을 뒤에서 움직이는 전문가, Smalltalk와 OO의 정신적 지도자, 코드를 사랑하는 프로그래머들의 대부

- 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 그것이 깨끗한 코드

- 코드가 그 문제를 풀기 위한 언어처럼 보일 경우 아름다운 코드