[typescript] 제네릭 인터페이스를 사용하여 다른 클래스와의 상호작용 구현하기

제네릭(generics)은 TypeScript에서 코드의 유연성을 높이고 재사용성을 증가시키는 강력한 기능입니다. 제네릭을 사용하여 다른 클래스와의 상호작용을 구현하고자 할 때는 제네릭 인터페이스를 활용하는 것이 일반적입니다. 이를 통해 다양한 유형과 상호작용하며 타입 안정성을 확보할 수 있습니다.

이번 포스트에서는 TypeScript에서 제네릭 인터페이스를 활용하여 다른 클래스와의 상호작용을 구현하는 방법을 살펴보겠습니다.

1. 제네릭 인터페이스 기본 개념

제네릭 인터페이스는 선언할 때 구체적인 타입을 지정하지 않고, 인터페이스를 구현하는 클래스에서 구체적인 타입을 설정할 수 있도록 합니다. 이를 통해 재사용 가능하고 유연한 코드를 작성할 수 있습니다.

interface Container<T> {
  value: T;
}

class NumberContainer implements Container<number> {
  value: number;
  constructor(value: number) {
    this.value = value;
  }
}

class StringContainer implements Container<string> {
  value: string;
  constructor(value: string) {
    this.value = value;
  }
}

위 예제에서 Container 인터페이스는 제네릭 타입 T를 정의하고, 이를 구현하는 NumberContainerStringContainer 클래스에서 구체적인 타입을 지정하여 사용하는 것을 볼 수 있습니다.

2. 제네릭 인터페이스 활용 예시

다음은 제네릭 인터페이스를 사용하여 다른 클래스와의 상호작용을 구현하는 간단한 예시입니다.

interface Identifiable<T> {
  id: T;
  getId(): T;
}

class Product implements Identifiable<number> {
  constructor(public id: number, public name: string) {}
  getId(): number {
    return this.id;
  }
}

class User implements Identifiable<string> {
  constructor(public id: string, public name: string) {}
  getId(): string {
    return this.id;
  }
}

위 예제에서 Identifiable 인터페이스는 제네릭 타입 T를 지정하여 id 속성과 getId 메서드를 정의합니다. 그리고 이를 구현하는 ProductUser 클래스에서 각각 numberstring 타입을 사용하여 상호작용을 구현하고 있습니다.

3. 마무리

제네릭 인터페이스를 활용하면 다른 클래스와의 상호작용을 보다 유연하게 구현할 수 있습니다. 제네릭을 사용하여 일반적인 동작을 추상화하고 여러 유형에 대해 일반화된 코드를 작성함으로써 코드의 재사용성을 높이고 타입 안정성을 확보할 수 있습니다.

제네릭 인터페이스에 대한 더 자세한 내용은 TypeScript 공식 문서를 참고하시기 바랍니다.

이상으로 제네릭 인터페이스를 사용하여 다른 클래스와의 상호작용을 구현하는 방법에 대해 알아보았습니다. 감사합니다.