1장: 깨끗한 코드
코드가 존재하리라
코드는 요구사항을 상세히 표현하는 수단. 어느 수준에 이르면 코드의 도움 없이는 요구사항을 상세히 표현하기란 불가능하다!
나쁜 코드
좋은 코드는 중요하며, 이 분야에서 가장 강조되어 온 전제 중 하나다.
80년대 한 킬러 앱 (Killer App)을 만든 회사의 사례
출시 후 커다란 인기를 누렸으나, 제품의 출시 주기가 점점 늘어남
이전 버전에 있었던 버그가 다음 버전에도 그대로 남아있고, 시동 시간이 길어지고 프로그램이 죽는 횟수도 늘어남
결국 회사는 얼마 못 가 폐업
원인은 바로 나쁜 코드 탓!
프로그래머라면 모두 나쁜 코드로 고생한 경험이 있다.
스스로가 짠 쓰레기(mess) 코드를 나중에 손보겠다고 생각한 경험이 있다. 하지만 나중은 결코 오지 않는다 (Later equals never.)
나쁜 코드로 치르는 대가
나쁜 코드는 개발 속도를 크게 떨어트린다. 프로젝트 초반에는 번개처럼 나가다가 1-2년만에 굼벵이처럼 기어가는 팀도 많다.
나쁜 코드가 쌓일수록 팀 생산성은 떨어진다. 관리자들은 나름대로 복구를 시도하고자 새 인력을 투입하지만, 생산성을 높여야 한다는 압박감에 나쁜 코드를 더 많이 양산한다.
간혹 아예 새로운 시스템을 구축하는 방법을 택하기도 하지만, 같은 방식이라면 결국 이는 반복된다.
태도
코드가 왜 그렇게 되었을까? 요구사항이 변해서? 일정이 촉박해서? 잘못은 전적으로 우리 프로그래머들에게 있다. 우리가 전문가답지 못했다.
관리자와 마케팅은 약속과 공약을 내걸며 우리(프로그래머)게 정보를 구한다. 우리에게 정보를 구하지 않도라도 우리가 적극적으로 정보를 제공해야 마땅한다.
사용자는 요구사항을 내놓으며 우리에게 현실성을 자문한다. 프로젝트 관리자는 일정을 잡으며 우리에게 도움을 청한다.
프로젝트를 계획하는 과정에 우리에게도 책임이 있고, 나쁜 코드가 초래하는 실패에는 더더욱 책임이 크다.
원초적 난제
기한을 맞추려면 나쁜 코드를 양산할 수 밖에 없다?
나쁜 코드를 양산하면 기한을 맞추지 못한다. 엉망인 상태로 인해 속도가 늦어지고, 결국 기한을 놓친다.
작업을 빨리 하는 방법은 언제나 코드를 최대한 깨끗하게 유지하는 습관이다.
깨끗한 코드라는 예술?
깨끗한 코드를 어떻게 작성할까?
깨끗한 코드는 그림 그리기와 비슷하다. 그림을 엉망으로 그렸는 지 판단하는 것이 곧 그림을 잘 그린다는 이야기가 아니듯, 나쁜 코드를 구분할 줄 안다고 깨끗한 코드를 작성할 줄 안다는 뜻은 아니다.
코드 감각
좋은 코드와 나쁜 코드를 구별할 뿐만 아니라, 절제와 규율을 적용해 나쁜 코드를 좋은 코드로 바꾸는 전략도 파악한다.
깨끗한 코드란?
비야네 스트롭스트룹
우아한(elegant) 코드: "보기에 즐거운 (pleasing)" 코드
효율적인(effecient) 코드: 속도가 느리고, CPU 자원을 낭비하는 코드는 우아하지 못하다!
나쁜 코드는 나쁜 코드를 유혹(tempt)한다!
철저한 오류 처리: 세세한 사항까지 꼼꼼하게 신경 쓰기. 프로그래머들이 대충 넘어가는 부분 중 하나가 오류 처리다. 나머지는 메모리 누수, 경쟁 상태(race condition), 일관성 없는 명명법.
깨끗한 코드는 한 가지를 잘 한다. 한 가지 역할에 집중한다!
그레디 부치
가독성: 깨끗한 코드는 단순하고 직접적이다. 깨끗한 코드는 잘 쓴 문장처럼 읽힌다.
명쾌한 추상화: 코드는 추측이 아니라 사실에 기반해야 한다. 반드시 필요한 내용만 담아야 한다. 코드를 읽는 사람에게 프로그래머가 단호하다는 인사를 줘야 한다.
데이브 토마스
깨끗한 코드는 작성자가 아닌 사람도 읽기 쉽고 고치기 쉽다.
테스트 케이스가 없는 코드는 깨끗한 코드가 아니다!
깨끗한 코드에는 의미 있는 이름이 붙는다.
의존성은 최소이며 각 의존성을 명확히 정의한다.
마이클 페더스
주의(care): 코드를 주의깊게 짜는 방법, 누군가 시간을 들여 깔끔하고 단정하게 정리한 코드
론 제프리스
중복을 피하라, 한 기능만 수행해라, 제대로 표현하라, 작게 추상화하라!
워드 커닝햄
코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드.
코드가 그 문제를 풀기 위한 언어처럼 보인다면 아름다운 코드라 불러도 되겠다.
우리(저자 본인을 비롯한 진영)의 생각 (로버트 C. 마틴)
깨끗한 변수 이름, 깨끗한 함수, 깨끗한 클래스를 만드는 방법을 소개한다.
이 책에서 가르치는 교훈과 기법은 우리 진영이 믿고 실천하는 교리이다. 우리가 가르치는 교훈을 따른다면 우리가 만끽한 이익을 여러분도 누리리라.
하지만 우리 생각이 전적으로 옳다라는 단정은 금물이다.
Last updated