타입스크립트의 열거형 타입 enum에 대해 예시 코드와 함께 살펴보도록 하겠습니다.
예시 1
const rati = {
name: "rati",
email: "rati@email.com",
age: 5,
auth: 0,
};
const merry = {
name: "merry",
email: "merry@email.com",
age: 3,
auth: 1,
};
변수 rati와 merry는 동일한 구조의 객체를 할당받고 있습니다. 할당받는 객체의 속성 중 auth에 집중해서 살펴보도록 하겠습니다.
변수 rati와 merry를 사용자라 가정하고 속성 auth의 값으로 사용자의 등급을 관리하고 있습니다. 예를 들어 0은 개발자, 1은 읽기 전용 사용자의 의미를 담고 있는 값입니다.
여기서 상황 하나를 더 가정해보도록 하겠습니다. 진행하는 프로젝트가 방대한 프로젝트이며, 위와 같이 auth를 통해 등급을 관리하는 프로젝트입니다. 이때 프로젝트가 오랜 기간 중단되어 해당 값이 무엇을 의미하는지 잘 기억이 나지 않는 상황이 발생했습니다.
이 경우 예시 2의 코드처럼 auth의 값을 모다 명확하게 알 수 있도록 작성해줄 수 있을 것입니다.
예시 2
const rati = {
name: "rati",
email: "rati@email.com",
age: 5,
auth: "ADMIN",
};
const merry = {
name: "merry",
email: "merry@email.com",
age: 3,
auth: "READ ONLY USER",
};
예시 2의 코드의 경우 예시 1에서 발생한 속성 auth 값이 무엇을 의미하는지 기억이 나지 않았던 문제에 대한 해결 방법이 될 수 있습니다.
0, 1처럼 명확하지 않은 숫자 대신 식별자 역할을 하는 문자 데이터의 값을 할당하는 것이 시간이 지나도 명확하게 알 수 있을 것입니다.
if(merry.auth === "READ_ONLY_USER"){
console.log("읽기 전용 유저")
}
예시 2처럼 속성 auth의 값을 문자열로 할당할 경우 나중에 조건문을 사용한 로직을 사용할 경우가 발생할 수 있는데, 문제는 auth에 할당한 값이 "READ ONLY USER"인지 "READ_ONLY_USER"인지 정확하게 기억해야 한다는 것입니다.
이 경우 예시 3의 방법으로 해당 문제를 해결할 수 있습니다.
예시 3
const ADMIN = 0;
const READ_ONLY_USER = 1;
const rati = {
name: "rati",
email: "rati@email.com",
age: 5,
auth: ADMIN,
};
const merry = {
name: "merry",
email: "merry@email.com",
age: 3,
auth: READ_ONLY_USER,
};
if (merry.auth === READ_ONLY_USER) {
console.log("읽기 전용 유저");
}
상수에 0, 1을 할당하고 상수명을 해당 숫자가 무엇을 의미하는지 명확하게 식별자 역할을 하는 이름으로 선언해준 뒤 해당 상수를 사용하여 속성 auth에 할당하고 조건문에서 사용하면 예시 1과 예시 2의 문제는 사라지게 될 것입니다.
하지만 예시 3의 경우에도 단점은 존재합니다.
auth의 속성이 number 타입으로 명시되었기 때문에 0, 1이 아닌 숫자를 속성 auth의 값으로 사용해도 문제가 되지 않습니다. 또한 auth의 값을 별도의 상수에 담아 관리해야 하는 단점이 발생하게 됩니다.
이러한 문제를 enum 타입을 사용하면 해결할 수 있습니다.
enum
enum Auth {
ADMIN,
READ_ONLY_USER,
}
const rati = {
name: "rati",
email: "rati@email.com",
age: 5,
auth: Auth.ADMIN,
};
const merry = {
name: "merry",
email: "merry@email.com",
age: 3,
auth: Auth.READ_ONLY_USER,
};
if (merry.auth === Auth.READ_ONLY_USER) {
console.log("읽기 전용 유저");
}
키워드 enum을 사용한 뒤 사용자 지정 이름(앞글자 대문자)으로 enum의 이름을 만들어 준 뒤 중괄호 안에서 ADMIN과 READ_ONLY_USER를 작성해 줍니다.
이렇게 만든 enum Auth를 사용하여 객체의 속성 auth의 값으로 사용하고 조건문에서도 동일하게 사용해 주었습니다.
예시 3번과 차이가 없어 보이지만 enum의 경우 첫 번째 라벨 ADMIN은 0의 값을 가지고 있고 두 번째 라벨인 READ_ONLY_USER은 1의 값을 가지고 있습니다.
즉, enum은 내부에 열거된 라벨의 순서대로 0부터 시작하는 값을 가집니다.
변수 rati의 경우 enum의 첫 번째 라벨인 ADMIN을 사용했으니 0이 되고, 변수 merry의 경우 enum의 두 번째 라벨을 사용했으니 1이 됩니다. 또한 조건문에서 enum의 두 번째 라벨을 사용했으니 속성 auth의 값이 1인지 확인하는 조건문이 됩니다.
이렇게 enum을 사용하여 예시 1, 2, 3보다 쉽게 식별자를 가진 값을 할당할 수 있었습니다.
enum 값 변경
enum Auth {
ADMIN = 5,
READ_ONLY_USER,
}
필요시 enum의 시작 숫자를 변경할 수 있습니다. 위의 경우 첫 번째 라벨에 5를 할당하고 있습니다.
이 경우 enum의 첫 번째 라벨 사용 시 5를 사용하는 것이 되고, 두 번째 라벨부터는 첫 번째 라벨을 기준으로 +1된 값을 사용하는 것이 됩니다.
enum Auth {
ADMIN = 5,
READ_ONLY_USER = 100,
}
또는 각 라벨의 숫자를 각각 지정하여 사용이 가능하며, 이 경우 지정한 값을 사용하는 것이 됩니다.
*숫자 대신 문자 할당도 가능합니다.
'TypeScript' 카테고리의 다른 글
union 타입과 intersection 타입 (0) | 2023.01.06 |
---|---|
인터페이스와 클래스 (0) | 2023.01.05 |
타입 스크립트 구성 옵션 (0) | 2023.01.03 |
타입 가져오기 / 내보내기 (0) | 2023.01.03 |
패키지의 타입 선언 (0) | 2023.01.03 |