Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

DailyCode

템플릿 메서드 패턴(TemplateMethod Pattern) 본문

디자인 패턴

템플릿 메서드 패턴(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()

장점

  • 코드 중복을 줄이고 유지보수성을 높일 수 있습니다.
  • 기존 코드에 영향을 주지 않고 수정할 수 있습니다.

단점

  • 상속 구조가 복잡하고 유연성이 감소합니다.
  • 오버라이딩한 메서드와 슈퍼클래스의 메서드가 같은 곳에 있으므로, 로직을 호출할 때 슈퍼클래스의 로직이 호출되는 경우가 있습니다.