[typescript] 제네릭 인터페이스를 활용하여 유사한 동작의 다양한 알고리즘 구현하기

제네릭 인터페이스는 TypeScript에서 매우 강력하게 활용할 수 있는 개념입니다. 제네릭을 사용하면 코드의 재사용성을 높이고 타입 안정성을 유지할 수 있습니다. 이번 포스트에서는 제네릭 인터페이스를 활용하여 유사한 동작을 하는 다양한 알고리즘을 구현하는 방법에 대해 알아보겠습니다.

제네릭 인터페이스란?

제네릭 인터페이스는 특정 타입을 동적으로 처리할 수 있도록 하는 TypeScript의 기능입니다. 제네릭을 사용하면 다양한 타입에 대해 유연하게 동작하는 함수, 클래스, 인터페이스를 정의할 수 있습니다.

유사한 동작의 알고리즘 구현하기

예를 들어, 배열을 다루는 여러 가지 알고리즘이 있을 수 있습니다. 예를 들어 버블 정렬(bubble sort), 선택 정렬(selection sort), 삽입 정렬(insertion sort) 등이 있습니다. 이런 경우 각 알고리즘의 구현은 상당 부분 비슷할 수 있습니다.

제네릭 인터페이스를 사용하여 이러한 유사한 동작을 하는 알고리즘들을 효과적으로 구현할 수 있습니다. 다음은 배열을 인자로 받아 정렬을 수행하는 제네릭 인터페이스의 예시입니다.

interface SortAlgorithm<T> {
  sort(arr: T[]): T[];
}

class BubbleSort<T> implements SortAlgorithm<T> {
  sort(arr: T[]): T[] {
    // 버블 정렬 알고리즘 구현
    return arr;
  }
}

class SelectionSort<T> implements SortAlgorithm<T> {
  sort(arr: T[]): T[] {
    // 선택 정렬 알고리즘 구현
    return arr;
  }
}

class InsertionSort<T> implements SortAlgorithm<T> {
  sort(arr: T[]): T[] {
    // 삽입 정렬 알고리즘 구현
    return arr;
  }
}

const numberSorter = new BubbleSort<number>();
const sortedNumbers = numberSorter.sort([3, 1, 2]);
console.log(sortedNumbers); // 출력: [1, 2, 3]

const stringSorter = new SelectionSort<string>();
const sortedStrings = stringSorter.sort(['c', 'a', 'b']);
console.log(sortedStrings); // 출력: ['a', 'b', 'c']

위의 예시에서 SortAlgorithm 인터페이스는 제네릭으로 타입 T를 받아들이며, 여러 알고리즘에서 해당 인터페이스를 구현하여 다양한 타입의 배열을 정렬할 수 있습니다.

마치며

제네릭 인터페이스를 활용하여 유사한 동작의 다양한 알고리즘을 구현하면 코드의 재사용성이 높아지고 유지보수가 용이해집니다. 특히, 배열이나 리스트와 같은 다양한 데이터 구조를 다루는 알고리즘을 개발할 때 매우 유용하게 활용할 수 있습니다. TypeScript에서는 이러한 유연성과 안정성을 제네릭 인터페이스를 통해 구현하여 코드의 퀄리티를 높일 수 있습니다.