Enum은 여러가지 관련된 상수값들을 한 곳에 모아서 정의합니다. 자바스크립트에서는 제공하지 않는 문법이며, 타입스크립트에서 제공하는 문법입니다.
자바스크립트에서는 enum의 개념을 다음과 같이 사용합니다.
const DAYS_ENUM = Object.freeze({"MONDAY": 0, "TUESDAY": 1});
const today = DAYS_ENUM.MONDAY;
타입스크립트에서 enum의 사용은 다음과 같습니다. enum의 이름은 앞글자만 대문자로 적습니다. 만약 값을 직접 할당하지 않는다면 0부터 시작하는 인덱스의 값이 담깁니다.
enum Days {
MONDAY,
TUESDAY,
WENDESDAY
}
console.log(Days.MONDAY); //0
console.log(Days.TUESDAY); //1
console.log(Days.WENDESDAY); //2
숫자를 직접 할당하면 해당 숫자부터 1씩 증가하는 값이 담깁니다.
enum Days {
MONDAY = 1,
TUESDAY,
WENDESDAY
}
console.log(Days.MONDAY); //1
console.log(Days.TUESDAY); //2
console.log(Days.WENDESDAY); //3
문자를 직접 할당하면 모든 enum값에 문자를 할당해 주어야합니다.
enum Days {
MONDAY = 'mon',
TUESDAY = 'tue',
WENDESDAY = 'wen'
}
console.log(Days.MONDAY); //mon
console.log(Days.TUESDAY); //tue
console.log(Days.WENDESDAY); //wen
타입스크립트에서 enum의 사용은 가급적 피해야합니다. 왜냐하면 enum으로 타입이 지정된 변수에 다른 어떤 숫자도 할당할 수 있는 문제점을 가지고 있기때문입니다. 따라서 타입이 정확하게 보장되지 않습니다. 여러 상수값들을 지정하여 사용하고 싶다면 Union Types
로 대체하여 사용 가능합니다.
enum Days {
MONDAY,
TUESDAY,
WENDESDAY
}
let today: Days = Days.TUESDAY;
today = 100; //컴파일 에러 발생하지 않음.