안녕하세요, DeepCode 입니다. 이번 글에서는 리팩터링 2판(Martin Fowler)을 정리해보려고 합니다. 평소 유지보수가 어려운 코드를 마주할 때마다 어떻게 하면 더 깔끔하게 다듬을 수 있을지 고민하던 중 이 책을 다시 꺼내 들게 되었습니다.
1. 리팩터링 2판 (Martin Fowler), 어떤 책인가요
이 책은 소프트웨어 공학의 거장 마틴 파울러가 집필하였으며, 코드의 구조를 개선하는 구체적인 방법론을 제시합니다. 2판은 최신 프로그래밍 언어와 패러다임을 반영하여 더욱 풍성해진 내용을 담고 있습니다. 코드 냄새를 식별하는 카탈로그와 이를 해결하기 위한 작은 단계의 리팩터링 기법을 테스트 코드와 병행하는 법을 핵심 메시지로 전달합니다.
2. 코드의 품질을 결정하는 작은 변화의 힘
리팩터링은 단순히 코드를 예쁘게 만드는 작업이 아닙니다. 소프트웨어의 외적 동작은 유지하면서 내부 구조를 개선하여, 향후 기능 추가나 변경이 용이하도록 만드는 설계 과정입니다. 이 책은 한 번에 거대한 설계를 바꾸는 것이 아니라, 아주 작은 단위의 변화를 반복함으로써 시스템의 복잡도를 제어하는 기술을 강조합니다.
3. 인상 깊었던 챕터 3가지
3.1 코드 냄새(Code Smell)의 식별
"코드 냄새는 소프트웨어의 잠재적인 문제를 나타내는 신호입니다." (p.15)
코드가 잘못되었다고 즉각 판단하기보다, 중복된 코드나 너무 긴 함수처럼 '냄새'가 나는 지점을 먼저 찾는 것이 중요합니다. 문제를 정의하는 것만으로도 개선의 방향이 명확해집니다.
3.2 테스트 코드와의 유기적인 결합
리팩터링을 수행할 때 가장 두려운 것은 기존 기능이 망가지는 것입니다. 저자는 리팩터링을 하기 전 반드시 안정적인 테스트 코드가 확보되어야 함을 역설합니다. 테스트가 없다면 그것은 리팩터링이 아니라 위험한 코드 수정일 뿐입니다.
3.3 작은 단계로 나누는 리팩터링 프로세스
한 번의 수정으로 모든 문제를 해결하려 들지 말고, 아주 작은 단계로 나누어 진행해야 합니다. 제 기준으로 정리하면, 이 책이 주는 가장 큰 교훈은 '한 번에 하나씩만 움직이라'는 원칙입니다. 단계가 작을수록 오류를 발견하기 쉽고 되돌리기도 편하기 때문입니다.
4. 실무와 일상에 적용하는 방법
- 코드 리뷰 시 기능 구현 여부뿐만 아니라 코드 냄새가 나는 지점을 함께 찾아봅니다.
- 새로운 기능을 추가하기 전에, 해당 기능을 넣기 가장 좋은 구조로 기존 코드를 먼저 다듬습니다.
- 리팩터링을 시작하기 전, 반드시 해당 로직에 대한 단위 테스트가 통과하는지 확인합니다.
- 한 번에 여러 가지 리팩터링 기법을 섞어 쓰지 말고, 한 가지 기법이 완료된 후 다음 단계로 넘어갑니다.
5. 추천 대상 / 비추천 대상
클린 코드를 지향하는 주니어 개발자나 설계 역량을 키우고 싶은 시니어 개발자에게는 필독서입니다. 코드의 구조적 결함을 논리적으로 파악하고 싶은 분들에게 큰 도움이 됩니다. 반면, 당장 돌아가는 기능 구현에만 급급하거나, 리팩터링의 개념을 이해하기 힘든 완전 초보자에게는 다소 방대한 양과 깊이가 부담스럽게 느껴질 수 있습니다.
자주 묻는 질문 5가지
Q1. 리팩터링은 언제 수행하는 것이 가장 효율적인가요?
기능을 추가하기 직전이나, 버그를 수정하기 전, 혹은 코드를 읽다가 구조적 결함이 눈에 띌 때 수행하는 것이 좋습니다. 설계의 부채를 쌓아두지 않는 것이 핵심입니다.
Q2. 테스트 코드가 없는 프로젝트에서도 적용 가능한가요?
가장 위험한 접근입니다. 테스트가 없다면 리팩터링 과정에서 발생한 오류를 잡아낼 수 없습니다. 최소한의 안전장치를 먼저 만드는 과정이 선행되어야 합니다.
Q3. 리팩터링과 기능 구현의 차이점은 무엇인가요?
기능 구현은 사용자에게 새로운 가치를 전달하는 것이고, 리팩터링은 개발자가 코드를 관리하기 쉽게 만드는 것입니다. 두 작업은 명확히 분리되어 진행되어야 합니다.
Q4. 책에 나온 기법들을 모두 외워야 하나요?
모든 패턴을 암기할 필요는 없습니다. 다만, 어떤 상황에서 어떤 '냄새'가 나는지를 인지하고, 필요할 때 책의 카탈로그를 찾아보는 습관을 들이는 것이 훨씬 유용합니다.
Q5. 리팩터링을 하면 개발 속도가 느려지지 않을까요?
단기적으로는 속도가 줄어드는 것처럼 보일 수 있습니다. 하지만 장기적으로는 코드의 복잡도를 낮추어, 나중에 발생할 거대한 수정 비용과 버그 수정 시간을 획기적으로 줄여줍니다.
정리해보면
리팩터링 2판은 코드의 질을 높이기 위한 구체적인 지도와 같습니다. 작은 변화를 반복하며 테스트와 함께 진행하는 습관이 중요합니다. 결국 좋은 코드는 한 번에 완성되는 것이 아니라 지속적인 다듬음을 통해 만들어집니다. 다음 글에서는 클린 코드의 원칙들을 다루어 보겠습니다.
'책 서평 > IT 서적' 카테고리의 다른 글
| 실용주의 프로그래머 20주년 기념판 (Hunt & Thomas) 핵심 정리·서평 (0) | 2026.04.28 |
|---|---|
| 클린 아키텍처 (Robert C. Martin) 핵심 정리·유지보수 가능한 설계 원칙 (0) | 2026.04.28 |
| 이펙티브 자바 3판 (Joshua Bloch) 핵심 정리·자바 설계의 정석 (0) | 2026.04.28 |
| 함께 자라기 (김창준) 핵심 정리·애자일 학습과 협업의 원리 (0) | 2026.04.28 |
| 코드 컴플리트 2판 (Steve McConnell) 핵심 정리·소프트웨어 공학 가이드 (0) | 2026.04.28 |
