12. 상속 다루기
12.1 메서드 올리기#
- 상속된 클래스에 따로 공통된 메서드가 포착된다면, 상위 클래스 해당 메서드를 올리는 개념
 - 중복 부분을 상위로 올려, 각 중복된 부분에서 업데이트가 누락됨을 방지할 수 잇는 전략
 - 완전 공통되어 있지않다면 공통된 부분과 차이점을 인식하고 공통된 부분만 올릴수 있도록 리팩터링 해야함
- 템플릿 메서드 패턴을 고려할 수 있음
 - 참조 코드 블로그: https://niceman.tistory.com/142
 
 
12.2 필드 올리기#
- 하위 클래스의 중복된 필드를 보고 역할이 같다면, 상위 클래스로 필드를 올리는 개념
 - 두가지 중복을 줄일 수 있음
- 하위 클래스 필드 중복 선언
 - 해당 필드를 사용하는 동작을 부모 클래스에 옮길 수 있음
 
 
12.3 생성자 본문 올리기#
- 생성자는 하는 일에 제약이 있다 (유효성 검사 및 대입)
 - 간단히 리팩터링이 될 것 같지 않으면 생성자를 팩터리 함수 (11.8) 을 고려해볼 수 있다
 
12.4 메서드 내리기#
- 12.1 메서드 올리기와 반대
 - 하위 타입에 있을 때 더 간결성을 갖출 경우 적용
 
12.5 필드 내리기#
- 12.2 필드 올리기와 반대
 - 하위 타입에만 필요한 필드일 경우 적용
 
12.6 타입 코드를 서브클래스로 바꾸기#
- 타입 코드외 그 이상의 기능이 각 타입마다 필요할 때 적용
- 서브클래스로 나누었을 때 이점
- 다형성 제공
 - 특정 타입에만 의미있는 필드나 메서드를 제공
 
 
 - 서브클래스로 나누었을 때 이점
 - 대상 클래스에 직접 적용할지, 타입 필드에만 적용할지도 고려대상
- 업무 유형을 다른 역할로 쓰고싶다면 타입 필드에만 적용, 그렇지 않다면 대상 클래스에 직접 적용
 - 타입 필드로 변경 시, 타입 코드에 기본형 객체로 바꾸기 (7.3) 을 적용
 
 
12.7 서브클래스 제거하기#
- 12.6 과 반대되는 내용
 - 서브 클래스의 가치가 없음이 확인되면 서브클래스를 제거하여 슈퍼클래스로 올리는 방법을 적용
 
12.8 슈퍼클래스 추출하기#
- 어떤 클래스들이 공통된 것들을 가지고 있다면, 이를 슈퍼클래스로 만들어 상속구조를 가져가는 방법
 
12.9 계층 합치기#
- 자식과 부모가 너무 비슷해지면 독립적으로 존재해야할 이유가 없으므로 계층구조를 해제하고 하나로 합친다