TypeScript enum, generic


Typescirpt에서의 EnumGeneric에 대해서 간단 정리해보려 한다.

Enum

특정한 값들의 집합을 의미하는 자료형이며, 타 프로그래밍 언어에서도 많이 사용되는 자료형이다.
사용하게 된 배경으로는 아래의 고수님의 잘 정리된 포스트를 찾아 볼 수 있었다.
Enum 탄생 배경?

위 포스팅의 경우 JAVA를 기반으로 설명해주셨지만 다른 언어 역시 탄생하게 된 배경은 대동소이할 것으로 보인다. (언어별로 확인해보지는 않았다.. 😅)

Enum 사용이유

대체적으로 아래와 같은 이유로 사용을 한다.

  1. 소스의 가독성
  2. 추상화 편함
  3. 안전성

Typescript의 Enum

아래의 예제와 같이 사용 할 수 있으며, 숫자형, 문자형, 복합(숫자형 + 문자형) 이넘을 가지고 있다.

// 숫자형
enum LogLevel {
  ERROR,
  WARN,
  INFO,
  DEBUG,
}

//문자형
enum Response {
  Yes = "Y",
  No = "N",
}

function selectedVoice(response: Response): string {
  if (response === "Y") {
    return "Yes";
  }
  return "No";
}

selectedVoice(Response.Yes);

주의사항

실제 존재하는 자료형은 아니며, 런타임 시 객체 형태로 존재한다.
keyof 사용 시 주의 필요 keyof typeof를 사용해야 한다.

Generic

다양한 타입에서 동작하는 컴포넌트를 만들 때 사용되는 방식(?), 명세이다.

Generic 사용 이유

어떤 코드를 작성하였는데 여러가지 타입에 대해서 동작을 하게 하고 싶다면? Typescript의 유니온 방식으로도 한계가 있다. 🥶 이리하여 타입을 함수의 파라미터처럼 사용하는 것으로 타 언어에서도 사용하고 있는 방식이다.

Typescript의 Generic

간단히 아래의 예제와 같이 사용 할 수 있으며, Promise 등 몇 가지 생성자를 따라 들어가보면 쉽게 확인 가능할 것이다.

function logMessage<T>(param: T): T {
  console.log(param);
  return param;
}

logMessage<number>(10);
logMessage<string>("test");
logMessage<boolean>(true);

참고사항

관례 상 T를 쓰는거지 다른 걸 써도 상관없다.