어떠한 특정 상황에 따라 값을 지정하는 경우가 있다.
예를 들어 메세지 플랫폼에서 어떤 한 유저의 상태를 표시할 때가 대표적이다. (자리 비움, 회의 중 …)
이럴때 자바스크립트에서는 객체 혹은 변수에 특정 문자열 혹은 숫자형을 지정하여 관리를 하는데
타입스크립트에서는 더 편리하게 관리해주는 enum(열거형) 문법에 대해 알아보자.
자바스크립트의 불편한점
변수로 저장
const sleeping = "자리 비움"
const meeting = "회의 중"
const connecting = "접속 상태"
이런 형태로 쓰면 직관적이긴 하나 너무 방대하기에 코드가 스파게티 코드로 꼬일게 분명하다.
객체 형태로 저장
const obj = {
sleeping: 1
meeting: 2
connecting: 3
}
객체 형식으로 저장하여 숫자를 별도로 지정하여 문자열 인코드 문제를 막아서 저장하는 방법 또한 좋지만,
특정 키를 외우는 것은 생각보다 헷갈리게 만들 수도 있다.
enum 활용하기
enum obj { sleeping, meeting, connecting }
const status = {
name: 'Maximilian',
age: 30,
hobbies: ['Sports', 'Cooking'],
code: obj.sleeping
};
if (person.code === obj.sleeping) {
console.log('he's sleeping');
}
enum에 지정된 요소들은 자연스레 0, 1, 2 이라는 숫자들이 인덱스 형태로 자동 지정된다.
자바스크립트에서는 enum 이라는 키워드가 없으므로 아래와 같이 enum 문법을 해석하게 된다.
var obj;
(function (obj) {
obj[obj["sleeping"] = 0] = "sleeping";
obj[obj["meeting"] = 1] = "meeting";
obj[obj["connecting"] = 2] = "connecting";
})(obj || (obj = {}));
더욱 직관적으로 obj 열거형을 통해 객체 키값을 지정하게 된다.
enum은 객체와 비슷한데 꼭 써야하는가?
enum은 앞서 언급하듯 자바스크립트에서는 존재하지 않는 문법 키워드 이다.
그럼에도 사용해야 하는 이유는
- 객체는 엄격하게 지정되지 않은 관계로 키의 값은 능동적으로 변경되기 쉽지만, TypeScript enum의 속성은 엄격하여 변경할 수 없다.
- 객체의 속성 값이 어떤 타입이든 자유롭게 지정되지만, TypeScript에서는 문자열 or 숫자형만 사용할 수 있다.
- 객체는 가독성에서 스파게티가 될 수 있는 코드이지만, enum을 활용하면 직관적으로 해석이 되므로 코드 해독에 유용하다.
- REST API 응답을 통해 if 검사 및 타입 배정에 활용하기 유용하다.