콘텐츠로 이동

리팩터링 2판 실전 강의 교재 — 12장 인덱스

무엇인가

Martin Fowler 리팩터링 2판(2018)1~12장(예시·원칙·24 악취·테스트·카탈로그 보는 법·6~12장 카탈로그 약 66개 기법) 을 Java/Spring 백엔드 입문~중급 수강생용 강의 교재로 풀어 쓴 자료. 총 약 5,000줄. 각 장마다:

    1. 도입 (학습 목표·큰 그림 ASCII·시그니처 비유·현업에서 왜 중요한가)
  • 본문 (각 절·기법 별 한 줄 정의 → 비유 → Before/After → 동기 → 절차 → 함정 → Spring 현업)
  • 종합 (결정 가이드 표 + 종합 체크리스트 + Q/A 분리 형식 퀴즈)
  • 다음 장 예고

→ 책 카드는 entity-refactoring.

실습 환경과 장별 루틴

먼저 guide-java-book-study-lab의 Java 17 + JUnit 5 환경을 준비한다. 1장 JavaScript 예제는 Node.js로 실행해도 되고, Java로 옮겨도 된다. 리팩터링 강의의 핵심은 작은 변경 뒤 테스트다.

각 기법은 같은 순서로 따라간다.

  1. Before 코드를 그대로 둔 채 자가 테스트를 먼저 만든다.
  2. 기법 이름을 확인한다. 예: 함수 추출, 변수 추출, 단계 쪼개기.
  3. 한 번에 한 단계만 바꾼다.
  4. 매 단계 테스트를 실행한다.
  5. After 코드가 “다음 기능을 넣기 쉬운 구조”인지 확인한다.

12편 인덱스 — 각 장 본문으로 바로 진입

주제 본문
1장 리팩터링: 첫 번째 예시 (statement → 단계별 7번 변환) lecture-refactoring-ch1
2장 리팩터링 원칙 (정의·두 모자·이유·언제·YAGNI·성능) lecture-refactoring-ch2
3장 코드에서 나는 악취 (24개) lecture-refactoring-ch3
4장 테스트 구축하기 (자가 테스트·픽스처·경계 조건) lecture-refactoring-ch4
5장 카탈로그 보는 법 (형식·선정 기준) lecture-refactoring-ch5
6장 기본적인 리팩터링 (11) — 함수 추출 ★ / 변수 추출 ★ / 함수 선언 ★ / 단계 쪼개기 ★ lecture-refactoring-ch6
7장 캡슐화 (9) — 레코드·컬렉션·기본형→객체·클래스 추출·위임 숨기기 lecture-refactoring-ch7
8장 기능 이동 (9) — 함수 옮기기 ★·필드 옮기기·반복문 파이프라인·죽은 코드 lecture-refactoring-ch8
9장 데이터 조직화 (6) — 변수 쪼개기·파생→질의·참조↔값·매직 리터럴 lecture-refactoring-ch9
10장 조건부 로직 간소화 (7) — 보호 구문·조건부 로직→다형성 ★·특이 케이스 lecture-refactoring-ch10
11장 API 리팩터링 (13) — CQS ★·플래그 제거·생성자→팩터리·예외 변환 lecture-refactoring-ch11
12장 상속 다루기 (11) — 메서드/필드 올리고 내리기·서브클래스→위임 ★★ lecture-refactoring-ch12

→ 총 약 66개 리팩터링 + 24 악취, 약 5,000줄. 각 장에는 학습 목표·비유·Before/After 코드·절차·Spring 현업 예제·체크리스트·퀴즈가 포함됩니다.

강의 교재 형식 (일관된 5단)

## N장 — 제목

> 대상: Java/Spring 백엔드 입문~중급
> 형식: 개념 → 비유 → Before/After → 절차 → 함정 → 체크리스트 → 퀴즈
> 전제: Java 17+, Spring Boot 3.x

## 0. 이 장을 시작하기 전에
  0.1 학습 목표
  0.2 큰 그림 (ASCII 그림 + 비유)
  0.3 현업에서 왜 중요한가

## N.M 기법 이름 [★ 표시]
  ### 한 줄 정의
  ### 비유 — "..."
  ### Before / After (코드 쌍)
  ### 동기 (왜·언제)
  ### 절차 (작은 단계)
  ### 함정
  ### Spring 현업
  ### Effective Java / 오브젝트 연결

## N장 종합 정리
  ### 한눈에 보는 결정 가이드 (표)
  ### 종합 체크리스트 (코드 리뷰용)
  ### 종합 퀴즈 (Q/A 분리 — **Q.** 질문 + **A.** 답변)

## 다음 장 예고

시그니처 비유 (일관성)

  • 1장: 리팩터링은 요리하면서 틈틈이 정리하는 주방
  • 2장: 두 모자 = 요리사 모자 vs 청소부 모자
  • 3장: 24 악취는 주방의 신호 (음식이 상한 게 아니라 도구 정리 신호)
  • 4장: 자가 테스트는 공사장 안전 헬멧
  • 5장: 카탈로그 5단은 사전 사용 설명서
  • 6장: 기본 리팩터링은 칼·도마·계량컵
  • 7장: 캡슐화는 포장
  • 8장: 기능 이동은 주방 도구 자리 정리
  • 9장: 데이터 조직화는 주방 라벨 다시 붙이기
  • 10장: 조건문은 도시의 신호등
  • 11장: API는 식당 메뉴판 (한 번 인쇄 → 영원)
  • 12장: 상속은 가문

★ 별 표시한 핵심 리팩터링

Item 이름 왜 핵심
6.1 함수 추출 모든 리팩터링의 기본
6.3 변수 추출 의미 명시의 시작
6.5 함수 선언 바꾸기 이름 정리의 정석
6.11 단계 쪼개기 1장 핵심 변환
8.1 함수 옮기기 기능 편애·산탄총 수술 처방
10.4 조건부 로직 → 다형성 OOP 핵심 직접 적용
11.1 CQS 분리 동시성·테스트·예측의 기반
12.10 서브클래스 → 위임 ★★ 상속 → 합성 전환
12.11 슈퍼클래스 → 위임 취약한 기반 클래스 회피

책 전체 6원칙 (12장 마지막에서 추출)

  1. 자가 테스트가 모든 리팩터링의 전제 (4장)
  2. 24 악취가 트리거 (3장)
  3. 이름·전제·절차가 있는 변경 (5장)
  4. 모든 리팩터링은 쌍 — 양방향 도구 (5장)
  5. CQS·불변 우선 (11·12장)
  6. 상속보다 합성 (12.10·12.11)

→ 90 권고 Effective Java 6원칙, 9 메시지 오브젝트 와 결합하면 OO 설계 큰 그림이 완성.

활용 가이드

목적 추천 진입점
입문~1년차 빠른 진입 1장(예시) → 3장(악취) → 6.1·6.5·8.1
코드 리뷰 어휘 각 장 끝의 "종합 체크리스트"
신입 교육 자료 1장 statement() 변환 + 각 기법 Before/After 발췌
인터뷰 준비 "종합 퀴즈" Q를 먼저 보고 A 가리기
자기 코드 진단 3장 24 악취로 자기 코드베이스 워크스루

위키 기존 페이지와의 연결

한계·주의

  • 사용자 강사용 내부 교재 성격 — 인용·재배포 전 확인 필요
  • Java 17 + Spring Boot 3.x 가정
  • 책 본문 자체는 raw에 미보유 — 교재 본문이 책의 직접 인용은 아님 (강의용 재구성)
  • 22~23 같은 일부 절차는 책 원본보다 단순화될 수 있음 — 실무 적용 시 책 본문 직접 확인 권장

관련 페이지