[swift] Template Method 디자인 패턴
Template Method는 행위 디자인 패턴 중 하나로, 특정 알고리즘의 뼈대를 정의하고, 일부 단계를 서브 클래스로 분리하여 서브 클래스에서 알고리즘의 구현을 변경할 수 있도록 하는 패턴입니다.
패턴 구현
Template Method 패턴은 보통 다음과 같은 구조를 가집니다.
protocol AbstractClass {
func primitiveOperation1()
func primitiveOperation2()
func templateMethod()
}
extension AbstractClass {
func templateMethod() {
primitiveOperation1()
primitiveOperation2()
}
}
class ConcreteClassA: AbstractClass {
func primitiveOperation1() {
print("ConcreteClassA: primitiveOperation1")
}
func primitiveOperation2() {
print("ConcreteClassA: primitiveOperation2")
}
}
class ConcreteClassB: AbstractClass {
func primitiveOperation1() {
print("ConcreteClassB: primitiveOperation1")
}
func primitiveOperation2() {
print("ConcreteClassB: primitiveOperation2")
}
}
let concreteA = ConcreteClassA()
concreteA.templateMethod()
let concreteB = ConcreteClassB()
concreteB.templateMethod()
위 예제에서는 AbstractClass
프로토콜이 Template Method를 정의하고, 서브 클래스에서 구현해야 할 primitiveOperation1
과 primitiveOperation2
메서드를 정의하고 있습니다. 그리고 AbstractClass
를 확장하여 구현된 Template Method를 제공하고 있습니다. ConcreteClassA
와 ConcreteClassB
는 AbstractClass
를 구현하여 각자의 서브 클래스에서 알고리즘의 구현을 변경하고 있습니다.
패턴 적용 방법
Template Method 패턴을 사용하여 알고리즘의 뼈대와 구체적인 구현을 분리함으로써, 코드 재사용성을 높일 수 있습니다. 또한, 다양한 서브 클래스에서 알고리즘의 일부를 변경하거나 추가할 수 있도록 하므로, 확장성과 유연성을 제공합니다.
결론
Template Method 디자인 패턴은 특정 알고리즘의 뼈대를 정의하고, 일부 단계의 구현을 서브 클래스로 분리하여 코드의 재사용성과 유연성을 높이는 효과적인 패턴입니다.
참고:
- The Swift Programming Language
- Design Patterns: Elements of Reusable Object-Oriented Software - Gamma et al.