Notice
Recent Posts
Recent Comments
Link
DailyCode
템플릿 메서드 패턴(TemplateMethod Pattern) 본문
정의
탬플릿 메서드 디자인 패턴은 슈퍼클래스에서 로직의 골격을 정의하며, 서브클래스가 구조를 변경하지 않고 특정 기능에 대해 자체 구현을 제공하는 디자인 패턴입니다. 스위프트에서는 상속과 오버라이딩을 통해 이를 구현할 수 있습니다.
사용 이유
탬플릿 메서드 디자인 패턴은 코드를 쉽게 수정할 수 있도록 해주기 때문에, 확장하기 어렵거나 유사한 코드를 작성해야 할 때 유용합니다.
사용
- 확장에는 열려있고 수정에는 닫혀있는(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()
장점
- 코드 중복을 줄이고 유지보수성을 높일 수 있습니다.
- 기존 코드에 영향을 주지 않고 수정할 수 있습니다.
단점
- 상속 구조가 복잡하고 유연성이 감소합니다.
- 오버라이딩한 메서드와 슈퍼클래스의 메서드가 같은 곳에 있으므로, 로직을 호출할 때 슈퍼클래스의 로직이 호출되는 경우가 있습니다.
'디자인 패턴' 카테고리의 다른 글
[SOLID] 리스코프 치환 법칙(LSP) (0) | 2023.03.25 |
---|---|
[SOLID] 개방 폐쇄 원칙(OCP) (0) | 2023.03.24 |
[SOLID] 단일 책임 원칙(SRP) (0) | 2023.03.16 |
스트레티지 패턴(Strategy Pattern) (0) | 2023.03.08 |
커맨드 패턴(Command Pattern) (0) | 2023.03.07 |