[typescript] 제네릭 인터페이스를 활용하여 알고리즘 구현 방법

제네릭은 TypeScript에서 재사용 가능한 컴포넌트를 만들 때 유용한 기능 중 하나입니다. 제네릭을 사용하면 다양한 유형의 데이터를 다루는 함수, 클래스, 인터페이스를 작성할 수 있습니다. 이번 글에서는 제네릭 인터페이스를 사용하여 알고리즘을 구현하는 방법에 대해 알아보겠습니다.

제네릭 인터페이스란 무엇인가요?

제네릭 인터페이스는 인터페이스 내에서 타입 매개변수를 사용하여 여러 유형의 데이터를 처리할 수 있게 해줍니다. 예를 들어, 데이터 구조를 정의할 때 해당 데이터의 유형을 명시하지 않고, 추후 사용 시에 유형을 지정할 수 있습니다.

interface Box<T> {
  value: T;
}

위 예시에서 Box 인터페이스는 value라는 속성을 갖고 있으며, 이 속성의 유형은 T로 지정되어 있습니다. 이 때 T는 제네릭으로 선언되었으므로, 나중에 Box 인터페이스를 사용할 때 여러 가지 유형의 데이터에 대해 지정할 수 있습니다.

제네릭 인터페이스를 활용한 알고리즘 구현

제네릭 인터페이스를 활용하여 구현된 알고리즘 예시를 살펴보겠습니다. 여기서는 제네릭 스택(Stack)을 구현하는 방법에 대해 알아볼 것입니다.

interface Stack<T> {
  push(item: T): void;
  pop(): T | undefined;
}

class DataStack<T> implements Stack<T> {
  private data: T[] = [];

  push(item: T) {
    this.data.push(item);
  }

  pop(): T | undefined {
    return this.data.pop();
  }
}

const numberStack: Stack<number> = new DataStack<number>();
numberStack.push(1);
numberStack.push(2);
console.log(numberStack.pop()); // 2
console.log(numberStack.pop()); // 1

위 예시에서는 Stack 인터페이스를 구현하는 DataStack 클래스를 정의하였습니다. DataStack 클래스는 제네릭을 이용하여 여러 가지 유형의 데이터를 다룰 수 있도록 구현되었습니다.

마치며

제네릭 인터페이스를 활용하면 여러 유형의 데이터에 대해 동일한 로직을 적용하는 다재다능한 알고리즘을 구현할 수 있습니다. 이를 통해 코드의 재사용성을 높이고, 타입 안정성을 유지할 수 있습니다. 앞으로 타입스크립트로 여러 가지 유형의 데이터를 다룰 때, 제네릭 인터페이스를 적극적으로 활용해보세요.

참고문헌: