템플릿 메서드 패턴은 다형성을 사용해 변하는 부분과 변하지 않는 부분을 분리하는 방법이다. 템플릿이라는 틀에 변하지 않는 부분을 몰아두고, 일부 변하는 부분을 별도로 호출하여 해결한다.
구현 방법:
변하지 않는 템플릿 코드를 부모 클래스에 둔다.
변하는 부분은 자식 클래스에 두고 상속과 오버라이딩을 사용해 처리한다.
(⚠️ Java에서 상속하여 오버라이딩 돼있을 시 항상 오버라이딩 된 쪽 호출)
장점:
변하지 않는 부분이 바뀌었을 시 한 번만 고치면 된다(SRP단일 책임 원칙)
템플릿 메서드 패턴의 한계:
(자식)클래스를 계속 만들어야 한다. 익명 내부 클래스를 사용해 보완 가능.
상속에서 기인하는 단점들을 그대로 가져간다.
의존관계 문제. 자식 클래스가 부모 클래스와 컴파일 시점에 강하게 결합된다. extends로 코드 상에 부모 클래스가 지정돼 있고 부모 클래스의 코드가 자식 클래스의 코드에 명확히 적히게 된다.
자식 클래스 입장에서는 부모 클래스의 기능을 전혀 사용하지 않아도 부모 클래스를 알도록 강제된다.
강한 의존관계로 인해 부모 클래스를 수정하면 자식 클래스에도 영향을 줄 수 있다.
상속 구조로 인해 별도의 클래스나 익명 내부 클래스를 만들어야 하는 등 과정이 복잡하다.
이런 단점을 개선하면서 비슷한 역할을 할 수 있는 대체제로 전략 패턴(strategy pattern)이 있다.