[TypeScript] 제네릭

Growing_dev·2023년 6월 22일

제네릭의 Hello World (Hello World of Generics)
identity 함수는 인수로 무엇이 오던 그대로 반환하는 함수입니다. echo 명령과 비슷하게 생각할 수 있습니다.

제네릭이 없다면, identity 함수에 특정 타입을 주어야 합니다:

function identity(arg: number): number {
  return arg;
}
function identity(arg: any): any {
  return arg;
}

any를 쓰는 것은 함수의 arg가 어떤 타입이든 받을 수 있다는 점에서 제네릭이지만, 실제로 함수가 반환할 때 어떤 타입인지에 대한 정보는 잃게 됩니다. 만약 number 타입을 넘긴다고 해도 any 타입이 반환된다는 정보만 얻을 뿐입니다.

대신에 우리는 무엇이 반환되는지 표시하기 위해 인수의 타입을 캡처할 방법이 필요합니다. 여기서는 값이 아닌 타입에 적용되는 타입 변수 를 사용할 것입니다.

const genericFunc = <T>(data: T): T => {
  console.info(data);
  return data;
};


genericFunc<string>("asd");
genericFunc<number>(1);

함수에 T라는 타입 변수를 추가했습니다. T는 유저가 준 인수의 타입을 캡처하고 (예 - number), 이 정보를 나중에 사용할 수 있게 합니다. 여기에서는 T를 반환 타입으로 다시 사용합니다. 인수와 반환 타입이 같은 타입을 사용하고 있는 것을 확인할 수 있습니다. 이를 통해 타입 정보를 함수의 한쪽에서 다른 한쪽으로 운반할 수 있게끔 합니다.

이 버전의 함수는 타입을 불문하고 동작하므로 제네릭이라 할 수 있습니다. any를 쓰는 것과는 다르게 인수와 반환 타입에 number를 사용한 첫 번째 함수만큼 정확합니다. (즉, 어떤 정보도 잃지 않습니다)

profile
github ( https://github.com/sktjgudals ) gitlab ( https://gitlab.com/sktjgudals10 )

0개의 댓글