템플릿 메서드 패턴은,추상클래스를 만들고 변경되는부분을 제외한 모든걸 다 구현한다음,변경되는 부분들만 추상메서드로 빼두고,추상클래스의 메인메서드(실행메서드)에서 모든 구현과 추상메서드를 부르는 메서드를 만들고,
서브클래스에서 해당 추상메서드만 구현하게 해서,다른 모든 템플릿부분은 재사용하며 변경되는부분만 바꿔가며 쓸수있게 만드는 패턴임
즉 변하는부분을 제외한 나머지전체를 템플릿으로 잡고,변하는부분만 상속받아서 구현하는것
템플릿 메서드 패턴은
알고리즘의 골격을 정의,템플릿메서드패턴을 사용하면 알고리즘의 일부단계를 서브클래스에서 구현할수있으며,알고리즘의 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브클래스에서 재정의할수도 있음
응용으로,추상클래스에서 생성한 텅 빈 구현메서드인 hook를 사용해서,서브클래스에서 해당 메서드를 오버라이드 하냐 안하냐에 따라 해당위치에 알고리즘에 끼어들거나 무시하고 지나갈수있게 할수도있음(추상메서드와 같은느낌으로 사용되지만,무시할수있다는 선택지가 추가되는것)
템플릿메서드 패턴을 사용하면 할리우드원칙(고수준요소가 저수준에 의존하는것)을 방지할수있음
서브클래스는 그냥 알고리즘만 구현하고,그 알고리즘이 언제쓰일지는 슈퍼클래스에서 결정하니까 슈퍼클래스는 서브클래스에 대해 신경쓰지않아도됨
정렬할떄 compareTo만 구현하면 알아서 정렬해주는게 이런예임
굳이 추상클래스를 사용해서 상속으로 구현하지않아도,저수준이 구현하고,고수준은 인터페이스만 가져다쓰면 다 템플릿메서드라고 부를수있음
템플릿메서드와 전략패턴의 차이는
템플릿메서드는 알고리즘의 개요를 정의하는것(껍질을 잡는것,
전략패턴은 알고리즘을 바꿔가며 쓸수있게 하는것
이고,템플릿메서드는 알고리즘이 거의 똑같은데 한두줄만 다를때 유용하고,
전략패턴은 합성을 사용해서 좀 더 유연하다는 장점이 있음
'CS > 디자인패턴' 카테고리의 다른 글
퍼사드(Facade) 패턴 (2) | 2024.07.20 |
---|---|
어댑터(Adapter) 패턴 (0) | 2024.07.20 |
커맨드(command) 패턴 (0) | 2024.07.17 |
싱글톤(singleton) 패턴 (0) | 2024.07.16 |
팩토리(Factory) 패턴 (0) | 2024.07.14 |