[typescript] 제네릭 타입을 사용하여 재사용 가능한 함수를 작성하는 방법

제네릭 타입은 TypeScript에서 매개변수화된 타입을 정의할 수 있게 해주는 강력한 기능입니다. 제네릭을 사용하면 재사용 가능한 함수를 작성할 수 있어 코드의 유연성을 높일 수 있습니다. 이 포스트에서는 TypeScript에서 제네릭을 활용하여 재사용 가능한 함수를 작성하는 방법에 대해 알아보겠습니다.

제네릭 함수 작성하기

제네릭을 사용하여 함수를 작성하는 방법은 매우 간단합니다. 제네릭 타입 매개변수를 함수 시그니처와 반환 타입에 적용하여 재사용 가능한 함수를 작성할 수 있습니다. 예를 들어, 배열의 첫 번째 요소를 반환하는 함수를 작성해보겠습니다.

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

let firstNumber = getFirstItem<number>([1, 2, 3]); // 1
let firstString = getFirstItem<string>(['a', 'b', 'c']); // 'a'

위 예제에서 getFirstItem 함수는 제네릭 타입 매개변수 T를 사용하여 배열의 첫 번째 요소를 반환합니다. 이 함수를 호출할 때 숫자 배열 또는 문자열 배열을 전달하면 해당 타입에 맞게 동작합니다.

제네릭 제약(Constraints) 사용하기

제네릭을 사용할 때 특정 타입에만 제한을 두고 싶을 때가 있습니다. 이때 제네릭 제약(Constraints)을 사용하여 특정 타입을 확장하도록 제한할 수 있습니다.

예를 들어, 객체의 속성을 반환하는 함수를 작성하고 싶을 때, 객체 타입에만 제약을 두고 싶다고 가정해봅시다.

interface Person {
  name: string;
  age: number;
}

function getProperty<T extends object, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key];
}

let person: Person = { name: 'Alice', age: 30 };
let name: string = getProperty(person, 'name'); // 'Alice'
let age: number = getProperty(person, 'age'); // 30

위 예제에서 getProperty 함수는 두 개의 제네릭 타입 매개변수를 사용하여 객체의 특정 속성을 반환합니다.

정리

제네릭을 사용하면 함수와 클래스를 일반화하여 재사용 가능한 코드를 작성할 수 있습니다. 제네릭 함수를 작성할 때는 함수 시그니처의 일반화된 타입을 나타내는 제네릭 타입 매개변수를 활용하고, 필요한 경우에는 제네릭 제약을 사용하여 특정 타입에 제한을 둘 수 있습니다.

제네릭은 TypeScript 코드를 더욱 유연하고 안전하게 작성할 수 있게 해주는 강력한 도구이며, 적절히 활용하면 코드의 재사용성과 유지보수성을 향상시킬 수 있습니다.

참고 자료