켄트 벡이 "코드를 바꾸기 전에 먼저 정리해야 할까?"라는 질문 하나를 붙잡고 쓴 얇은 책. 아주 작은 구조 변경인 정리의 기법, 언제 정리할지의 관리, 왜 그런지의 이론을 차례로 다룬다.
정리 기법
대부분 몇 분이면 끝나는 작은 변경들이다. 성격별로 묶으면 이렇다.
- 흐름 펴기: 보호 구문, 죽은 코드 지우기, 같은 일을 다른 모양으로 한 코드를 하나로 맞추기(Normalize Symmetries)
- 읽는 순서와 배치: 읽기 좋은 순서·함께 바뀌는 것끼리 모으기·선언과 초기화 붙이기(문장 슬라이드하기), 빈 줄로 덩어리 나누기(Chunk Statements)
- 이름 붙이기: 설명 변수, 설명 상수, 필요한 입력을 드러내는 명시적 매개변수(Explicit Parameters), 목적이 분명한 헬퍼 추출(Extract Helper)
- 합쳤다 다시 나누기: 너무 잘게 쪼개져 이해가 안 되면 한 덩어리로 합친 뒤 다시 정리한다(One Pile, 한국어판 "하나의 더미")
- 주석: 남이 물어볼 만한 것은 미리 적고, 코드와 같은 말을 하는 주석은 지운다
- 인터페이스 바꾸기: 새 인터페이스를 만들고 옛 구현을 부르게 한다(New Interface, Old Implementation, 병렬 수정 (팽창-수축))
관리
구조 변경과 동작 변경을 다른 커밋·PR(Pull Request)로 나누고, 정리를 얼마나 묶어 배포할지, 정리를 먼저 할지 나중에 할지 아예 안 할지를 정한다(정리(Tidying)).
이론
소프트웨어 설계는 요소들을 이롭게 관계 짓는 일이다. 돈의 시간 가치와 옵션의 가치가 정리 시점을 두고 부딪치며(구조와 동작, 옵션의 가치), 소프트웨어 비용은 결국 결합도에 달렸고 응집도가 그것을 다루는 도구다.
같은 저자의 설계 규칙, 정리보다 큰 단위인 리팩터링과 함께 읽으면 좋다.
출처: 『켄트 벡의 Tidy First?』 켄트 벡 (원서 Tidy First?)