[swift] 클래스의 템플릿 메서드(Template Method) 패턴

템플릿 메서드 패턴은 객체지향 디자인 패턴 중 하나로, 객체의 행위를 한 부분은 여러 단계로 나누어 처리할 수 있도록 하는 패턴입니다. 이 패턴을 통해 특정 작업의 알고리즘 골격을 정의하고, 알고리즘의 여러 단계를 서브클래스에서 구현함으로써 알고리즘의 내부 구조를 변경하지 않고 알고리즘의 특정 단계를 재정의할 수 있습니다.

이 패턴은 주로 동일한 과정을 거치지만, 각각의 상황에 따라 처리과정이 달라지는 경우에 유용하게 사용됩니다. 이 패턴은 각 단계의 순서는 동일하지만, 구체적인 단계의 구현이 서브클래스에서 변경되어야 할 때 유용합니다.

아래는 템플릿 메서드 패턴을 사용한 예시입니다.

class Recipe {
    func prepare() {
        gatherIngredients()
        prepareIngredients()
        cook()
        serve()
    }

    func gatherIngredients() {
        // Gather all the ingredients
    }

    func prepareIngredients() {
        // Prepare the ingredients
    }

    func cook() {
        // Cook the dish
    }

    func serve() {
        // Serve the dish
    }
}

class PastaRecipe: Recipe {
    override func prepareIngredients() {
        // Prepare the pasta ingredients
    }

    override func cook() {
        // Cook the pasta
    }
}

위 예시에서 Recipe 클래스는 prepare 메서드를 가지고 있으며, 이 메서드 안에서 gatherIngredients, prepareIngredients, cook, serve 순으로 메서드가 호출됩니다. 이 중간에는 추상 메서드로 남겨둔 메서드들이 존재하며, PastaRecipe 클래스에서는 이를 오버라이드하여 구현할 수 있습니다.

템플릿 메서드 패턴은 캡슐화를 유지하면서 코드의 중복을 줄이고, 상속을 통해 확장 가능한 유연한 설계를 가능케 합니다.

템플릿 메서드 패턴은 객체지향 프로그래밍에서 유연하고 확장 가능한 구조를 구현하기 위한 중요한 방법 중 하나입니다.

자세한 내용은 wikipedia를 참고할 수 있습니다.