클린 코드 도서 요약 내용입니다.
1장 깨끗한 코드
이 책을 읽고 있다면 이유는 두 가지다.
- 프로그래머라서
- 더 나은 프로그래머가 되려고
- 이 책은 좋은 프로그램 작성 요령을 설명하는 책이다.
- 코드를 최대한 다양한 각도에서 살펴본다.
- 이 책을 읽고 나면 코드에 대한 많은 사실을 배운다.
- 좋은 코드와 나쁜 코드를 구분하는 능력도 생긴다.
- 좋은 코드를 작성하는 방법도 익힌다.
- 나쁜 코드를 좋은 코드로 바꾸는 실력도 쌓인다.
코드가 존재하리라
코드를 자동으로 생성하는 시대가 다가온다?
- 헛소리! 앞으로 코드가 사라질 가망은 전혀 없다. 왜? 코드는 요구사항을 상세히 표현하는 수단이니까!
- 어느 정도 수준이 되면 코드의 도움없이 요구사항을 표현하기란 불가능하다. 요구사항을 명시하는 수밖에 없다.
- 기계가 실행할 정도로 상세하게 요구사항을 명시하는 작업, 바로 이것이 프로그래밍이다. 그 결과가 코드다.
- 절대로 불가능한 기대다. 창의력과 직관을 보유한 우리 인간조차도 고객의 막연한 감정만 갖고는 성공적인 시스템을 구현하지 못한다.
- 궁극적으로 코드는 요구사항을 표현하는 언어라는 사실을 명심한다.
나쁜 코드
프로그래머라면 누구나 당연히 나쁜 코드로 고생한 경험이 있다.
- 어째서 나쁜 코드를 짯는가?
- 급해서? 서두르느라? 제대로 짤 시간이 없다고 생각해서, 코드를 다듬느라 시간을 보냈다가 상사한테 욕 먹을까봐, 지겨워서 빨리 끝내려고, 다른 업무가 너무 밀려 후딱 해치우고 밀린 업무로 넘어가려고...
- 우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경험이 있다.
- 우리는 르블랑 법칙 (lebranc's Law)를 몰랐다. 나중은 결코 오지 않는다.
나쁜 코드로 치르는 대가
- 나쁜 코드는 개발 속도를 크게 떨어뜨린다.
- 코드를 고칠 때마다 엉뚱한 곳에서 문제가 생긴다.
- 나쁜 코드가 쌓일 수록 팀 생산력은 떨어진다. 그러다가 마침내 0에 근접한다.
- 생산성이 떨어지면 관리층은 인력을 추가 투입한다.
- 하지만 새 인력은 설계 의도에 맞는 변경과 설계 의도에 반하는 변경을 구분하지 못한다.
원대한 재설계의 꿈
- 이처럼 혐오스러운 코드로는 더 이상 일하지 못하겠다며 관리층에게 재설계를 요구한다.
- 새로운 타이거 팀이 구성된다. 모두가 합류하고 싶어한다. 나머지는 계속 현재 시스템을 유지보수한다.
- 이제 두 팀은 경주를 시작한다. 타이거팀은 기존 시스템을 모두 제공하는 새 시스템을 내놓아야 한다.
- 때로는 경주는 아주 오래 이어진다. 10년 넘게 걸릴수도...
- 새 시스템이 기존 시스템을 따라 잡을 즈음이면 초창기 타이거 팀원들은 모두 팀을 떠났고 새로운 팀원들이 새 시스템을 설계하자고 나선다. 왜? 현재 시스템이 너무 엉망이라서.
태도
한 줄만 고치면 되리라 예상했다가 모듈을 수백 개 건드린 경험이 있는가?
- 코드가 왜 그렇게 되었을까? 우리는 온갖 이유를 들이댄다.
- 원래 설계를 뒤집는 방향으로 요구사항이 변했다고 불평한다.
- 일정이 촉박해 제대로 할 시간이 없었다고 한탄한다.
- 멍청한 관리자와 조급한 고객과 쓸모없는 마케팅 부서와 전화기 살균제 탓이라고 떠벌인다.
- 하지만 딜버트씨, 잘못은 전적으로 우리 프로그래머에게 있답니다. 우리가 전문가답지 못했기 때문입니다.
어째서 우리 잘못인가?
- 요구사항? 일정? 멍청한 관리자와 쓸모없는 마케팅 인간들? 그들에게는 잘못이 없다는 말인가?
- 일정에 쫓기더라도 대다수 관리자들은 좋은 코드를 원한다.
- 그들이 일정과 요구사항을 강력하게 멀어붙이는 이유는 그것이 그들의 책임이기 때문이다.
- 좋은 코드를 사수하는 일은 바로 우리 프로그래머의 책임이다.
자신이 의사라고 가정하자.
- 어느 환자가 수술 전에 손을 씻지 말라고 요구한다. 시간이 너무 걸리니까.
- 질병과 감염의 위험은 환자보다 의사가 더 잘 아니까.
- 나쁜 코드의 위험을 이해하지 못하는 관리자 말을 그대로 따르는 행동은 전문가답지 못하다.
원초적 난제
- 프로그래머는 나쁜 코드가 업무 속도를 늦춘다는 사실을 익히안다.
- 그럼에도 모든 프로그래머가 기한에 맞추려면 나쁜 코드를 양산할 수밖에 없다고 느낀다.
- 오히려 엉망진창인 상태로 인해 속도가 곧바로 늦어지고, 결국 기한을 놓친다.
- 기한을 맞추는 유일한 방법은, 언제나 코드를 최대한 깨끗하게 유지하는 습관이다.
깨끗한 코드라는 예술?
깨끗한 코드를 어떻게 작성할까?
- 깨끗한 코드를 구현하는 행위는 그림을 그리는 행위와 비슷하다.
- 잘 그린 그림을 구분하는 능력이 그림을 잘 그리는 능력은 아니다.
- 다시 말해, 깨끗한 코드와 나쁜 코드를 구분할 줄 안다고 깨끗한 코드를 작성할 줄 안다는 뜻은 아니다.
- 깨끗한 코드를 작성하려면 자잘한 기법들을 적용하는 절제와 규율이 필요하다. 열쇠는 '코드 감각'이다.
- 코드 감각이 없는 프로그래머도 때로는 나쁜 모듈을 알아본다. 하지만 그것으로 끝이다.
- 코드 감각이 있는 프로그래머는 나쁜 모듈을 보면 좋은 모듈로 개선할 방안을 떠올린다.
깨끗한 코드란?
비야네 스트롭스트룹
C++창시자
- 깨끗한 코드는 '보기에 즐거운'코드다.
- 나쁜 코드는 나쁜 코드를 유혹한다.
- 깨진 유리창
- 깨끗한 코드는 세세한 사항까지 꼼꼼하게 처리하는 코드다.
- 깨끗한 코드는 한 가지를 잘 한다고 단언한다.
- 나쁜 코드를 너무 많은 일을 하려 애쓰다가 의도가 뒤섞이고 목적이 흐려진다.
- 깨끗한 코드는 한 가지에 '집중'한다.
그래디 부치
Object Oriented Analysis and Design with Application 저자
- 가독성을 강조
큰 데이브 토마스
OTI 창립자이며 이클립스 전략의 대부
- 깨끗한 코드는 다른 사람이 고치기 쉽다고 단언한다.
- 테스트 케이스가 없는 코드는 깨끗한 코드가 아니다.
- 코드는 '문학적'이어야 한다. 요즘은 인간이 읽기 좋은 코드를 작성하라는 말이다.
마이클 페더스
Working Effectively with Legacy Code 저자
- 깨끗한 코드는 주의 깊게 작성한 코드다.
론 제프리스
Extreme Programming Installed와 Extreme Programming Adventure in C# 저자
- 중복을 피하라. 한 기능만 수행하라. 제대로 표현하라. 작게 추상화하라
워드 커닝햄
위키 창시자, 피트(FIT) 창시자, 익스트림 프로그래밍 공동 창시자
- 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 되겠다.
- ...짐작했던 기능을 그대로 수행한다면...
- 깨끗한 코드는 읽으면서 놀랄 일이 없어야 한다고 워드는 말한다.
우리들 생각
내(밥 아저씨) 생각은 어떻느냐고?
- 깨끗한 변수 이름, 깨끗한 함수, 깨끗한 클래스를 만드는 방법을 소개
- 이 책은 오브젝트 멘토 진영이 생각하는 깨끗한 코드를 설명한다.
- 우리 생각이 절대적으로 '옳다'라는 단정은 금물이다.
우리는 저자다
- 새 코드를 짜면서 우리는 끊임없이 기존 코드를 읽는다.
- 주변 코드가 읽기 쉬우면 새 코드를 짜기도 쉽다.
- 서둘러 끝내려면, 쉽게 짜려면, 읽기 쉽게 만들면 된다.
보이스카우트 규칙
캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라
- 체크아웃할 때보다 좀 더 깨끗한 코드를 체크인한다면 코드는 절대 나빠지지 않는다.
- 변수 이름 하나를 개선하고, 조금 긴 함수 하나를 분할하고, 약간의 중복을 제거하고, 복잡한 if문 하나를 정리하면 충분하다.
프리퀄과 원칙
이 책은 2002년에 출판한 Agile Software Development의 프리퀄(속편)이다.
다양한 설계 원칙: SRP, OCP, DIP
결론
- 이 책을 읽는다고 뛰어난 프로그래머가 된다는 보장은 없다.
- '코드 감각'을 확실히 얻는다는 보장도 없다.
- 단지 뛰어난 프로그래머가 생각하는 방식과 그들이 사용하는 기술과 기교와 도구를 소개할 뿐이다.
- 연습
반응형