디자인 패턴
템플릿 메서드 패턴(TemplateMethod Pattern)
JSKoder
2023. 3. 9. 22:26
정의
탬플릿 메서드 디자인 패턴은 슈퍼클래스에서 로직의 골격을 정의하며, 서브클래스가 구조를 변경하지 않고 특정 기능에 대해 자체 구현을 제공하는 디자인 패턴입니다. 스위프트에서는 상속과 오버라이딩을 통해 이를 구현할 수 있습니다.
사용 이유
탬플릿 메서드 디자인 패턴은 코드를 쉽게 수정할 수 있도록 해주기 때문에, 확장하기 어렵거나 유사한 코드를 작성해야 할 때 유용합니다.
사용
- 확장에는 열려있고 수정에는 닫혀있는(OCP) 상황에서 기존 논리를 수정하지 않고 기능을 확장하고 싶을 때
- 자신만의 프레임워크를 만들고 일부 파라미터를 전달할 때
구성 요소
추상 클래스(부모 클래스)
- 로직의 공통 구조를 정의하는 추상 베이스 클래스를 생성하는 것으로 시작됩니다.
- 추상 클래스는 구현되진 않았지만 선언된 메서드 하나를 반드시 포함해야 합니다.
- 이러한 메서드를 추상 메서드라고 하며, 서브 클래스가 기능을 수행하기 위해 상속받아 구현해야하는 메서드입니다.
구현 클래스(자식 클래스)
- 추상 클래스의 서브 클래스가 생성되어 추상 메서드의 구체적인 구현을 제공합니다.
- 이러한 서브 클래스로 상속받은 추상 메서드는 자유롭게 수정하거나 확장할 수 있습니다.
템플릿 메서드
- 로직 구조를 정의하는 메서드가 포함됩니다.
- 이 템플릿 메서드는 구체적인 서브클래스에 의해 구현되는 추상 메서드에 대한 호출로 구성됩니다.
- 로직을 조정하고 실행하는 방법을 제공합니다.
사용 예시
class BaseViewController {
func execute() {
test1()
test2()
}
func test1() {}
func test2() {}
}
class SubViewController: BaseViewController {
override func test1() {}
override func test2() {}
}
let di = SubViewController()
di.execute()
장점
- 코드 중복을 줄이고 유지보수성을 높일 수 있습니다.
- 기존 코드에 영향을 주지 않고 수정할 수 있습니다.
단점
- 상속 구조가 복잡하고 유연성이 감소합니다.
- 오버라이딩한 메서드와 슈퍼클래스의 메서드가 같은 곳에 있으므로, 로직을 호출할 때 슈퍼클래스의 로직이 호출되는 경우가 있습니다.