개발자의 서재

읽기 좋은 코드가 좋은 코드다. 이해하기 좋은 코드를 작성하는 방법

지구빵집 2013. 3. 19. 17:35
반응형



개발자들에게 부족한것이 다른 사람의 감정을 이해하지 못하는것. 그러니까 사용자와 감정이입이 되기 힘들고, 그만큼 소통이나 대화에 서툴다는 반증이 아닐런지...


그런 의미에서 이책은 철저하게 읽기 좋고 이해하기 쉬운 코드를 만드는 방법을 가장 단순한 예로 정말 알기쉽게 설명한다. 자바스크립트로, 자바로, C++로 그리고 파이썬까지 예를 들어가며 직접 구현하고 보여준다. 무려 2틀 동안에 읽어버릴 정도로 쉽다. 깊이가 없는게 당연할 정도로 쉬운 코드 작성의 원리를 설명한다. 


개발하시는 분이나, 개발에 전념하실 분들은 일독을 권한다. 아래는 중요한 구절 요약.. 


역자가 임백준. 번역도 깔끔하고 읽기에 너무 편하다.





읽기 좋은 코드가 좋은 코드다.


- 더스틴 보즈웰, 트레버 파우커 지음

- 임백준 옮김


1장 코드는 이해하기 쉬워야 한다.


코드는 다른 사람이 그것을 이해하는 데 들이는 시간을 최소화하는 방식으로 작성되어야 한다.


2장 이름에 정보담기


-의미있는 특정한 단어 고르기 : get, size, stop, tmp, retval, foo 등과 같은 단어 피하고, 상황에 적합한 화려한 단어를 사용하라.


그냥 단어와 대안이 되는 화려한 단어


send : deliver, dispatch, announce, distribute, route

find : search, extract, locate, recover

start : launch, create, begin, open

make : create, set up, build, generate, compose, add, new


재치있는 이름보다 명확하고 간결한 이름이 더 좋다.

tmp 라는 이름은 대상이 짧게 임시적으로만 존재하고, 임시적 존재 자체가 변수의 가장 중요한 용도일때에 한해서 사용해야 한다.


좋은 이름을 생각하려고 고민하는 습관을 들이면 '작명을 위한 내공'이 빠르게 쌓인다.


추상적인 이름보다구체적인 이름을 사용하라.


추가적인 정보를 이름에 더해라.


단위를 포함하는 값에는 단위를 추가(start_ms, delay_usec, size_mb, max_kpbs, degrees_cw)   


이름길이에 대해 : 좁은 범위에서는 짧은 이름, 긴이름(에디터에서 지원), 멤버인지 변수인지 구분되도록 이름짓기.


3장 오해할 수 없는 이름들


본인이 지은 이름을 "다른 사람이 다른 의미로 해석할 수 있을까 ?" 라는 질문을 던져보며 철처하게 확인해야 한다.


경계를 포함하는 한계값을 다룰 때는 min과 max를 사용


경계를 포함하느 범위에는 first와 last를 사용


4장 미학


코드를 읽는 사람이 이미 친숙한, 일관성 있는 레이아웃을 사용


비슷한 코드는 서로 비슷해 보이게 만들어라


서로 연관된 코드는 하나의 블록으로 묶어라


미학적으로 보기좋은 코드가 사용하기 더 편리하다는 사실.

코드를 보기 좋게 만드는 작업은 코드의 구조 자체를 개선시킨다.


도움이 된다면 코드의 열을 맞춰라


의미있는 순서를 선택하고 일관성 있게 사용, 선언문을 블록화, 코드를 문단으로 분리


일고나성 있는 스타일은 '올바른' 스타일보다 더 중요하다.


5장 주석에 담아야 하는 대상


주석의 목적은 코드를 읽는 사람이 코드를 작성한 사람만큼 코드를 잘 이해하게 돕는 데 있다. 


코드에서 빠르게 유추할 수 있는 내용은 주석으로 달지말자.


설명 자체를 위한 설명을 달지 말고, 나쁜 이름에 주석을 달게 아니고 이름을 고쳐라.


좋은 코드 > 나쁜 코드 + 주석


프로그래머들끼리 알리는 표시와 의미


TODO : 아직 하지 않은 일

FIXME : 오동작을 일으킨다고 알려진 코드

HACK : 아름답지 않은 해결책

XXX : 위험 ! 여기 큰 문제가 있다

TextMate : ESC



6장 명확하고 간결한 주석달기


간결한 주석을 달고 모호한 대명사는 피하라


함수의 동작을 구체적으로 설명하라.


코드의 의도를 명시하라


정보축약형 단어 사용 - 구구절절, 경험적인, 주먹구구식, 순신한 해법등...


7장 읽기 쉽게 흐름제어 만들기


흐름을 제어하는 조건과 루프등은 최대한 자연스럽게 만들도록 노력해라.


줄 수를 최소화 하는 일보다 다른 사람이 코드를 읽고 이해하는 데 걸리는 시간을 최소화하는 일이 더 중요하다.


do/while 루프는 피하라



8장 거대한 표현을 잘게 쪼개기


거대한 표현을 더 소화하기 쉬운 여러 조각으로 나눈다.


하위표현을 담을 추가변수를 만들어 하위표현의 의미를 설명 - 설명변수라고도 한다.


영리하게 짧은 코드는 다른 사람에게 혼란을 주고 이해하기 어렵게 만든다.


9장 변수와 가독성


변수 제거 : 불필요한 임시 변수들, 중간 결과 담는 변수, 흐름 제어 변수 


변수가 적용되는 범위를 최대한 좁혀라.


많은 메소드를 정적 static으로 만들어서 클래스 멤버 접근을 제한하라.


변수값을 변경시키는 곳이 많을 수 록 현재값을 추측하기가 어려워진다.


10장 상관없는 하위문제 추출하기 


큰 흐름과 관계가 적은 하위문제를 적극적으로 발견해서 추출하라는 것이다. 이렇게 추출된 코드는 자신이 호출되는 이유를 알면 안된다.

순수한 유틸리티 코드를 많이 만드는 것이 재사용을 위한 첫걸음이다.

ReadFileToString(), format_pretty() 등과 같은 일반적인 목적을 가진 코드를 많이 만들어라.

11장 한번에 하나씩

한번에 하나의 작업만 수행되게 코드를 구성해야 한다. - 코드가 수행하는 모든 작업을 나열한다. 이러한 작업을 분리하여 서로 다른 함수나 논리적으로 구분되는 영역에 놓을 수 있는 코드로 만든다.

가장 어려운 부분은 애초에 프로그램이 수행하는 모든 작은 일들을 빠뜨리지 않고 정확하게 서술하는 것이다.  

12장 생각을 코드로 만들기

"할머니에게 설명할 수 없다면 당신은 제대로 이해한 게 아닙니다." - 알버트 아인슈타인 -

코드를 좀 더 명확하게 만드는 방법 : 코드가 할 일을 옆의 동료에게 말하듯이 평범한 영어로 묘사하라. 이 설명에 들어가는 핵심적인 단어와 문구를 포착하라. 설명과 부합하는 코드를 작성하라.

코드 설명을 영어로 쓰면 더 좋을걸...

13장 코드분량 줄이기

가장 읽기 쉬운 코드는 아무것도 없는 코드이다.

새로운 프로젝트를 시작하면 공연히 흥분해서 뭔가 멋진 기능을 구현하려고 궁리한다. 하지만 프로그래머는 정말로 필요한 기능이 얼마나 있는지 과대평가하는 경향이 있다.

매일 15분씩 자신의 표준 라이브러리에 있는 모든 함수/모듈/형들의 이름을 읽어라. 한 줄 한 줄 모두 엄격한 적자생존의 과정을 겪으며 살아남은 코드는 모두 소중하다. 라이브러리를 사용하면 시간도 절약되고, 코드양이 줄어들기도 한다.

14장 테스트와 가독성

읽거나 유지보수하기 쉽게 테스트를 만들어라. 덜 중요한 세부사항은 사용자가 볼 필요없게 숨겨서 더 중요한 내용이 눈에 잘 띄게 해야 한다.

가능하면 가장 간단한 입력으로 코드를 완전히 검사할 수 있어야 한다. 

표 14-1 과 14-2는 참 중요한 내용이다.

15장 분/시간 카운터를 설계하고 구현하기 

3가지 방법으로 구현하고 평가한다. - 꼭 실습하기를...

Appendix - 추가적인 도서목록

이미지 출처 : 알라딘 서평



반응형