⚡ 메서드 올리기
- 부모가 같은 서브 클래스들에, 똑같은 역할을 하는 메서드가 있다면 이 메서드를 부모 클래스로 올리는 작업
- 중복 메서드의 본문 코드가 같은 경우 옮기는 것이 상당히 쉽겠지만, 그렇지 않은 경우가 잦음
- 중복된 메서드 구현속에서 서브클래스에만 있는 필드를 사용 하는 경우, 해당 필드를 부모 클래스로 올리고 메서드를 부모 클래스로 옮긴다.
- 두 메서드의 전체 흐름 ( 해당 메서드의 이용 방식, 용도 등 )이 비슷한데, 구체적인 구현이 다르다면 추상 메서드를 활용하는 것이 좋음
⚡ 필드 올리기
- 부모가 같은 서브 클래스들에, 서브 클래스에서 공통적으로 사용되고 있는 필드가 있다면 이 필드를 부모 클래스로 옮기는 작업
- 필드가 어떻게 이용되는지 분석 해 보고, 비슷한 방식으로 쓰인다면 필드를 올리는 것이 좋음
- 데이터 중복 선언 방지 / 해당 필드를 사용하는 동작을 서브클래스에서 부모 클래스로 옮길 수 있음
- 자바에서는 protected 접근 제한자를 주로 사용
⚡ 생성자 본문 올리기
- 부모가 같은 서브 클래스들의 생성자속에서 똑같은 필드를 받고 있다면, 해당 필드를 부모 클래스에서 받도록 수정하는 작업
- 모든 서브클래스의 생성자 속에서, 같은 필드를 받는 것 뿐 아니라 같은 작업도 수행 하고 있다면 이를 메서드로 추출 하는 것이 좋음
⚡ 메서드 내리기
- 특정 서브클래스와만 관련된 메서드는 부모 클래스에서 제거하고, 서브클래스에 두도록 만드는 작업
- 해당 기능이 꼭 필요한 특정 클래스들을 반드시 정확히 파악 한 뒤에 작업 할 것
⚡ 필드 내리기
- 메서드 내리기와 마찬갖로, 특정 서브클래스와만 관련된 필드를 부모 클래스에서 제거하고, 서브 클래스에 두도록 만드는 작업
- 해당 필드가 꼭 필요한 특정 클래스들을 반드시 정확히 파악 한 뒤에 작업 할 것
⚡ 타입 코드를 서브클래스로 바꾸기