[typescript] 타입스크립트에서의 제네릭 타입 변환 방식

타입스크립트는 제네릭을 사용하여 코드 재사용성을 높이고 유연한 타입 시스템을 구축할 수 있습니다. 제네릭을 이해하고 효과적으로 사용하기 위해 제네릭 타입의 변환 방식을 알아보겠습니다.

1. 제네릭 함수

제네릭 함수는 함수의 매개변수나 반환값의 타입을 일반화할 수 있게 해줍니다. 예를 들어, 배열을 입력으로 받고 첫 번째 요소를 반환하는 함수를 작성해보겠습니다.

function getFirstItem<T>(arr: T[]): T {
  return arr[0];
}

const firstItem = getFirstItem<number>([1, 2, 3]);

위 예제에서 getFirstItem 함수는 제네릭 타입 T를 사용하여 배열의 요소 타입을 동적으로 처리할 수 있습니다.

2. 제네릭 클래스

제네릭 클래스는 클래스의 속성이나 메서드의 타입을 일반화할 수 있게 해줍니다. 예를 들어, 스택 자료구조를 구현하는 제네릭 클래스를 작성해보겠습니다.

class Stack<T> {
  private items: T[] = [];

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

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

const numberStack = new Stack<number>();
numberStack.push(1);

위 예제에서 Stack 클래스는 제네릭 타입 T를 사용하여 임의의 타입에 대해 동작할 수 있습니다.

3. 타입 제한

제네릭 타입을 사용할 때 타입 제한을 설정하여 특정 타입만을 받도록 제한할 수 있습니다. 예를 들어, 숫자 타입만을 처리할 수 있는 제네릭 함수를 작성해보겠습니다.

function sum<T extends number>(a: T, b: T): T {
  return a + b;
}

const result = sum(10, 20);

위 예제에서 T extends number를 사용하여 sum 함수가 숫자 타입에 대해서만 동작하도록 제한하였습니다.

4. 타입 변환

일반화된 제네릭 타입을 구체적인 타입으로 변환할 수 있습니다. 예를 들어, Array 타입을 제네릭으로 변환하여 배열을 생성하는 방법은 다음과 같습니다.

const numberArray: Array<number> = [1, 2, 3];

위 예제에서 Array<number>는 숫자 타입의 배열을 의미합니다.

요약

타입스크립트에서의 제네릭을 활용하여 함수와 클래스의 유연한 타입 처리를 가능케 합니다. 제네릭 함수와 클래스, 타입 제한, 타입 변환 등을 활용하여 보다 안정적이고 유연한 코드를 작성할 수 있습니다.

위에서 살펴본 내용을 토대로, 제네릭을 적극 활용하여 타입 안정성을 높이고 코드의 재사용성을 개선할 수 있습니다.