[typescript] 제네릭을 사용한 인터페이스 정의

제네릭(generic)은 TypeScript에서 강력한 기능 중 하나로, 재사용성을 높여주는 도구입니다. 제네릭을 사용하여 자료형을 동적으로 처리할 수 있으며, 컴파일 시점에 타입 체크를 보장할 수 있습니다.

이번 포스트에서는 TypeScript에서 제네릭을 사용하여 인터페이스를 정의하는 방법에 대해 알아보겠습니다.

제네릭을 사용한 기본적인 인터페이스 정의

제네릭을 사용하면, 인터페이스를 정의할 때 특정한 타입을 사전에 지정하지 않고, 재사용성 있게 정의할 수 있습니다.

interface Box<T> {
  value: T;
}

위 코드에서 Box 인터페이스는 T라는 제네릭 타입을 받아들이는데, 이는 어떠한 타입이든 사용될 수 있음을 의미합니다.

제네릭을 사용한 함수 타입 정의

제네릭을 사용하여 함수의 매개변수 타입이나 반환 타입을 동적으로 처리할 수 있습니다.

function identity<T>(arg: T): T {
  return arg;
}

위의 identity 함수에서 매개변수 arg와 반환 타입은 제네릭을 이용하여 동적으로 처리됩니다.

제네릭을 사용한 클래스 정의

제네릭을 사용하여 클래스를 정의할 경우, 클래스 내부에서 사용하는 타입을 외부에서 동적으로 지정할 수 있습니다.

class Queue<T> {
  private data: T[] = [];

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

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

위의 Queue 클래스는 T 제네릭 타입을 받아들이는데, 이를 통해 큐에 저장되는 값의 타입을 지정할 수 있습니다.

결론

제네릭을 사용하여 인터페이스, 함수, 클래스를 정의하면, 코드의 재사용성을 높일 뿐만 아니라 타입 안정성을 보장할 수 있습니다. TypeScript에서 제네릭을 적절히 활용하면, 유연하면서도 안정적인 코드를 작성할 수 있습니다.

제네릭을 사용한 인터페이스 정의에 대해 알아본 것처럼, TypeScript에서 제네릭을 적재적소에 활용하여 보다 견고한 소프트웨어를 개발하는 데 도움이 될 것입니다.

참고문헌: