Enum Type (여러가지의 관련된 상수를 모아서 정의할 수 있게 끔 도와주는 타입이다.)
*// [ JavaScript ]
// JavaScript 에서는 Enum 이 없다.
// 그래서 아래처럼 정의하여 사용하였다.*
const MAX_NUM = 6;
const MAX_STUDENTS_PER_CLASS = 10;
const MONDAY = 0;
const TUESDAY = 1;
const WEDNESDAY = 2;
const DAYS_ENUM = Object.freeze({ "MONDAY": 0, "TUESDAY": 1, "WEDNESDAY": 2 });
const datOfToday = DAYS_ENUM.MONDAY;
*// [ TypeScript ]
// Enum 에서는 앞글자만 대문자, 나머지는 소문자로 작성해야 한다.*
enum Days {
Monday, // 0 Monday = 1 이면 1부터 1씩 증가
Tuesday, // 1
Wednesday,// 2
Thursday, // ..
Friday,
Satarday,
Sunday,
}
*//-> 할당된 값이 없으면 0 ~ .. 순으로 값이 할당되며,
// 가장 첫 번째에 1 이라고 할당되면 1 ~ .. 순으로 값이 할당된다.
// 또한 문자열을 지정할 수 있는데 문자열은 자동으로 할당되지 않고
// 할당할 상수 변수에 지정해 주면 된다.*
console.log(Days.Tuesday);
let day = Days.Satarday;
console.log(day);
*// 가능한 TypeScript 에서는 Enum 사용을 추천하지 않는다. 이유는
// 타입이 정확히 보장되지 않기 때문에 사용을 지양하도록 한다.*
day = Days.Tuesday;
day = 10;
*// Days.Tuesday가 문자열타입인지 숫자 타입인지 구분이 안되며
// 10은 할당된 값이 없는데 오류로 표시되지도 않는다.*
→ 가능한 TypeScript 에서는 Enum 사용을 추천하지 않는다. 이유는
타입이 정확히 보장되지 않기 때문에 사용을 지양하도록 한다.
→ 대신에 Union 타입을 사용하는 것을 추천한다.
type DayOfWeek = 'Monday' | 'Tuesday' | 'Wednesday';
let datOfweek: DayOfWeek;
dayOfweek = 'Monday';
→ 정리하면,
Union Type은 웹 클라이언트에서 사용이 가능하지만
모바일 클라이언트 즉, 안드로이드 코틀린을 사용하는 환경에서는 Union 이라는 정의가 없기 때문에 Enum을 사용한 경우가 존재한다.
즉, 다른 클라이언트 환경과 의사소통 하는 필요가 없다면 Enum 사용은 지양하도록 한다.