# 📚 “Uncle Bob처럼 리팩터링 하지 마세요” – 두 번째 에디션을 읽고 알아야 할 핵심 포인트

*SEO 키워드: 클린 코드, 리팩터링, Uncle Bob*

---

# # 서론 – “리팩터링이 언제 문제인가?”

프로그래밍을 시작한 지 얼마 안 된 초보 개발자라면, **“클린 코드를 만들려면 무조건 리팩터링을 해야 한다”**는 말을 듣고 무작정 코드를 고쳐버리기 쉽습니다. 하지만 로버트 C. 마틴, 일명 **Uncle Bob**이 제시한 원칙을 그대로 적용한다는 것이 언제나 최선은 아닙니다.

최근에 출간된 *“Don’t Refactor Like Uncle Bob (Second Edition)”*은 기존의 리팩터링 조언을 재검토하고, **‘언제, 어떻게, 왜’** 리팩터링을 해야 하는지 구체적인 사례와 함께 설명합니다. 이번 포스팅에서는 이 책이 전하는 핵심 메시지를 초보자도 이해하기 쉽게 정리하고, 실제 프로젝트에 적용할 수 있는 실전 팁을 제공하려 합니다.

---

# # 1️⃣ 리팩터링의 목적을 명확히 하라

## # 1‑1. 버그를 잡는 것이 목표가 아니다

리팩터링은 **코드 가독성**·**유지보수성**을 높이는 것이 주 목적이며, 버그를 직접 수정하는 작업은 **디버깅**과 구분됩니다. 책에서는 “버그가 있으면 먼저 테스트를 작성하고, 그 다음에 리팩터링한다”는 흐름을 강조합니다.

## # 1‑2. 비즈니스 로직과 기술 부채 구분하기

프로젝트 초반에 비즈니스 로직을 빠르게 구현하고 싶을 때는 **‘임시적인 기술 부채’를 허용**할 수 있습니다. 하지만 이 부채를 언제, 어떻게 갚을지에 대한 로드맵이 없으면 나중에 리팩터링이 불가능해집니다.

> **TIP**: `TODO` 주석 대신 `#tech_debt`와 같은 태그를 활용해 부채 항목을 추적하면, 리팩터링 시점과 범위를 명확히 정할 수 있습니다.

---

# # 2️⃣ “Uncle Bob” 스타일 리팩터링의 함정

## # 2‑1. ‘완벽한 설계’를 앞세운 리팩터링

Uncle Bob은 **“코드는 처음부터 완벽하게 설계돼야 한다”**는 이상적인 철학을 제시합니다. 실제 현장에서는 요구사항이 계속 변하고, 팀원의 경험 수준도 다르기 때문에 **‘완벽함’**을 추구하면 오히려 **과도한 리팩터링**에 빠지기 쉽습니다.

## # 2‑2. 과도한 추상화는 오히려 복잡성을 증가

불필요하게 인터페이스를 남발하거나, 작은 기능을 별도 모듈로 분리하면 **코드 이해 비용**이 증가합니다. 책에서는 “**‘YAGNI(You Aren’t Gonna Need It)’** 원칙을 지키라”며, 실제로 사용되는 기능만을 기준으로 추상화를 진행하라고 조언합니다.

---

# # 3️⃣ 안전하게 리팩터링하는 5단계 가이드

| 단계 | 핵심 활동 | 초보자를 위한 체크리스트 |

|------|-----------|------------------------|

| **1. 테스트 확보** | 기존 기능을 검증하는 단위·통합 테스트 작성 | ✅ 테스트가 80% 이상 커버되는가? |

| **2. 작은 단위로 변경** | 한 번에 하나의 작은 리팩터링 작업 수행 | ✅ 커밋당 변경 파일 수 ≤ 5개 |

| **3. 리팩터링 규칙 적용** | SOLID, DRY 등 기본 원칙을 상황에 맞게 적용 | ✅ 규칙 위반 코드가 남아 있지 않은가? |

| **4. 리팩터링 후 리그레션 테스트** | 기존 테스트를 재실행해 회귀 여부 확인 | ✅ 모든 테스트가 PASS 하는가? |

| **5. 코드 리뷰** | 팀원에게 변경 사항을 공유하고 피드백 수집 | ✅ 리뷰어가 이해하고 승인했는가? |

이 과정을 반복하면 **‘안전한 리팩터링 문화’를 팀 전체에 정착**시킬 수 있습니다.

---

# # 4️⃣ 실제 사례 – 리팩터링이 오히려 프로젝트를 위험에 빠뜨린 경우

> **프로젝트 A** : 초기 MVP 단계에서 모든 서비스 로직을 **싱글톤** 클래스로 구현

> **문제** : 기능 추가 시 의존성이 얽히고, 테스트 작성이 불가능해짐

> **잘못된 리팩터링** : Uncle Bob 스타일로 모든 클래스를 인터페이스화하고, 복잡한 팩토리 패턴 도입

> **결과** : 코드 라인 수 2배 증가, 배포 지연 3주

**교훈** : 리팩터링은 **‘문제 해결을 위한 도구’**이며, **‘문제 자체를 만들지 않도록’** 해야 합니다. 책에서는 이런 상황을 방지하기 위해 **‘리팩터링 전후의 목표와 기대 효과’를 문서화**할 것을 권장합니다.

---

# # 결론 – 오늘 당장 적용해볼 수 있는 액션 플랜

1. **테스트 먼저 작성** – 현재 작업 중인 모듈에 최소 1개의 단위 테스트를 추가하세요.

2. **작은 리팩터링** – 변수명, 함수 이름을 직관적으로 바꾸는 것부터 시작해 보세요.

3. **‘기술 부채 태그’ 관리** – `#tech_debt` 라벨을 활용해 부채 항목을 기록하고, 스프린트 회의에서 공유합니다.

4. **팀 리뷰 문화 만들기** – 매 리팩터링 후 5분 정도의 코드 리뷰 시간을 확보하세요.

리팩터링은 **‘코드를 더 깨끗하게’** 만드는 여정이지만, **‘잘못된 방향으로 가면 오히려 복잡해진다’**는 점을 기억하세요. *“Don’t Refactor Like Uncle Bob (Second Edition)”*에서 배운 교훈을 바탕으로 **안전하고 효율적인 리팩터링**을 실천한다면, 여러분의 프로젝트는 더욱 견고해질 것입니다.

> **지금 바로** 위 액션 플랜을 적용해 보고, 변화된 코드를 직접 체험해 보세요! 댓글로 여러분의 리팩터링 경험을 공유하면, 함께 성장하는 커뮤니티를 만들 수 있습니다. 🚀
