enum
타입은 enumerated type 의 줄임말로 직역하면 열거하는 타입 이라는 의미를 가진다.- 상수 값들 중에서 비슷한 종류들을 묶어두기 위한 용도로 사용된다.
enum
은 주로 두 가지 경우에 주로 사용된다.
예를 들어, 사용자 권한을 체크하기 위해 관리자 = 0, 회원 = 1, 게스트 = 2 로 관리한다고 하자.
if (userType !== 0) {
console.log('you are not admin');
}
만약에 userType
의 종류가 매우 많아지거나 적더라도 개발자는 관리자 = 0, 회원 = 1 이라는 것을 기억하고 코딩해야 하는 불편함이 존재한다.
이를 enum
으로 정의하면 다음과 같이 개선된다.
enum Auth {
admin = 0,
user = 1,
guest = 2,
}
if (userType !== Auth.admin) {
console.log('You are not admin');
}
위 예제는 사용자 권한 분야만 따로 모아서 정의하고 열거하였다. 이렇게 하면 의미를 명확하게 파악하고 사용할 수 있고, 자동완성을 통한 실수 방지, 가독성도 좋아지는 효과가 있다.
각국 언어의 종류를 나타내는 상수를 정의한다고 치자.
예를 들면, 한국어는 보통 ko
인데, 아무리 간단하더라도 충분히 실수가 나올 수 있고, 또 KO
인지 Ko
인지 헷갈릴 가능성도 충분하다.
이 역시 eunm
으로 정의해두면 하드코딩으로부터의 실수를 줄일 수 있다.
enum Languages {
korean = 'ko',
english = 'en',
japanese = 'jp',
}
console.log(Languages.korean) // ko
하드코딩으로부터의 실수도 줄이면서 의미파악이 쉽고 자동완성까지 된다는 장점이 있다.
1) 초기값이 없으면 기본적으로 0부터 시작한다
enum Auth {
admin,
user,
guest
}
console.log(Auth.admin) // 0
console.log(Auth.user) // 1
console.log(Auth.guest) // 2
2) 문자열을 지정해줄 수 있다.
enum Languages {
korean = 'ko',
english = 'en',
japanese = 'jp',
}
console.log(Languages.korean) // ko
console.log(Languages.english) // en
console.log(Languages.japanese) // jp
enum
은 한번 생성되면 속성을 추가하거나 수정이 불가능하다. 반대로 JS의 object
는 추가하거나 변경이 가능하다.enum
은 value로 number
와 string
만 할당할 수 있다. 반면에 JS의 object
내 value로 모든 것이 가능하다.enum
은 object
보다 더 엄격하게 타입을 정의하여 사용할 때 유용하다.