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 참고문서와 웹사이트 연습문제 해답 찾아보기
자료명 | 등록일 | 다운로드 |
---|---|---|
예제소스 | 2016-04-06 | 다운로드 |