책 이미지

책 정보
· 분류 : 국내도서 > 컴퓨터/모바일 > 프로그래밍 개발/방법론 > 객체지향 프로그래밍/UML
· ISBN : 9788994506067
· 쪽수 : 508쪽
· 출판일 : 2011-09-30
책 소개
목차
CHAPTER 1 리팩토링 첫 예제
원래의 프로그램
리팩토링 첫 단계
statement 메서드 분해와 기능 재분배
가격 책정 부분의 조건문을 재정의로 전환
고찰
CHAPTER 2 리팩토링 원리
리팩토링의 유래
리팩토링의 정의
리팩토링은 왜 해야 하나?
리팩토링은 어떨 때 필요한가?
리팩토링의 효용성
관리자에게 어떻게 말을 꺼내나?
인다이렉션과 리팩토링
리팩토링 관련 문제들
리팩토링과 설계
빈 날짜 인스턴스 생성으로 인한 시간 낭비
리팩토링과 성능
급여 시스템 최적화
CHAPTER 3 코드의 구린 부분
중복 코드(Duplicated Code)
장황한 메서드(Long Method)
방대한 클래스(Large Class)
과다한 매개변수(Long Parameter List)
수정의 산발(Divergent Change)
기능의 산재(Shotgun Surgery)
잘못된 소속(Feature Envy)
데이터 뭉치(Data Clumps)
강박적 기본 타입 사용(Primitive Obsession)
Case문(Case Statements)
평행 상속 계층(Parallel Inheritance Hierarchies)
직무유기 클래스(Lazy Class)
막연한 범용 코드(Speculative Generality)
임시 필드(Temporary Field)
메시지 체인(Message Chains)
과잉 중개자(Middle Man)
지나친 관여(Inappropriate Intimacy)
인터페이스가 다른 대용 클래스(Alternative Classes with Different Interfaces)
미흡한 라이브러리 클래스(Incomplete Library Class)
데이터 클래스(Data Class)
방치된 유품(Refused Bequest)
불필요한 주석(Comments)
메타프로그래밍 과용(Metaprogramming Madness)
API 비일관성(Disjointed API)
상투적 코드 반복(Repetitive Boilerplate)
CHAPTER 4 테스트 작성
자가 테스트 코드의 가치
Test::Unit 테스트 프레임워크
개발자 테스트와 품질보증 테스트
테스트 추가
CHAPTER 5 리팩토링 열거에 대하여
리팩토링 설명 구성
참조 검색
CHAPTER 6 메서드 정리
메서드 추출(Extract Method)
메서드 내용 직접 삽입(Inline Method)
임시변수 내용 직접 삽입(Inline Temp)
임시변수를 메서드 호출로 전환(Replace Temp with Query)
임시변수를 메서드 체인으로 전환(Replace Temp with Chain)
직관적 임시변수 사용(Introduce Explaining Variable)
임시변수 분리(Split Temporary Variable)
매개변수로의 값 대입 제거(Remove Assignments to Parameters)
메서드를 메서드 객체로 전환(Replace Method with Method Object)
알고리즘 전환(Substitute Algorithm)
루프를 컬렉션 클로저 메서드로 전환(Replace Loop with Collection Closure Method)
주변 메서드 추출(Extract Surrounding Method)
클래스 애너테이션 넣기(Introduce Class Annotation)
매개변수 세트를 해시로 전환(Introduce Named Parameter)
해시를 매개변수 세트로 전환(Remove Named Parameter)
비사용 기본 값 매개변수 제거(Remove Unused Default Parameter)
동적 메서드 정의(Dynamic Method Definition)
수신 메서드를 동적 메서드 정의로 전환(Replace Dynamic Receptor with Dynamic Method Definition)
동적 수신 메서드 분리(Isolate Dynamic Receptor)
eval을 런타임에서 파싱타임으로 전환(Move Eval from Runtime to Parse Time)
CHAPTER 7 객체 간의 기능 이동
메서드 이동(Move Method)
필드 이동(Move Field)
클래스 추출(Extract Class)
클래스 내용 직접 삽입(Inline Class)
대리 객체 은폐(Hide Delegate)
과잉 중개자 제거(Remove Middle Man)
CHAPTER 8 데이터 체계화
필드 자체 캡슐화(Self Encapsulate Field)
데이터 값을 객체로 전환(Replace Data Value with Object)
값을 참조로 전환(Change Value to Reference)
참조를 값으로 전환(Change Reference to Value)
배열을 객체로 전환(Replace Array with Object)
해시를 객체로 전환(Replace Hash with Object)
클래스의 단방향 연결을 양방향으로 전환(Change Unidirectional Association to Bidirectional)
클래스의 양방향 연결을 단방향으로 전환(Change Bidirectional Association to Unidirectional) 마법 숫자를 기호 상수로 전환(Replace Magic Number with Symbolic Constant)
컬렉션 캡슐화(Encapsulate Collection)
레코드를 데이터 클래스로 전환(Replace Record with Data Class)
타입 코드를 재정의로 전환(Replace Type Code with Polymorphism)
타입 코드를 모듈 확장으로 전환(Replace Type Code with Module Extension)
타입 코드를 상태/전략 패턴으로 전환(Replace Type Code with State/Strategy)
하위클래스를 필드로 전환(Replace Subclass with Fields)
속성 초기화를 사용 시로 미루기(Lazily Initialized Attribute)
속성 초기화를 생성 시로 당기기(Eagerly Initialized Attribute)
CHAPTER 9 조건문 간결화
조건문 쪼개기(Decompose Conditional)
조건문 개조(Recompose Conditional)
중복 조건식 통합(Consolidate Conditional Expression)
조건문의 공통 실행 코드 빼내기(Consolidate Duplicate Conditional Fragments)
제어 플래그 제거(Remove Control Flag)
여러 겹의 조건문을 감시 절로 전환(Replace Nested Conditional with Guard Clauses)
조건문을 재정의로 전환(Replace Conditional with Polymorphism)
Null 검사를 널 객체에 위임(Introduce Null Object)
어설션 넣기(Introduce Assertion)
CHAPTER 10 메서드 호출 단순화
메서드명 변경(Rename Method)
매개변수 추가(Add Parameter)
매개변수 제거(Remove Parameter)
상태 변경 메서드와 값 반환 메서드를 분리(Separate Query from Modifier)
유사 메서드를 매개변수로 전환(Parameterize Method)
매개변수를 개별 메서드로 전환(Replace Parameter with Explicit Methods)
객체를 통째로 전달(Preserve Whole Object)
매개변수를 메서드로 추출(Replace Parameter with Method)
매개변수 세트를 객체로 전환(Introduce Parameter Object)
쓰기 메서드 제거(Remove Setting Method)
메서드 은폐(Hide Method)
생성자를 팩토리 메서드로 전환(Replace Constructor with Factory Method)
에러 코드를 예외로 교체(Replace Error Code with Exception)
예외를 테스트로 교체(Replace Exception with Test)
게이트웨이 넣기(Introduce Gateway)
익스프레션 빌더 넣기(Introduce Expression Builder)
CHAPTER 11 일반화 처리
메서드 상향(Pull Up Method)
메서드 하향(Push Down Method)
모듈 추출(Extract Module)
모듈 내용 직접 삽입(Inline Module)
하위클래스 추출(Extract Subclass)
상속 구조로 전환(Introduce Inheritance)
계층 병합(Collapse Hierarchy)
템플릿 메서드 형성(Form Template Method)
상속을 위임으로 전환(Replace Inheritance with Delegation)
위임을 계층구조로 전환(Replace Delegation with Hierarchy)
추상 상위클래스를 모듈로 전환(Replace Abstract Superclass with Module)
CHAPTER 12 대규모 리팩토링
알아야 할 특성
대규모 리팩토링의 중요성
대규모 리팩토링 4개
상속 구조 정리(Tease Apart Inheritance)
절차 코드를 객체로 전환(Convert Procedural Design to Objects)
도메인 로직을 표현과 분리(Separate Domain from Presentation)
계층구조 추출(Extract Hierarchy)
CHAPTER 13 퍼즐 조립
참고 문헌
리팩토링 기법 찾아보기
미심쩍은 상황별 기법