Published on

열거형(Enum) 타입

열거형(Enum) 타입

열거형 타입은 자바스크립트에는 존재하지 않고 오직 타입스크립트에서만 사용할 수 있는 특별한 타입입니다.
열거형은 다음과 같이 여러개의 값을 나열하는 용도로 사용합니다.

enum Role {
  ADMIN,
  USER,
  GUEST,
}

3개의 멤버 ADMIN, USER, GUEST를 나열한 열거형 타입을 하나 만들었습니다.
설명 편의상 앞으로 열거형 타입을 enum이라 통칭합니다.
enum의 각 멤버에는 다음과 같이 숫자를 할당할 수 있습니다.

enum Role {
  ADMIN = 0,
  USER = 1,
  GUEST = 2,
}

또 다음과 같이 enum의 멤버들을 값으로도 활용 할 수 있습니다.

enum Role {
  ADMIN = 0,
  USER = 1,
  GUEST = 2,
}

const user1 = {
  name: '김규민',
  role: Role.ADMIN, //관리자
}

const user2 = {
  name: '홍길동',
  role: Role.USER, // 회원
}

const user3 = {
  name: '아무개',
  role: Role.GUEST, // 게스트
}

user1.role 에는 0이 user2.role에는 1이 user3.role에는 2가 할당됩니다.
이렇듯 유저의 권한과 같은 여러개의 멤버를 갖는 값을 숫자로 표기할 때 enum을 이용해 보다 안전하고 직관적으로 관리할 수 있습니다.

문자열 열거형

enum의 멤버에는 숫자 말고도 문자열 값도 할당할 수 있습니다.
따라서 만약 다음과 같이 국가별 언어를 열거하는 enum이 필요하다면 각 멤버에 문자열 값을 할당하면 됩니다.

enum Language {
  korean = 'ko',
  english = 'en',
}

enum은 컴파일 결과 객체가 된다

enum은 컴파일될 때 다른 타입들 처럼 사라지지 않고 자바스크립트 객체로 변환됩니다.
따라서 우리가 위에서 했던 것 처럼 값으로 사용할 수 있는 것 입니다.

var Role
;(function (Role) {
  Role[(Role['ADMIN'] = 0)] = 'ADMIN'
  Role[(Role['USER'] = 1)] = 'USER'
  Role[(Role['GUEST'] = 2)] = 'GUEST'
})(Role || (Role = {}))
var Language
;(function (Language) {
  Language['korean'] = 'ko'
  Language['english'] = 'en'
  Language['japanese'] = 'jp'
})(Language || (Language = {}))