책 이미지
책 정보
· 분류 : 국내도서 > 컴퓨터/모바일 > 프로그래밍 언어 > 자바
· ISBN : 9788979145113
· 쪽수 : 464쪽
목차
00장 리팩토링이란
리팩토링이란
_리팩토링의 정의
_리팩토링 퀴즈
_리팩토링과 유닛테스트(unit test)
_리팩토링의 목적
_리팩토링의 한계
리팩토링과 코드의 악취
_코드의 악취란
_코드의 악취를 나타내는 표현
_리팩토링 카탈로그
_리팩토링 카탈로그란
_조직적 수정
리팩토링의 에센스
_Step by Step: 한 번에 2개씩 수정하지 않는다
_Step by Step: 후에 돌아오기 쉽게
_Step by Step: 단계마다 확인
_step by step: 오래된 것을 새로운 것으로 바꿔가자
리팩토링 Q&A
_리팩토링은 만병통치약인가
_리팩토링을 배우는 것은 가치가 있는가
_움직이는 코드에 손을 대는 것은 좋은 것인가
_어디까지가 '외부'인가
_초기 설계를 제대로 해두는 것이 유효하지 않을까
_적절한 리팩토링을 발견하는 것은
_모두 기억할 필요가 있는가
_익스트림 프로그래밍과 관계가 있는가
_디자인 패턴과 관계가 있는가
_지금의 현장 업무에서 리팩토링은 어렵다?
연습문제
1장. 매직넘버를 심볼릭 정수로 치환하기: 소스에 '100'이라고 쓰여져 있다면
리팩토링
_매직넘버는 심볼릭 정수로 치환하기
샘플 프로그램
_리팩토링전
_리팩토링 실행
_리팩토링후
생각 넓히기
_타입코드를 클래스로 치환하기
_enum
_심볼릭 정수로 하지 말아야 하는 경우
_바이트코드에 쓰여있는 정수에 주의
연습문제
2장. 제어 플래그의 삭제: 제어 플래그 때문에 코드를 읽기 힘들다면
리팩토링
_제어 플래그의 삭제
샘플 프로그램(FindInt)
_리팩토링전
_리팩토링실행(break를 사용하는 경우)
_리팩토링 실행(return을 사용하는 경우)
샘플 프로그램(SimpleDatabase)
_리팩토링전
_리팩토링 실행
생각 넓히기
_break나 return으로 인해 가독성이 높아지는 이유
_인스턴스 필드로 된 제어 플래그의 위험성
_플래그의 이름
_boolean 이외의 플래그
_정규표현 패키지를 사용해 보면
연습문제
3장.assertion의 도입: '이것이 성립될 것'이라고 하는 주석이 있으면
리팩토링
_assertion의 도입
샘플 프로그램
_리팩토링전
_리팩토링 실행
_리팩토링후
_컴파일과 실행
_assertion의 동작 확인하기
생각 넓히기
_Java의 assertion 기법
_Java의 assertion은 클래스 라이브러리가 아니다
_assertion의 완전 삭제
_그외의 언어 환경에서의 assertion
연습문제
4장. NULL 오브젝트 도입: Null 체크가 너무 많다면
리팩토링
_Null 오브젝트의 도입
샘플 프로그램
_리팩토링전
_리팩토링 실행
리팩토링후
생각 넓히기
_Factory Method 패턴
_Singleton 패턴
_Null 오브젝트로 네스트한 클래스를 사용
_Null 체크는 모두 나쁘다?
_패턴광이 되지 않게
_정수로서의 Null 오브젝트
_isNull 메소드는 필요한 것인가
_원래 클래스를 수정할 수 없을 때는 어떻게 할까
연습문제
5장. 메소드의 추출: 코드가 너무 길어 읽기 힘들다면
리팩토링
_메소드의 추출
샘플 프로그램
_리팩토링전
_리팩토링 실행
_리팩토링후
생각 넓히기
_역 리팩토링
_메소드의 추출은 당연하다?
_메소드는 길어져 가는 것
연습문제
6장. 클래스의 추출: 클래스의 책임이 너무 많다면
리팩토링
_클래스의 추출
샘플 프로그램
_리팩토링전
_리팩토링 실행
_리팩토링후
생각 넓히기
_쌍방향 링크는 피한다
_기능추가와 리팩토링
_Immutable Interface
_역 리팩토링 클래스의 인라인화
연습문제
7장. 타입코드를 클래스로 치환하기: 오브젝트 식별에 int가 사용되고 있다면
리팩토링
_타입코드를 클래스로 치환하기
샘플 프로그램
_리팩토링전
_기본형을 사용하는 타입코드의 문제점
_리팩토링 실행
_리팩토링후
생각 넓히기
_기본형을 사용한 타입코드의 문제점
_enum
연습문제
8장. 타입코드를 서브클래스로 치환하기: 타입코드마다 동작이 다르다면(1)
리팩토링
_타입코드를 서브클래스로 치환
_구조와 동작
샘플 프로그램
_리팩토링전
_리팩토링 실행
_리팩토링 후
생각 넓히기
_switch문과 instanceof 연산자는 코드의 악취가 난다
_오브젝트만 생성하는 switch문은 삭제
_Factory Method를 여러 개 준비한다
_어디까지 리팩토링해야 하는가
연습문제
9장. 타입코드를 State/Strategy로 치환하기: 타입코드마다 동작이 다르다면(2)
리팩토링
_타입코드를 State/Strategy로 치환하기
샘플 프로그램
_리팩토링전
_리팩토링 실행
_리팩토링후
코드의 추가 수정
_enum 사용하기
_상태의존 코드를 상태 오브젝트로 이동하기
_정리하기
생각 넓히기
_타입코드를 치환한 3개의 방법 비교
_'State 패턴'과 'Strategy 패턴'의 차이점
_다형적인 해결과 default의 소실
연습문제
10장. 오류 코드를 예외로 치환하기: 오류 처리가 어지럽게 흩어져 있다면
리팩토링
_오류 코드를 예외로 치환하기
샘플 프로그램
_리팩토링전
_리팩토링 실행
_리팩토링후
코드의 추가 수정
_타입코드를 State/Strategy로 치환하기
생각 넓히기
_체크되는 예외와 체크되지 않는 예외
_예외의 계층
_java.io.EOFException을 둘러싼
_체크되지 않는 예외와 사전 체크용 메소드
_오류 아토믹성
연습문제
11장. 생성자를 Factory Method로 치환하기: 클래스명이 new로 하드코딩 되어 있다면
리팩토링
_생성자를 Factory Method로 치환하기
샘플 프로그램
_리팩토링전
_리팩토링 실행
_리팩토링후
_타입코드를 서브클래스로 치환하는 리팩토링의 실행
_리팩토링후
생각 넓히기
_프로바이더(provider)
_인수의 문제
_Factory Method와 Creation Method
연습문제
12장. 관찰되는 데이터의 복제: 모델과 뷰가 혼재되어 있다면
리팩토링
_관찰되는 데이터의 복제
샘플 프로그램
_리팩토링전
_리팩토링 실행
_리팩토링후
생각 넓히기
_이벤트에 포함된 정보
_무엇을 이벤트 리스너로 할까
_무한 루프에 주의
_별도의 이벤트 리스너 추가
연습문제
13장. 상속을 위임으로 치환하기: IS-A 관계가 아님에도 불구하고 상속하고 있다면
상속과 위임
_상속
_위임
_상속과 위임의 비교
리팩토링
_상속을 위임으로 치환하기
샘플 프로그램
_리팩토링전
_의문
_리팩토링 실행
_리팩토링후
_Chain Constructors
생각 넓히기
_상속은 최후의 무기
_리스코프의 치환원칙
_IS-A 관계와 HAS-A 관계
연습문제
14장. 위임의 은폐: 위임 클래스까지 보인다면
리팩토링
_위임의 은폐
샘플 프로그램
_리팩토링전
_첫 번째 리팩토링의 실행
_첫 번째 리팩토링후
_두 번째 리팩토링 실행
_두 번째 리팩토링후
생각 넓히기
_숨기는 것의 중요성
_다양한 은폐
중개자의 삭제
_클래스의 인라인화
연습문제
15장. 상속의 분할: 상속이 얽혀 있다면
리팩토링
_상속의 분할
샘플 프로그램
_리팩토링전
_의문점
_리팩토링 실행
_리팩토링후
생각 넓히기
_직교성
_상속과 @Override
연습문제
부록 A 리팩토링 목록
부록 B JUnit
부록 C 참고문서와 웹사이트
연습문제 해답
찾아보기