본문 바로가기
  • Junior developer :)
TypeScript

Type Script_08 Generics (제네릭)

by ram_Hi 2021. 4. 16.

항상 타입 보장하기!   타입은 명확하게!     타입은 엄격하게!     관리하기! 


 제네릭을 제네릭하게! 재사용성을 높여줘! 

Generic : 통상적인, 일반적인 이라는 뜻을 갖고 있다.

 -> 적용해본다면, "일반화" 

 

1. 제네릭을 사용하기 이전에는...

function checkPoint(arg: number | null): number {
  if (arg == null) {
    throw new Error("not valid number!");
  }
  return arg;
}
// 만약 타입을 string, boolean 등 다양한 경우로 설정하고 싶을 경우에
// 일일히 다 만들면...??? 😱 더럽고 긴 코드 내역 생성...두둥..!

  타입별로 다 만들면 정말,,,, 비실용적이고 보기만해도 끔찍한 결과를 낳겠죠?

  any를 쓴다면? any는 타입보장이 안되고, 타입에 대한 정보가 없어지므로 사용하면 안 좋다!!

 

 

2. 그렇다면 제네릭은 어떻게 사용할까?

 - 함수

 function checkPoint<T>(arg: T | null): T {
  if (arg == null) {
    throw new Error("not valid number!");
  }
  return arg;
} 

const number = checkPoint(123);
const boal: boolean = checkPoint(true); // 받을 때 좀 더 정확하게 타입을 지정해주는 것이 좋음

- 클래스

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

  constructor() {}

  push(item: T): void {
    this.data.push(item);
  }

  pop(): T {
    return this.data.pop();
  }
}

const numStack = new Stack<number>(); // number 타입으로 지정
numStack.push(123);

  사용자가 함수를 사용할 때에 타입을 결정할 수 있고, 컴파일 할 때 타입을 보장 받을 수 있다.

  function 함수명<제네릭 이름> / class 클래스명<제네릭 이름> 이렇게 사용하면 됩니다.

  제네릭 이름 값에는 타입이 어떤 것이든 다 들어올 수 있다. 사용자가 정하기 나름!!! 아주 유용하쥬?ㅎㅎ

  - Tip! 제네릭 이름은 보통 대문자 알파벳 한개를 사용한답니다. 

    ex) T(type) / V(value) / K(key) ...

  

 

제네릭은 타입스크립트에서 너무너무 많이 이용되고 재사용성과 유지보수성을 높여준다!! 😄

댓글