CHAPTER 01 리팩터링: 첫 번째 예시1.1 자, 시작해보자!1.2 예시 프로그램을 본 소감1.3 리팩터링의 첫 단계1.4 statement() 함수 쪼개기1.5 중간 점검: 난무하는 중첩 함수1.6 계산 단계와 포맷팅 단계 분리하기1.7 중간 점검: 두 파일(과 두 단계)로 분리됨1.8 다형성을 활용해 계산 코드 재구성하기1.9 상태 점검: 다형성을 활용하여 데이터 생성하기1.10 마치며CHAPTER 02 리팩터링 원칙2.1 리팩터링 정의2.2 두 개의 모자2.3 리팩터링하는 이유2.4 언제 리팩터링해야 할까?2.5 리팩터링 시 고려할 문제2.6 리팩터링, 아키텍처, 애그니(YAGNI)2.7 리팩터링과 소프트웨어 개발 프로세스2.8 리팩터링과 성능2.9 리팩터링의 유래2.10 리팩터링 자동화2.11 더 알고 싶다면CHAPTER 03 코드에서 나는 악취3.1 기이한 이름3.2 중복 코드3.3 긴 함수3.4 긴 매개변수 목록3.5 전역 데이터3.6 가변 데이터3.7 뒤엉킨 변경3.8 산탄총 수술3.9 기능 편애3.10 데이터 뭉치3.11 기본형 집착3.12 반복되는 switch문3.13 반복문3.14 성의 없는 요소3.15 추측성 일반화3.16 임시 필드3.17 메시지 체인3.18 중개자3.19 내부자 거래3.20 거대한 클래스3.21 서로 다른 인터페이스의 대안 클래스들3.22 데이터 클래스3.23 상속 포기3.24 주석CHAPTER 04 테스트 구축하기4.1 자가 테스트 코드의 가치4.2 테스트할 샘플 코드4.3 첫 번째 테스트4.4 테스트 추가하기4.5 픽스처 수정하기4.6 경계 조건 검사하기4.7 끝나지 않은 여정CHAPTER 05 리팩터링 카탈로그 보는 법5.1 리팩터링 설명 형식5.2 리팩터링 기법 선정 기준CHAPTER 06 기본적인 리팩터링6.1 함수 추출하기6.2 함수 인라인하기6.3 변수 추출하기6.4 변수 인라인하기6.5 함수 선언 바꾸기6.6 변수 캡슐화하기6.7 변수 이름 바꾸기6.8 매개변수 객체 만들기6.9 여러 함수를 클래스로 묶기6.10 여러 함수를 변환 함수로 묶기6.11 단계 쪼개기CHAPTER 07 캡슐화7.1 레코드 캡슐화하기7.2 컬렉션 캡슐화하기7.3 기본형을 객체로 바꾸기7.4 임시 변수를 질의 함수로 바꾸기7.5 클래스 추출하기7.6 클래스 인라인하기7.7 위임 숨기기7.8 중개자 제거하기7.9 알고리즘 교체하기CHAPTER 08 기능 이동8.1 함수 옮기기8.2 필드 옮기기8.3 문장을 함수로 옮기기8.4 문장을 호출한 곳으로 옮기기8.5 인라인 코드를 함수 호출로 바꾸기8.6 문장 슬라이드하기8.7 반복문 쪼개기8.8 반복문을 파이프라인으로 바꾸기8.9 죽은 코드 제거하기CHAPTER 09 데이터 조직화9.1 변수 쪼개기9.2 필드 이름 바꾸기9.3 파생 변수를 질의 함수로 바꾸기9.4 참조를 값으로 바꾸기9.5 값을 참조로 바꾸기9.6 매직 리터럴 바꾸기CHAPTER 10 조건부 로직 간소화10.1 조건문 분해하기10.2 조건식 통합하기10.3 중첩 조건문을 보호 구문으로 바꾸기10.4 조건부 로직을 다형성으로 바꾸기10.5 특이 케이스 추가하기10.6 어서션 추가하기10.7 제어 플래그를 탈출문으로 바꾸기CHAPTER 11 API 리팩터링11.1 질의 함수와 변경 함수 분리하기11.2 함수 매개변수화하기11.3 플래그 인수 제거하기11.4 객체 통째로 넘기기11.5 매개변수를 질의 함수로 바꾸기11.6 질의 함수를 매개변수로 바꾸기11.7 세터 제거하기11.8 생성자를 팩터리 함수로 바꾸기11.9 함수를 명령으로 바꾸기11.10 명령을 함수로 바꾸기11.11 수정된 값 반환하기11.12 오류 코드를 예외로 바꾸기11.13 예외를 사전확인으로 바꾸기CHAPTER 12 상속 다루기12.1 메서드 올리기12.2 필드 올리기12.3 생성자 본문 올리기12.4 메서드 내리기12.5 필드 내리기12.6 타입 코드를 서브클래스로 바꾸기12.7 서브클래스 제거하기12.8 슈퍼클래스 추출하기12.9 계층 합치기12.10 서브클래스를 위임으로 바꾸기12.11 슈퍼클래스를 위임으로 바꾸기부록 A 리팩터링 목록부록 B 악취 제거 기법
20여 년 만에 다시 돌아온 마틴 파울러의 리팩터링 2판리팩터링 1판은 1999년 출간되었으며, 한국어판은 2002년 한국에 소개되었다. 수많은 독자에게 사랑을 받았으며 리팩터링이란 용어가 프로그래밍 세계에 터를 잡는 계기가 되었다.1판 출간된 후 18년이 흐른 지금 리팩터링은 무엇이 바뀌었을까? 이번 2판은 거의 모든 페이지가 새로 쓰였지만, 리팩터링의 핵심은 변하지 않았고, 주요 리팩터링 기법들도 여전히 유효하다. 2판이 리팩터링을 효과적으로 수행하는 법을 더 많은 사람이 익힐 수 있는 촉매가 되어줄 것이다.리팩터링이란?리팩터링은 겉으로 드러나는 코드의 기능은 바꾸지 않으면서 내부 구조를 개선하는 방식으로 소프트웨어 시스템을 수정하는 과정이다. 요컨대, 리팩터링한다는 것은 코드를 작성하고 난 뒤에 설계를 개선하는 일이다.다루는 내용이 책은 전문 프로그래머를 대상으로 쓴 리팩터링 지침서다. 절제되고 효율적인 방식으로 리팩터링하는 법을 알려주는 것이 목표다. 코드에 버그가 생기지 않게 하면서 구조를 더 체계적으로 바꾸는 방법을 설명한다.누가 읽어야 하나이 책은 소프트웨어 개발을 직업으로 하는 전문 프로그래머를 위해 쓰였다. 예시와 본문에는 읽고 이해해야 할 코드가 꽤 많다. 예시 코드는 모두 자바스크립트로 작성했지만, 대부분의 언어에 적용할 수 있을 것이다. 이 책의 내용을 쫓아오려면 프로그래밍 경험이 어느 정도 있으면 좋지만 고수가 아니라도 읽을 수 있다.코딩 스타일이 바뀐다객체지향 언어의 문법을 익혔다고 저절로 객체지향 프로그래밍을 할 수 있는 게 아니다. 리팩터링 카탈로그를 통해 어떤 코드를 고쳐야 하는지, 왜 고쳐야 하는지, 고친 코드가 왜 좋은지 이해할 수 있다. 이런 과정을 통해 객체지향에 어울리는 코드 디자인을 배우게 되고, 자신의 코딩 스타일도 바뀌게 된다. 이 책을 읽기 전과 후는 코드의 품질에 결정적인 차이가 생길 것이다.주요 내용ㆍ 리팩터링 프로세스와 일반 원칙 이해하기ㆍ 프로그램을 더 쉽게 이해하고 변경하는 유용한 리팩터링 빠르게 적용하기ㆍ 리팩터링 가능성이 있는 코드에서 풍기는 악취 인식하기ㆍ 각 리팩터링 기법의 개념, 동기부여, 역학 및 간단한 사례 살펴보기ㆍ 리팩터링을 수행하는 견고한 테스트 구축하기ㆍ 리팩터링의 장단점과 장애물 인식하기