Enum의 한국어명은 열거형이며, 자바스크립트에는 없는 타입이다.
어디서 많이 봤다?👀 했더니 객체의 속성 프로퍼티 중 하나인 Enumerable의 약자이네.
해당자료를 for in 반복문에서 나타낼지 숨길지를 Boolean으로 결정해주던 녀석이다.
C와 Java를 다루는 개발자에게는 익숙한 타입인 것 같다.
이렇게 Size 데이터를 enum으로 준비해준다.
enum Size {
S,
M,
L,
XL,
}
아래와 같이 활용한다.
let product: {
id: string;
name: string;
price: number;
sizes: Size[]; // 불러와주고
} = {
id: "0123";
name: "티셔츠";
price: 50;
sizes: [Size.M], // 닷노테이션으로 객체에서 자료불러오듯 사용.
}
이넘의 기본값은 0부터 시작하는 정수이다!
Size.S, .M, .L, .XL을 차례대로 콘솔해보면
0
1
2
3
이렇게 뜨는 것을 확인할 수 있다.
즉, 맨 위에 작성한 Size 이넘은 value의 할당을 생략하였기 때문에 숫자형 타입의 enum이라고 볼 수 있다.
이렇듯 이넘의 기본값은 0부터 시작하나, 0은 false값으로 처리될 위험이 있다. Size.S는 0처리되므로 if (Size.S) 같은 조건문을 사용하는 경우 엄연한 사이즈 중 하나인데도 falsy로 인식되어 쓰루당할 수 있단 이야기.
따라서 문자형 타입의 이넘을 선택하여 명시적으로 값 할당해주면 예기치 않은 문제를 피할 수 있다.
enum Size {
S = "S",
M = "M",
L = "L",
XL = "XL",
}
혹은, 초기화시 맨 앞 숫자가 1부터 시작하도록 하여 기본값을 그대로 활용하는 방법도 있다.
enum Size {
S = 1,
M,
L,
XL,
}
객체는 내부 데이터를 자유롭게 변경할수 있지만, enum은 선언후 변경이 불가하다.
객체는 화이트보드와 보드마카, 이넘은 화이트보드와 유성매직인 셈..
객체의 밸류에는 모든 타입이 저장가능하나, enum은 오로지 문자열 혹은 숫자만 저장된다.