TypeScript

[TypeScript] 열거형(Enum) 타입은 무엇인가?

tony-yun 2023. 1. 29. 19:18

Enum은 그 안에 무슨 값들을 열거했냐에 따라서 Numeric enums, String enums 등으로 불리기도 하는데,

보통 상수들의 집합을 정의하고자 할 때 주로 사용되고는 한다.

 

숫자 열거형

enum Weekdays {
  Monday,
  Tuesday,
  Wednesday,
  Thursday = 10,
  Friday,
  Saturday,
  Sunday,
}
let day: Weekdays = Weekdays.Thursday;
console.log(day)
보통 enum은 위와 같이 사용하고는 하는데, 왜 숫자 열거형이냐 하면 따로
특정한 값이 주어지지 않으면 자동적으로 0부터 숫자가 할당되기 때문이다.
Monday = 0, Tuesday = 1, Wednesday = 2, 이런 식으로.
 
그렇다면 Thursday에서 10을 지정해줬는데 여기서 Friday는 무슨 값일까?
그건 초기값을 기준으로 다시 1씩 증가하기 때문에 Friday = 11이 된다. 그 이후 역시 1씩 증가한 값이 할당된다.
// ===============

day = 20;
// 20이 나올 수가 없는데 아무 에러도 발생하지 않는다. 
// 굳이 상수를 관리한다고 enum을 사용하고자 한다면 숫자 열거형 말고 문자 열거형을 사용하는 것이 좋다.

// 혹은 enum보다는 그냥 class로 상수를 관리하는 게 더욱더 좋다.
class AppCode {
  static readonly CD0001 = "1상수입니다.";
  static readonly CD0002 = "2상수입니다.";
  static readonly MAX_LENGTH = 5;
}
let appCode = AppCode.CD0002;

문자 열거형

enum Codes {
  CD0001 = '일수',
  CD0002 = '이수',
  CD0003 = '삼수',
  CD0004 = '사수',
  CD0005 = '오수',
  CD0006 = '육수',
}
let code: Codes = Codes['CD0001'];
code = Codes.CD0003;
문자 열거형 역시 이런식으로 값을 할당하여 사용할 수 있다.
 
enum의 특징은 일단 안에 값들은 읽기 전용이라 수정, 삽입이 불가능하다는 특징을 가지고 있어
상수의 집합을 표현하기에는 적절하다.

enum Tristate {
    False,
    True,
    Unknown,
}
console.log(Tristate[0]) // "False"
console.log(Tristate['False']) // 0
console.log(Tristate[Tristate.False]) // "False" because `Tristate.False == 0`