프로그래밍/TypeScript

[TypeScript] 제네릭(Generic) 사용법

싯타마 2022. 8. 13. 04:21

1. 제네릭(Generic) 이란?

- 다양한 타입의 객체들을 다루는 메서드나 클레스에 컴파일 시 타입 체크를 해주는 기능이다. C#, Java 등의 언어에서 재사용성이 놓은 컴포넌트를 만들 때 사용된다.

- 의도하지 않은 타입이 들어오지 않도록 방지해주는 역할이며 여러 개의 타입을 가진 컴포넌트를 사용할 때 유용하다.

- 관용적으로 <T>를 사용한다.(아무 단어나 써도 무방하다.)

 

2. 제네릭의 장점

- 객체의 타입 안전성을 높이고 자료형을 정하지 않고 여러 타입을 사용 할 수 있게 해 주기 때문에 번거로움이 줄어든다.

- 한번의 선언으로 다양한 타입에 재사용이 가능해진다.

 

3. any와의 차이점

- any는 자료의 타입을 제한할 수 없고 function을 통해 어떤 타입의 데이터가 리턴되는지 알 수 없다는 단점이 있다.

 

4. 사용법

1) 기본 형식

type SuperPrint = {
   <T>(arr: T[]): T;
};

2) SuperPrint에 Generic 적용하기 예시

const one = superPrint([1, 2, 3, 4]);
const two = superPrint([true, false, true]);
const three = superPrint(["a", "b", "c"]);
const four = superPrint([1, 2, true, false]);
const five = superPrint([1, 2, true, false, "abc"]);

 

- 5번째 줄 superPring는 number, boolean, string이 혼용되었음에도 Generic으로 인하여 오류가 발생하진 않는다.

 

3) 활용 예시

 

function superPrint<T>(a: T[]) {
  return a[0];
}
type SehunExtra = {
  favFood: string;
};
type Player2<E> = {
  name: string;
  extraInfo: E;
};

type SehunPlayer = Player2<{ favFood: string }>;

const sehun4: SehunPlayer = {
  name: "sehun",
  extraInfo: {
    favFood: "kimchi",
  },
};

 

 

 

'프로그래밍 > TypeScript' 카테고리의 다른 글

[TypeScript] type과 interface의 차이  (0) 2023.01.06