나쁜 코드로 치르는 대가
기한을 맞추는 유일한 방법은 언제나 코드를 최대한 깨끗하게 유지하는 습관이다.
모든 프로그래머는 나쁜 코드가 업무 속도를 늦춘다는 사실을 알아도 기한을 맞추려면 나쁜 코드를 양산할 수 밖에 없다고 느낀다.
진짜 전문가는 그것이 틀렸다는 것을 안다.
나쁜 코드를 양산하면 기한을 맞추지 못한다.
열쇠는 '코드 감각'이다.
깨끗한 코드를 작성하려면 '청결'이라는 힘겹게 습득한 감각을 활용해 자잘한 기법들을 적용하는 절제와 규율이 필요하다.
'코드 감각'이 있으면 좋은 코드와 나쁜 코드를 구분한다.
깨끗한 코드를 구현하려는 행위는 그림을 그리는 행위와 비슷하다.
깨끗한 코드란?
C++의 창시자 바야네 스트롭스트룹
나는 우아하고 효율적인 코드를 좋아한다.
깨끗한 코드는 '보기에 즐거운'코드다.
비야네는 '우아한'이라는 단어를 사용한다.
저자의 맥북 사전에 따르면 "외양이나 태도가 기품 있고 단아하며 보기에 즐거운; 교묘하고 단순해 보기에 즐거운" 이라는 뜻이다.
여기서 '보기에 즐거운' 이라는 표현에 주목한다.
나쁜 코드는 나쁜코드를 '유혹'한다.
저자는 비야네가 말하는 효율이 단순히 속도만을 뜻하지는 않는다고 생각한다.
CPU 자원을 낭비하는 코드도 우아하지 못하고 보기에 즐겁지 못하다.
그리고 우아하지 않은 코드는 바람직 하지 않은 결과를 초래한다.
비야네는 '유혹'이라는 단어로 그 결과를 표현한다.
깨끗한 코드는 세세한 사항까지 꼼꼼하게 처리하는 코드다.
비야네는 철저한 오류 처리도 언급한다.
프로그래머들이 대충 넘어가는 부분 중 하나가 오류 처리다.
메모리누수, race condition, 일관성 없는 명명법이 또 다른 예다.
UML 개발자 그래디 부치
깨끗한 코드는 단순하고 직접적이다.
깨끗한 코드는 잘 쓴 문장처럼 읽힌다.
비야네와 흡사한 의견을 표명하지만 가독성을 강조한다.
좋은 소설과 마찬가지로 깨끗한 코드는 해결할 문제의 긴장을 명확히 드러내야 한다.
코드는 추측이 아니라 사실에 기반해야한다.
그래디가 언급한 '명쾌한 추상화'는 참으로 재미난 모순어법이다.
저자의 맥북 사전에 따르면 '명쾌한'은 "힘차게 단호하고 사실적인; 주저하지 않는; 불필요한 사실에 얽매이지 않는" 이라는 의미다.
코드는 반드시 필요한 내용만 담아야한다. 코드를 읽는 사람에게 프로그래머가 단호하다는 인상을 줘야한다.
OTI 창립자 '큰' 데이브 토마스
깨끗한 코드는 작성자가 아닌 사람도 읽기 쉽고 고치기 쉽다.
깨끗한 코드란 다른 사람이 고치기 쉽다.
그래디와 마찬가지로 '가독성'을 강조하지만 한 가지 중요한 반전을 더한다.
다른 사람이 고치기 쉬운 코드가 깨끗한 코드라는 것이다.
실제로 읽기 쉬운 코드와 고치기 쉬운 코드는 엄연히 다르다.
테스트 케이스가 없는 코드는 깨끗한 코드가 아니다.
데이브는 깨끗한 코드를 테스트 케이스와 연관짓는다.
데이브가 옳다. 테스트 케이스가 없는 코드는 깨끗한 코드가 아니다.
아리 코드가 우아해도, 아무리 가독성이 높아도, 테스트 케이스가 없으면 깨끗하지 않다.
작을수록 좋다.
데이브는 '최소'라는 단어를 두 번이나 사용했다.
명백히 그가 큰 코드보다 작은 코드에 가치를 둔다는 의미다.
인간이 읽기 좋은 코드를 작성해야한다.
데이브는 코드가 '문학적'이어야 한다고 말한다.
커누스가 저술한 문학적 프로그래밍이 떠오르는 발언이다.
'레거시 코드 활용 전략' 작가 마이클 페더스
깨끗한 코드는 언제나 누군가 주의 깊게 짰다는 느낌을 준다.
한마디로 요약하면 '주의'다.
마이클은 정곡을 찌른다.
깨끗한 코드는 주의 깊게 작성한 코드다.
누군가 시간을 들여 깔끔하고 단정하게 정리한 코드다.
세세한 사항까지 꼼꼼하게 신경 쓴 코드다.
주의를 기울인 코드다.
XP 방법론 창시자 론 제프리스
켄트 벡이 제안한 단순한 코드 규칙으로 구현을 시작한다. 나는 주로 중복에 집중한다.
중복을 피하라.
한 기능만 수행하라.
제대로 표현하라.
작게 추상화하라.
론은 프로그래밍을 시작한 이래 거의 모든 플랫폼에서 거의 모든 언어로 코드를 구현해왔다.
그러므로 그의 의견은 신중하게 고려할 가치가 있다.
짤막한 문단 몇개로 론은 이 책 내용을 요약했다.
위키 창시자 워드 커닝햄
코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 되겠다.
읽으면서 짐작한 대로 돌아가는 코드가 깨끗한 코드다.
깨끗한 코드는 읽으면서 놀랄 일이 없어야 한다고 워드는 말한다.
코드를 독해하느라 머리를 쥐어 짤 필요가 없어야 한다.
깨끗한 코드는 너무도 잘 짜놓은 코드라 읽는 이가 그 사실을 모르고 넘어간다.
모든 뛰어난 설계처럼 설계자가 코드를 어이 없을 정도로 단순하게 설계했기 때문이다.
언어를 단순하게 보이도록 만드는 책임이 우리에게 있다.
우리는 항상 언어가 문제에 적합하지 않다며 언어를 비난한다.
하지만 워드는 그 책임을 우리 자신에게 돌린다.
"코드가 그 문제를 풀기 위한 언어처럼 보인다면" 아름다운 코드라 말한다.
저자의 생각
이 책은 오브젝트 멘토 진영이 생각하는 깨끗한 코드를 설명한다.
이 책은 저자와 그의 동료들이 생각하는 바를 끔찍할 정도로 상세히 설명한다.
깨끗한 변수이름, 깨끗한 함수, 깨끗한 클래스를 만드는 방법을 소개한다.
이 책에서 가르치는 교훈과 기법은 저자의 진영이 믿고 실천하는 교리다.
하지만 그들의 생각이 절대적으로 '옳다'라는 단정은 금물이다.
#클린코드 #cleancode #프로그래밍 #코드스타일 #클린코드정리 #클린코드1장
'책 공부 > clean code' 카테고리의 다른 글
[Clean Code] 2장 의미 있는 이름 (1) (0) | 2022.07.16 |
---|