목차

역자서문 5
서문 13

 

[ 1장 로드맵 ]

개관
1부: 클래스 내부의 냄새
2부: 클래스 사이의 냄새
3부: 프로그램 리팩터링
도전사항에 대해 한 마디

 

1부 클래스 내부의 냄새

 

2장 리팩터링 사이클

리팩터링이란 무엇인가?
냄새는 문제다
리팩터링 사이클
언제 끝내야 할까?
리팩터링 내부
도전사항
결론

 

3장 측정할 수 있는 냄새

다루는 냄새
긴 메서드
거대한 클래스
긴 매개변수 리스트
추가 도전사항
결론

쉬어가기1… 냄새와 리팩터링

 

4장 이름

다루는 냄새
타입이 내장되어 있는 이름(헝가리안 표기법 포함)
의사소통을 방해하는 이름
일관성 없는 이름

 

5장 불필요한 복잡성

다루는 냄새
죽은 코드
추측성 일반화

쉬어가기2… 역관계 리팩터링

 

6장 중복

다루는 냄새
매직 넘버
중복된 코드
다른 인터페이스를 갖는 대체 클래스
도전사항

 

7장 조건 로직

다루는 냄새
Null 체크
복잡한 Boolean 표현식
특별 케이스
가장된 상속(Switch 문)
쉬어가기3 디자인 패턴

 

[ 2부 클래스 사이의 냄새 ]

8장 데이터

다루는 냄새
기본 타입에 대한 강박관념
데이터 클래스
데이터 덩어리
임시 필드

9장 상속

다루는 냄새
거부된 유산
부적절한 친밀(하위 클래스 형태)
게으른 클래스

10장 책임

다루는 냄새
기능에 대한 욕심
부적절한 친밀(일반적인 형태)
메시지 체인
미들 맨
도전 문제

11장 변경 수용하기

다루는 냄새
여러 원인에 의한 변경
산탄총 수술
평행 상속 계층구조
조합적 폭발

12장 라이브러리 클래스

다루는 냄새
불충분한 라이브러리 클래스
도전 문제

쉬어가기4… 리팩터링 생성하기

 

[ 3부 프로그램 리팩터링 ]

13장 데이터베이스 예제

Course.java
Offering.java
Schedule.java
Report.java
TestSchedule.java
TestReport.java

14장 간단한 게임

개발 에피소드

15장 목록

도입
경로 1: Catalog.itemsMatching(query)
경로 2: Query.matchesIn(catalog)
경로 3: Process(catalog.data, query.data)
결론

16장 계획 짜기 게임 시뮬레이터

1부: 초기 코드
Table.java
Background.java
Card.java
2부: 기능 재분배하기
중복, 선택 문제, 몇 가지 거친 조각 제거하기
3부: 코드 좀더 다듬기

17장 향후 과제


권고 사항
시도해 볼 만한 것들
웹 사이트

 

4부 부록

부록A… 연습문제 해답
부록B… 자바 리팩터링 도구들
부록C… 각 리팩터링의 역관계 리팩터링
부록D… 주요 리팩터링 기법

 

참고 자료
찾아보기