제네릭은 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
클래스는 제네릭을 이용하여 여러 가지 유형의 데이터를 다룰 수 있도록 구현되었습니다.
마치며
제네릭 인터페이스를 활용하면 여러 유형의 데이터에 대해 동일한 로직을 적용하는 다재다능한 알고리즘을 구현할 수 있습니다. 이를 통해 코드의 재사용성을 높이고, 타입 안정성을 유지할 수 있습니다. 앞으로 타입스크립트로 여러 가지 유형의 데이터를 다룰 때, 제네릭 인터페이스를 적극적으로 활용해보세요.
참고문헌: