[Chapter 1: 코드의 첫인상 개선하기]
· 학습 목표:
  코드의 가독성을 해치는 요소를 식별하고 개선하는 방법을 배웁니다.
· 주요 내용:
  1. 이해하기 힘든 이름: 함수 선언 변경, 변수 이름 바꾸기, 필드 이름 바꾸기
  2. 중복 코드: 함수 추출하기, 코드 정리하기, 메소드 올리기
  3. 긴 함수: 매개변수 객체 만들기, 객체 통째로 넘기기, 함수를 명령으로 바꾸기 등
  4. 긴 매개변수 목록: 플래그 인수 제거, 여러 함수를 클래스로 묶기

[Chapter 2: 데이터 관리 최적화]
· 학습 목표:
  데이터 관리를 개선하여 코드의 안정성과 유지보수성을 높입니다.
· 주요 내용:
  1. 전역 데이터: 전역 변수 접근 제한하기, 캡슐화 적용하기
  2. 가변 데이터: 불변성 적용, 상태 변경 추적하기
  3. 뒤엉킨 변경: 관심사 분리, 모듈화 적용하기
  4. 산탄총 수술: 기능별로 모듈 분리하기, 책임 할당 명확히 하기
  5. 기능 편애: 기능의 적절한 위치 찾기, 응집도 높이기

[Chapter 3: 구조적 문제 해결하기]
· 학습 목표:
  코드 구조의 문제를 해결하고, 유연하고 확장 가능한 설계로 개선합니다.
· 주요 내용:
  1. 데이터 뭉치: 관련 데이터 묶기, 데이터 클래스 사용하기
  2. 기본형 집착: 객체 지향적인 타입 적용하기, 기본형을 객체로 변환하기
  3. 반복되는 switch문: 다형성 적용하기, 상태 패턴 적용하기
  4. 반복문: 반복문을 컬렉션 연산으로 리팩토링하기, 고차 함수 활용하기
  5. 성의없는 요소: 책임이 명확한 클래스와 메서드 정의하기

[Chapter 4: 클래스와 상속 관리]
· 학습 목표:
  클래스와 상속을 적절히 사용하여 코드의 복잡성을 줄이고 명확성을 높입니다.
· 주요 내용:
  1. 추측성 일반화: 실제 사용 사례에 맞게 클래스 계층 정리하기
  2. 임시 필드: 클래스 일관성 강화하기, 선택적 속성 관리하기
  3. 메시지 체인: 데메테르 법칙 적용하기, 중재자 패턴 사용하기
  4. 중재자: 클래스 간의 직접적인 의존성 줄이기, 메시지 중재자 정의하기
  5. 내부자 거래: 모듈 간 정보 은닉 강화, 의존성 관리하기

[Chapter 5: 크기와 상속 포기 문제]
· 학습 목표:
  거대한 클래스를 쪼개고, 적절한 상속 구조를 만들어 코드를 개선합니다.
· 주요 내용:
  1. 거대한 클래스: 클래스 분할하기, 책임 주도 설계 적용하기
  2. 서로 다른 인터페이스의 대안 클래스들: 전략 패턴 적용, 인터페이스 분리 원칙 적용하기
  3. 데이터 클래스: 데이터를 캡슐화하는 행동 중심 클래스 정의하기
  4. 상속 포기: 구성 사용하기, 더 간단한 상속 체인 만들기

[Chapter 6: 주석과 리팩토링의 이해]
· 학습 목표:
  주석의 올바른 사용법을 이해하고, 코드 자체의 명확성을 높여 주석에 의존하지 않는 방법을 배웁니다.
· 주요 내용:
  1. 주석: 주석의 필요성과 적절한 사용 사례 학습하기
  2. 리팩토링 카탈로그: 리팩토링 기법의 종류와 적용 방법 탐색하기