[TS] TypeScript 에서 Generics(제네릭) 타입에 대해 ARABOZA

Dtrip·2022년 6월 4일
0
post-custom-banner

제네릭(Generics)의 사전적 정의

제네릭은 C#, Java 등의 언어에서 재사용성이 높은 컴포넌트를 만들 때 자주 활용되는 특징이다.

특히, 한가지 타입보다 여러 가지 타입에서 동작하는 컴포넌트를 생성하는데 사용된다.

제네릭의 한 줄 정의와 예시

위 코드에는 T가 순서대로 세 개가 있다.

첫 번째 : 함수 호출 시 넘겨주는 타입
두 번째 : 함수 매개변수 타입
세 번째 : 함수 반환 타입

함수 호출 시 넘겨주는 타입

getText<string>('hi');
getText<number>(10);
getText<boolean>(true);

이런 식으로, 타입스크립트에서는 호출할 때 함수 안에서 사용할 타입을 넘겨준다.

이 것이 첫 번째 T의 차리를 차지하는 것이다.


function getText<string>(text: T): T {
  return text;
}

함수 매개변수 타입

함수의 매개변수의 타입을 정해준다.

getText<string>('hi');

함수의 매개변수로 string 을 보내고 있음이 확인된다.


function getText<string>(text: string): T {
  return text;
}

함수 반환 타입

함수의 반환 타입을 결정한다.

이 함수에서는 매개변수를 그대로 출력해주고 있기 때문에 반환값이 string 으로 같다.

function getText<string>(text: string): string {
  return text;
}

any 대신에 제너릭을 사용하는 이유?

function getText(text: any): any {
  return text;
}

any 는 어떤 타입이 들어와도 상관이 없다.

T도 마찬가지로 string, number, boolean 등 어떤 타입이 들어와도 상관이 없다.

그렇다면 위의 코드처럼 any를 쓰지 않고 왜 제너릭을 사용하는 것일까?

같은 함수 내에 쓰이는 T는 모두 같은 타입이기 때문이다.


function getText<T>(text: T): T {
  return text;
}

이렇게 쓰는 것에서, 하나의 T가 string 임이 확실해졌다면, 다른 T도 string이어야 한다.

만약 반환값은 다른 타입을 쓰고 싶다면 아래와 같이 써야할 것이다.

function getText<T>(text: T): any {
  return text;
}

참조

https://basemenks.tistory.com/

profile
Devtrip
post-custom-banner

0개의 댓글