[typescript] 제네릭 인터페이스를 사용하여 컬렉션 클래스 구현하기

제네릭(generic)은 TypeScript에서 타입 안전성을 유지하기 위해 매우 유용한 기능입니다. 이 기능을 활용하여 컬렉션 클래스를 구현하는 방법에 대해 알아보겠습니다.

제네릭 인터페이스란?

제네릭 인터페이스는 여러 종류의 타입을 다룰 수 있는 인터페이스를 정의하는데 사용됩니다. 타입을 유연하게 다룰 수 있어 코드의 재사용성과 유지보수성을 높일 수 있습니다.

아래는 제네릭 인터페이스를 사용하여 간단한 컬렉션 클래스를 정의하는 예제입니다.

interface Collection<T> {
  add(item: T): void;
  remove(item: T): void;
  getItems(): T[];
}

위 코드에서 Collection 인터페이스는 제네릭 타입 T를 받아들이는데, 이는 나중에 실제 타입으로 대체될 것입니다.

제네릭을 사용한 컬렉션 클래스 구현

제네릭 인터페이스를 구현하는 컬렉션 클래스를 작성해봅시다.

class List<T> implements Collection<T> {
  private items: T[] = [];

  add(item: T): void {
    this.items.push(item);
  }

  remove(item: T): void {
    const index = this.items.indexOf(item);
    if (index > -1) {
      this.items.splice(index, 1);
    }
  }

  getItems(): T[] {
    return this.items;
  }
}

위 코드에서 List 클래스는 Collection 인터페이스를 구현하며, 제네릭 타입 T를 사용하여 아이템의 타입을 지정합니다.

사용 예제

const numberList = new List<number>();
numberList.add(1);
numberList.add(2);
numberList.remove(1);
console.log(numberList.getItems()); // [2]

위의 예제에서는 List 클래스를 사용하여 숫자형 데이터를 다루는 컬렉션을 구현하고 활용하는 방법을 보여줍니다.

제네릭을 사용하면 컬렉션 클래스를 더욱 유연하게 활용할 수 있으며, 다양한 타입의 데이터를 다루는데 유용합니다.

이처럼 TypeScript의 제네릭 인터페이스를 사용하여 컬렉션 클래스를 구현하는 방법을 살펴보았습니다. 데이터 타입에 관계없이 재사용 가능한 일반적인 컬렉션 클래스를 만들 수 있으므로, TypeScript 프로젝트에서 유용하게 활용할 수 있을 것입니다.