본문 바로가기

TypeScript

[TypeScript] enum 과 object literal 비교

enum

 

- enum 은 열거형 데이터 타입

- 상수의 그룹화를 위해서는 enum이 아주 좋은 타입이 됨.

 

enum 의 장점

- 코드의 가독성을 높이고 명확한 상수값 정의 가능

- 컴파일 시에 자동으로 숫자값으로 매핑되어 따로 값을 할당할 필요가 없음 (특정 숫자 값으로 매핑되어야 한다면 그것은 직접 할당)

 

enum UserRole {
  ADMIN = "ADMIN",
  EDITOR = "EDITOR",
  USER = "USER",
}

enum UserLevel {
  NOT_OPERATOR, // 0
  OPERATOR // 1
}

function checkPermission(userRole: UserRole, userLevel: UserLevel): void {
  if (userLevel === UserLevel.NOT_OPERATOR) {
    console.log('당신은 일반 사용자 레벨이에요');
  } else {
    console.log('당신은 운영자 레벨이군요');
  } 

  if (userRole === UserRole.ADMIN) {
    console.log("당신은 어드민이군요");
  } else if (userRole === UserRole.EDITOR) {
    console.log("당신은 에디터에요");
  } else {
    console.log("당신은 사용자군요");
  }
}

const userRole: UserRole = UserRole.EDITOR;
const userLevel: UserLevel = UserLevel.NOT_OPERATOR;
checkPermission(userRole, userLevel);

object literal

 

일단 육안으로는 enum과 매우 흡사하나 enum 키워드 대신 const 혹은 let 키워드를 사용한다.

객체 리터럴은 키 + 값의 쌍 (pair) 로 구성된 객체를 정의하는 방식

 

const obj = {
  a: [1,2,3],
  b: 'b',
  c: 4
}

 

object literal 의 장점

 

- enum 의 각각은 상수였기 때문에 number, string 타입의 값만 대입할 수 있었다.

- 하지만 객체 리터럴에서는 어떤 타입의 값도 대입을 할 수 있음

- 객체 리터럴은 다양한 데이터 타입을 지원하며 유연한 구조를 가질 수 있다.

- 또한, 코드 내에서 사용하기 전 값이 할당되어야 하므로, 런타임 에러를 방지한다.


 

enum 을 쓰면 좋은경우

 

- enum은 간단한 상수 값을 그룹화 해서 관리할 때 적합

- enum은 상수 값이기 때문에 각 멤버의 값이 변하면 안된다는 조건이 있음

 

객체 리터럴을 쓰면 좋은 경우

 

- 객체 리터럴은 멤버의 값이나 데이터 타입을 마음대로 변경 가능

- 복잡한 구조와 다양한 데이터 타입을 사용해야 할 때

'TypeScript' 카테고리의 다른 글

[TypeScript] 프로젝트 세팅  (0) 2023.07.26
[TypeScript] 유틸리티 타입  (2) 2023.07.26
[TypeScript] Any, unknown, union  (0) 2023.07.25
[TypeScript] const, readonly  (0) 2023.07.25
[TypeScript] 기본 타입 익히기  (0) 2023.07.25