상속 계층 구조를 중심으로 동작하는 메소드 처리
서브 클래스가 같은 필드를 가지고 있다면 상위 클래스로 필드 이동
하위 클래스에서 필드의 중복을 제거
중복 메소드가 있는 경우 하위 클래스에서 상위 클래스로의 후속 재배치 용이
서브 클래스에 유사한 작업을 수행하는 메소드가 있다면 메소드를 동일하게 만들어 상위 클래스로 이동
중복 코드 제거
하위 클래스가 상위 클래스 메소드를 재정의 가능
동일한 작업 수행도 가능
서브 클래스에 대부분 동일한 코드를 가진 생성자가 있다면 상위 클래스 생성자를 만들고 서브클래스에서 동일한 생성자로 이동
하위 클래스 생성자에서 상위 클래스 생성자 호출
하나 혹은 소수의 하위 클래스만 사용하는 메소드가 슈퍼 클래스에 있다면 하위 클래스로 이동
필드가 하나 혹은 소수의 하위 클래스에서만 사용된다면 하위 클래스로 필드 이동
클래스 일관성 향상
필드를 독립적으로 개발 가능
특정 경우에만 사용되는 기능을 하위 클래스를 생성하여 사용
빠르고 쉽게 하위 클래스 생성
여러개의 하위 클래스 분리 가능
공통 필드와 메소드가 있는 두개의 클래스가 있다면 공유할 수 있는 상위 클래스를 만들고 공통 부분을 상위 클래스로 이동
여러 클라이언트가 클래스 인터페이스의 동일한 부분을 사용하거나 두 클래스의 인터페이스 일부가 동일하다면 동일한 부분을 자체 인터페이스로 이동
하위 클래스가 상위 클래스와 거의 동일한 클래스 계층 구조로 있다면 두 클래스를 병합
프로그램 복잡성 감소
클래스의 수가 적어진다는 것은 유지/변경해야 하는 항목이 적어짐
코드 탐색이 수월해짐
특정 메소드를 찾기 위해 전체 계층 구조를 탐색할 필요 없음
하위 클래스는 유사한 단계를 동일한 순서로 포함하는 알고리즘을 구현한다면 알고리즘 구조와 동일한 단계를 상위 클래스로 옮기고 다른 단계의 구현은 하위 클래스에 남김
<변경 전>
<변경 후>
템플릿 메소드를 생성하면 슈퍼 클래스의 공유 알고리즘 단계를 병합하고 하위 클래스의 차이점만 남겨둠으로써 코드 중복 제거
개방폐쇄의 원칙 준수
하위 클래스가 상위 클래스 인터페이스의 일부만 사용하거나 상속된 데이터를 사용하지 않는다면 하위 클래스가 상위 클래스를 위임하는 관계로 변경
클래스에는 상위 클래스에서 상속된 불필요한 메소드 미포함
다양한 구현을 가진 다양한 객체를 대리자 필드로 넣을 수 있음
사실상 전략 디자인 패턴을 얻음
단순 위임을 자주 사용한다면 하위 클래스로 상속
📑 참고 자료