[typescript] 알고리즘의 일부를 서브클래스에게 위임하는 템플릿 메서드 패턴과 타입스크립트의 결합 사례

템플릿 메서드 패턴은 객체지향 소프트웨어 디자인 패턴 중 하나로, 알고리즘의 일부를 서브클래스에게 위임하여 구현하는 패턴이다. 이번 글에서는 타입스크립트에서 템플릿 메서드 패턴을 활용하는 방법에 대해 살펴보겠다.

템플릿 메서드 패턴이란?

템플릿 메서드 패턴은 공통된 알고리즘을 가진 여러 클래스에서 중복을 제거하기 위해 사용된다. 슈퍼 클래스에 알고리즘의 전체 구조를 정의하고, 서브클래스에서 알고리즘의 일부분을 구현할 수 있도록 한다.

타입스크립트에서의 구현

다음은 타입스크립트에서 템플릿 메서드 패턴을 활용한 간단한 예제 코드이다.

abstract class Algorithm {
  abstract step1(): void;
  abstract step2(): void;
  
  templateMethod(): void {
    this.step1();
    this.step2();
  }
}

class ConcreteAlgorithm1 extends Algorithm {
  step1(): void {
    console.log('ConcreteAlgorithm1 - Step 1');
  }

  step2(): void {
    console.log('ConcreteAlgorithm1 - Step 2');
  }
}

class ConcreteAlgorithm2 extends Algorithm {
  step1(): void {
    console.log('ConcreteAlgorithm2 - Step 1');
  }

  step2(): void {
    console.log('ConcreteAlgorithm2 - Step 2');
  }
}

const algorithm1 = new ConcreteAlgorithm1();
algorithm1.templateMethod();

const algorithm2 = new ConcreteAlgorithm2();
algorithm2.templateMethod();

위 코드에서 Algorithm 클래스는 템플릿 메서드를 정의하고, ConcreteAlgorithm1ConcreteAlgorithm2 클래스는 해당 메서드를 구현한다. 이를 통해 각각의 알고리즘에 해당하는 일부분을 서브클래스에서 구현하여 사용할 수 있다.

결론

타입스크립트를 사용하여 템플릿 메서드 패턴을 활용하면, 공통된 알고리즘의 구조를 재사용하면서도 각 알고리즘의 특정 부분을 서브클래스로 분리하여 구현할 수 있다. 이를 통해 코드의 중복을 줄이고 유연성을 확보할 수 있다.

참고 자료

  1. 《Head First Design Patterns》
  2. Refactoring Guru - Template Method