우당탕탕

[개발서적] 리팩터링(Refactoring) 핵심 요약 및 정리 – 마틴 파울러, 읽기 쉬운 코드의 재설계 본문

여러내용들/IT서적 요약

[개발서적] 리팩터링(Refactoring) 핵심 요약 및 정리 – 마틴 파울러, 읽기 쉬운 코드의 재설계

모찌모찝 2025. 7. 29. 18:14
리팩터링(Refactoring) - 읽기 쉬운 코드의 재설계

안녕하세요!
오늘은 소프트웨어 엔지니어링 분야의 바이블 중 하나로 꼽히는 『리팩터링(Refactoring)』 - 마틴 파울러 책을 블로그 스타일로 알기 쉽게 요약해보려 합니다.
"코드를 더 좋게, 더 안전하게 고치려면 어떻게 해야 할까?"라는 생각으로 사놨던 책이었는데 이제 정리하게 되네요 ㅎㅎ

리팩터링

1. 리팩터링이란 무엇인가?

“기능은 그대로, 코드 구조만 더 깔끔하게!”
리팩터링은 프로그램의 겉보기 동작을 바꾸지 않고, 코드의 내부 구조만 개선하는 작업을 의미합니다. 직관적이고 유지보수하기 쉬운 코드로 바꾸는 게 핵심입니다.

2. 왜 리팩터링이 필요할까?

• 시간이 지날수록 코드는 점점 복잡해지고 더러워집니다 ( 스파게티 코드화 )
• 시간이 지날수록 버그는 더 쉽게 생기고, 수정은 더 어려워집니다.

이러한 환경에서 리팩터링을 통해 

- 코드 가독성 향상
- 유지보수성 향상
- 버그 발생률 감소
- 협업 효율 증가

와 같은 이점을 가져갈 수 있습니다. 

* 리팩터링의 3가지 원칙

1. 기능은 절대 건들지 않는다 (동작 보장)
2. 작고 안전한 단위로 바꾼다 (점진적 변화)
3. 테스트 없이는 하지 않는다 (기능 검증)

3. 리팩터링 신호 – 코드 냄새 (Code Smell)

“코딩 중 이런 생각이 들면 리팩터링 시점일 수 있다.”

• 중복된 코드가 여기저기 생김
• 함수가 너무 길고 복잡함
• 변수 이름이 추상적이고 이해하기 어려움
• 조건문(if/else)이 너무 많음
• 하나의 클래스가 너무 많은 책임을 가짐

4.  리팩터링 원칙과 주요 패턴

책에서는 수십 가지 리팩터링 기법을 정리하며, 그중 대표적으로 다음을 강조합니다:

• ‘코드 냄새’를 민감하게 파악하라

   → 복잡한 if, 중복 코드, 긴 함수, 불분명한 변수명 등은 모두 리팩터링 신호!

• ‘작고 안전한 단위로 고쳐라’

   
→ 한 번에 큰 변화를 하지 말고, 한 단계씩 테스트하며 변경!

• 자동화된 테스트 구축


   → 리팩터링의 안전장치로, 코드가 여전히 잘 작동하는지 매번 확인

5. 실제로 많이 쓰이는 리팩터링 기법 예시

- 함수 추출(Extract Method):
  → 긴 함수를 목적별로 쪼개 재사용·가독성 UP

// 전
void printOwing() {
    printBanner();
    // ...복잡한 빚 계산 코드
    printDetails();
}
// 후
void printOwing() {
    printBanner();
    calculateOutstanding();
    printDetails();
}


- 임시 변수 제거(Replace Temp with Query):
   복잡한 로직 안의 중간값을 메서드로 대체해 코드 명확화.

- 
 조건문 간소화(Decompose Conditional, Replace Nested Conditional):
    복잡한 if-else문을 함수 분리나 가독성 높은 구조로 변경.

- 매직 넘버 → 의미 있는 상수화(Rename Magic Number to Symbolic Constant):
    코드 곳곳에 하드코딩된 값을 의미 있는 이름의 상수로 치환.

- 클래스 추출/통합(Extract/Inline Class):
    비대해진 클래스 쪼개기, 지나치게 자잘한 클래스 합치기.

6. 리팩터링 프로세스 

1. 리팩터링 “전후”의 동작이 100% 같도록,
테스트 코드 먼저 마련하기 (Test First).
2. 냄새나는 코드(중복, 긴 함수, 불필요한 주석 등) 찾기
3. 한 번에 한 단계씩 리팩터링하며,
실행/테스트 → 성공하면 다음 단계 진행!
4. 의미 있는 커밋 메시지와 변경 이력 남기기(협업 시 필수)
5. 리팩터링을 통해 코드 품질이 승격된 경험을 반복적으로 쌓기

아직까지 저는 코드의 구성이나 리팩터링 방식은 소속되어 있는 집단의 성격에 따라 달라진다고 생각하고 있기에 해당 책에 내용이 완벽하게 정답이다!라고 생각하지는 않습니다. 하지만 대부분 코드를 깔끔하게 관리하고 가독성 있게 관리하는 부분에서는 좋은 서적이라고 생각해 읽는 보는 것을 추천드립니다.

다양한 책 요약 보러가기 

[개발서적] 클린 코드(Clean Code) 핵심 요약 – 읽기 쉬운 코드가 진짜 좋은 코드다

[개발서적] 이펙티브 자바(Effective Java) 핵심 요약 및 정리 - 조슈아 블로크

 

Reference

마운틴 파울러 - https://martinfowler.com/books/refactoring.html

Comments