공부기록/Typescript

[타입스크립트] enum 타입이란?

Jenner 2023. 1. 20. 15:57

주의 : 본 포스트는 udemy강의를 들으며 

공부를 위해 정리한 내용이나,

수강자의 부족한 지식으로 인해 정확하지 않을 수 있습니다. 

 

특징 : 자바스크립트에는 enum 타입이 없다.

 

방식: 식별자들을 중괄호 쌍 안에 넣는 방식 

 

{NEW, OLD}

 

 

enum키워드로 enum을 생성하고,
 
 
 
그 다음엔 enum에 지정하고자 하는 타입의 이름을 대문자로 입력한다.
 
 
(타입스크립트에는 여러 사용자지정 타입이 있는데, 
그 중 하나이기 때문에 대문자로 시작하는 것이다)
 
enum Role
 
 
 
 
 
그 옆에는 중괄호 쌍을 입력하고 세미콜론을 입력한다. 
 
 
 
enum Role {} ;

 

 

enum Role {ADMIN, READ_ONLY, AUTHOR}

const person = {
  name: "jenner",
  age: 20,
  hobbies: ["Sports", "Cooking"],
  role: Role.ADMIN
}

if (person.role === Role.AUTHOR){
  console.log("is author");
}

 

이 모든 작업은 라벨을 숫자로 할당하게 해주는 enum으로 수행했다는 점이 중요하다. 

이것을 tsc app.ts 명령어로 컴파일해보면, 

 

아래와 같이 코드가 변경되는 것을 볼 수 있다. 

 

 

var Role;
(function (Role) {
    Role[Role["ADMIN"] = 0] = "ADMIN";
    Role[Role["READ_ONLY"] = 1] = "READ_ONLY";
    Role[Role["AUTHOR"] = 2] = "AUTHOR";
})(Role || (Role = {}));
var person = {
    name: "jenner",
    age: 20,
    hobbies: ["Sports", "Cooking"],
    role: Role.ADMIN
};
if (person.role === Role.AUTHOR) {
    console.log("is author");
}

이러한 복잡한 코드를 enum을 사용하여 타입스크립트에서는 위와 같이 간단하게 사용할 수 있게 되는 것이다. 

 

 

 

Role의 ADMIN 식별자 위에 마우스 커서를 가져다 대면, 

아래와 같이 나오게 된다.

(enum member) Role.ADMIN = 0

 

 

 

필요에 따라 숫자를 모든 식별자에 

값으로 할당할 수 있다. 

 

 

enum Role {
  ADMIN =5,
  READ_ONLY,
  AUTHOR,
}

이런식으로 첫 번째 식별자에 숫자 5를 할당하면

순서대로 그 다음 식별자에는 6, 그다음은 7로 할당된다. 

 

 

또한 임의의 숫자를 모든 식별자에 

고유한 값으로 할당할 수도 있다. 

 

 

enum Role {
  ADMIN =5,
  READ_ONLY= 10,
  AUTHOR =100,
}

 

 

 

 

텍스트도 할당이 가능하다.

텍스트만 할당하기도, 혼합하기도 가능하다. 

 

 

enum Role {
  ADMIN = "ADMIN",
  READ_ONLY= 10,
  AUTHOR =100,
}

 

 

왜 enum 타입이 쓰이는가? 

 

 

https://medium.com/@seungha_kim_IT/typescript-enum%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0-3b3ccd8e5552

 

TypeScript enum을 사용하는 이유

(본 글은 TypeScript 입문자 중 enum 기능이 있는 다른 언어를 사용해 본 경험이 없는 분들을 위해 쓰여졌습니다. 예제 코드를 TypeScript playground에 붙여 넣고, 마우스 포인터를 변수 위에 둬서 변수의

medium.com

 

 

위의 글을 간단하게 정리해보자면, 

 

 

 

어떤 서비스를 제공할 때

서비스에서 지원할 수 있는 타입은

사전에 한정되어있는 경우가 많다. (ex: 지원할 수 있는 언어)

 

만일 그 타입을 지원할 수 없는 다른 것으로 실수로 정했을 경우,

에러가 나도록 하여야 할 것이다.

그래야 사전에 코드상의 에러를 방지할 수 있을 것이다. 

 

어떠한 상수에 할당할 변수 (타입 등)을 한정시킨다면 

범위를 좁혀나갈 수 있을 것이다.

또한 실제적인 타입의 이름이 길다면 

그것을 가리키는 변수를 지정하여 

가독성을 높일 수 있게 되는 것이다. 

 

그러므로 enum 타입을 사용하는 것인데, 

typescript에서는 enum 타입을 사용하면

사실 실수로 다른 타입을 지정하여도 

오류가 나지 않는 경우가 있기 때문에 

enum타입보다는 리터럴 타입과 union타입을 함께 사용하는 것이 좋다.