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`
'TypeScript' 카테고리의 다른 글
[TypeScript] type VS interface? (0) | 2023.01.29 |
---|---|
[TypeScript] 제네릭(Generic) 타입은 무엇인가? (0) | 2023.01.29 |
[TypeScript] 리터럴 타입, 유니언 타입, 교차 타입 설명 (0) | 2023.01.29 |