[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를 정의하고, 서브 클래스에서 구현해야 할 primitiveOperation1primitiveOperation2 메서드를 정의하고 있습니다. 그리고 AbstractClass를 확장하여 구현된 Template Method를 제공하고 있습니다. ConcreteClassAConcreteClassBAbstractClass를 구현하여 각자의 서브 클래스에서 알고리즘의 구현을 변경하고 있습니다.

패턴 적용 방법

Template Method 패턴을 사용하여 알고리즘의 뼈대와 구체적인 구현을 분리함으로써, 코드 재사용성을 높일 수 있습니다. 또한, 다양한 서브 클래스에서 알고리즘의 일부를 변경하거나 추가할 수 있도록 하므로, 확장성과 유연성을 제공합니다.

결론

Template Method 디자인 패턴은 특정 알고리즘의 뼈대를 정의하고, 일부 단계의 구현을 서브 클래스로 분리하여 코드의 재사용성과 유연성을 높이는 효과적인 패턴입니다.

참고: