[typescript] 제네릭(generic)을 사용한 데이터 타입 추론 및 가변성 처리

제네릭은 타입스크립트에서 코드를 작성할 때 타입 안정성(type safety)을 유지하면서 다양한 데이터 타입을 다룰 수 있도록 도와주는 강력한 도구입니다. 이를 통해 코드 재사용성을 높이고 유지 보수성을 강화할 수 있습니다.

제네릭을 사용한 데이터 타입 추론

제네릭을 사용하면 함수나 클래스를 선언할 때 인자의 데이터 타입을 미리 지정하지 않고, 호출할 때 동적으로 타입을 지정할 수 있습니다. 아래는 간단한 예시 코드입니다.

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

let output = identity("hello"); // output의 타입은 string으로 추론됩니다.

위 예시에서 identity 함수의 매개변수 arg와 반환값의 타입은 제네릭 T로 선언되어 있습니다. 함수를 호출할 때 문자열을 전달했기 때문에 output 변수의 타입은 자동으로 string으로 추론됩니다.

제네릭을 활용한 가변성 처리

제네릭은 데이터 구조나 알고리즘을 구현할 때 다양한 데이터 타입에 대해 일관적으로 처리할 수 있는 장점이 있습니다. 예를 들어, 배열의 push 메서드는 제네릭을 사용하여 여러 데이터 타입을 동일하게 다룰 수 있게 합니다.

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

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

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

let numberStack = new Stack<number>();
numberStack.push(10);
let poppedNumber = numberStack.pop(); // poppedNumber의 타입은 number | undefined로 추론됩니다.

let stringStack = new Stack<string>();
stringStack.push("hello");
let poppedString = stringStack.pop(); // poppedString의 타입은 string | undefined로 추론됩니다.

위 코드에서 Stack 클래스는 제네릭 T를 사용하여 여러 데이터 타입에 대해 일관된 스택 자료구조를 제공합니다. 이를 통해 타입 안정성을 유지하면서 가변성을 처리할 수 있습니다.

이처럼 제네릭을 사용하면 코드의 유연성과 안정성을 동시에 확보할 수 있으며, 타입스크립트의 강력한 기능 중 하나로 널리 활용되고 있습니다.

더 많은 제네릭 활용 방법과 관련된 내용은 타입스크립트 공식 문서에서 확인할 수 있습니다.