Skip to content

Latest commit

 

History

History
190 lines (138 loc) · 3.64 KB

File metadata and controls

190 lines (138 loc) · 3.64 KB

5. 열거형 타입

열거형(Enum) 타입

JS에는 존재하지 않고 TS에서만 사용할 수 있는 특별한 타입. 여러 개의 값을 나열하는 용도로 사용

enum Role {
  ADMIN,
  USER,
  GUEST,
}

→ 3개의 멤버 ADMIN, USER, GUEST를 나열한 열거형 타입을 하나 만듬


enum의 각 멤버에는 다음과 같이 숫자를 할당할 수 있음

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

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

// 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에 숫자 값을 직접할당하지 않아도 0부터 1씩 늘어나는 값으로 자동 할당됨

// enum 타입
// 여러가지 값들에 각각 이름을 부여해 열거해두고 사용하는 타입

enum Role {
  ADMIN, // 0 할당(자동)
  USER,  // 1 할당(자동)
  GUEST, // 2 할당(자동)
}

const user1 = {
  name: "이정환",
  role: Role.ADMIN, // 0
};

const user2 = {
  name: "홍길동",
  role: Role.USER, // 1
};

const user3 = {
  name: "아무개",
  role: Role.GUEST, // 2
};

자동할당되는 값은 기본적으로 0부터 시작함. 만약 이 값을 변경하고 싶으면 다음과 같이 시작하는 위치에 값을 직접 할당해 주면 됨. 그럼 자동으로 그 아래의 멤버들은 1씩 증가된 값으로 할당됨

// enum 타입
// 여러가지 값들에 각각 이름을 부여해 열거해두고 사용하는 타입

enum Role {
  ADMIN = 10, // 10 할당 
  USER,       // 11 할당(자동)
  GUEST,      // 12 할당(자동)
}

const user1 = {
  name: "이정환",
  role: Role.ADMIN, // 10
};

const user2 = {
  name: "홍길동",
  role: Role.USER, // 11
};

const user3 = {
  name: "아무개",
  role: Role.GUEST, // 12
};

문자열 열거형

enum에는 멤버에 숫자 말고도 문자열 값도 할당할 수 있음.

따라서 만약 다음과 같이 국가별 언어를 열거하는 enum이 필요하면 각 멤버에 문자열 값을 할당하면 됨

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

이렇듯 모든 멤버의 값이 문자열인 enum을 특별히 문자열 enum이라고 부름. 숫자형 enum과 동일하게 다음과 같이 프로퍼티의 값으로 사용할 수 있음

enum Role {
  ADMIN,
  USER,
  GUEST,
}

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

const user1 = {
  name: "이정환",
  role: Role.ADMIN, // 0
  language: Language.korean,// "ko"
};

enum은 컴파일 결과 객체가 됨

enum은 컴파일 될 때 다른 타입들 처럼 사라지지 않고 JS 객체로 변환됨. 따라서 우리가 위에서 사용했던 것 처럼 값으로 사용할 수 있음


[변환된 결과]

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 = {}));
const user1 = {