Backend/TypeScript

[TypeScript] Enum

누구세연 2023. 11. 3. 21:19

Enum 타입은 굉장히 많은 언어에서 존재하는 타입입니다.

다른 언어를 아시는 분들은 이미 알고 계실 테지만 JavaScript에는 Enum 타입이 존재하지 않습니다.

이 기능을 활성화해 주는 게 TypeScript입니다.

 

Enum

Enum 타입은 숫자 또는 문자열의 집합에 대한 열거형 값을 정의할 수 있는 타입입니다.

Enum은 관련된 상수 값의 집합을 정의하는데 유용하며, 코드를 더 명확하고 읽기 쉽게 만들어줍니다.

 

예를 들어, 요일을 나타내는 Enum은 다음과 같이 정의할 수 있습니다.

enum DayOfWeek {
  Monday,
  Tuesday,
  Wednesday,
  Thursday,
  Friday,
  Saturday,
  Sunday
}

이렇게 정의된 DayOfWeek Enum은 각각의 멤버가 0부터 6까지의 순서를 가집니다.

 

Enum은 정수뿐만 아니라 문자열로 정의할 수도 있습니다.

예를 들어, 특정 상태를 나타내는 Enum을 다음과 같이 정의할 수 있습니다.

enum Status {
  Success = 'success',
  Error = 'error',
  Pending = 'pending'
}

이를 사용하면 코드에서 해당 상태를 명확하게 알 수 있고, 의도치 않은 잘못된 값의 사용을 방지할 수 있습니다.

 

Enum 타입을 사용해야 하는 이유

Enum 타입을 사용하는 이유는 여러 가지가 있습니다.

  • 가독성과 유지보수성
    Enum은 코드를 읽기 쉽게 만들어줍니다. 숫자나 문자열의 집합을 읽는 사람이 해당 값을 이해하기 쉽도록 의미 있는 이름을 부여할 수 있습니다. 이는 코드의 가독성을 높이고 유지 보수를 용이하게 만듭니다.
  • 타입 안정성
    Enum을 사용하면 오타나 잘못된 값의 사용을 방지할 수 있습니다. Enum 값은 미리 정의된 값 중 하나여야 하므로 올바른 값만을 사용할 수 있습니다. 이는 개발 중에  발생할 수 있는 버그를 줄이고 프로그램의 안정성을 높여줍니다.
  • 중복 방지
    Enum을 사용하면 동일한 값이 중복되는 것을 방지할 수 있습니다. Enum은 고유한 값만을 정의하므로 중복된 값을 선언할 수 없습니다.
  • 자동화된 번역
    Enum 값은 자동으로 변역 될 수 있습니다. 예를 들어, 프로그램의 언어를 변경할 때 Enum 값에 대한 번역이 필요한 경우, Enum 값만 번역 파일과 매핑하면 됩니다.
  • 코드 유지 보수
    Enum 값을 사용하면 코드의 유지보수가 용이해집니다. Enum 값을 수정하거나 업데이트할 때, 해당 Enum 값을 사용하는 모든 코드에서 일괄적으로 적용됩니다.

 

예를 들어 api를 요청했을 때 아래 4가지 상태가 있다고 가정해 보겠습니다.

 

state라는 변수를 활용해서 아래와 같이 정의할 수 있습니다.

하지만 위처럼 스트링으로 표현하는 건 좋은데 만약에 나중에 반환값을 확인하려고 할 때 만약 스펠링을 틀렸다면 여기서 바로 false가 반환됩니다.

스트링으로 한정된 값들을 표현하고 비교를 해야 되는 값들을 표현할 때의 가장 큰 문제점입니다.

 

JavaScript으로 쓸 때는 어떻게 표현했는지 확인해 보겠습니다.

상태를 변수로 만듭니다.

state에 이제 변수를 넣어줍니다. 

스트링으로 비교하지 않고도 확인이 가능합니다.

그리고 스펠링의 오타를 낼 확률이 낮아집니다.

오타를 낸다면 변수의 스펠링을 틀린 것이기 때문에 존재하지 않은 변수라는 에러를 확인할 수 있습니다.