[TypeScript] TypeScript의 Enum타입에 대해 알아보자

2024. 11. 19. 23:33· TypeScript
목차
  1. 1. enum이란?
  2. 2. enum의 기본 사용법
  3. 3. enum 활용 예제
  4. 문자열 리터럴 vs Enum 
  5. Enum의 장점
  6.  
  7. Enum의 단점

1. enum이란?

enum은 열거형 타입으로, 이름이 있는 상수들의 집합을 정의합니다. 이는 문자열이나 숫자 값을 명확하게 관리하고, 코드에서 의미를 부여하는 데 사용됩니다.

 

2. enum의 기본 사용법

enum은 숫자 기반 열거형과 문자열 기반 열거형으로 나뉩니다.

1 숫자 열거형 (Numeric Enum)

숫자 열거형은 자동으로 0부터 시작하여 값이 1씩 증가합니다.

enum Direction {
  Up,    // 0
  Down,  // 1
  Left,  // 2
  Right, // 3
}

console.log(Direction.Up);    // 출력: 0
console.log(Direction.Down);  // 출력: 1
console.log(Direction[2]);    // 출력: "Left" (역방향 매핑)

 

2. 문자열 열거형 (String Enum)

문자열 열거형은 값으로 고정된 문자열을 가지며, 숫자 기반 열거형처럼 자동 증가하지 않습니다.

enum Direction {
  Up = "UP",
  Down = "DOWN",
  Left = "LEFT",
  Right = "RIGHT",
}

console.log(Direction.Up);    // 출력: "UP"
console.log(Direction["Down"]); // 출력: "DOWN"

 

 

3. enum 활용 예제

1. 상태 관리

enum은 애플리케이션 상태를 관리하거나 HTTP 상태 코드, 로딩 상태 등을 표현할 때 유용합니다.

enum Status {
  Pending = "PENDING",
  InProgress = "IN_PROGRESS",
  Completed = "COMPLETED",
  Failed = "FAILED",
}

function checkStatus(status: Status) {
  switch (status) {
    case Status.Pending:
      console.log("작업이 대기 중입니다.");
      break;
    case Status.InProgress:
      console.log("작업이 진행 중입니다.");
      break;
    case Status.Completed:
      console.log("작업이 완료되었습니다!");
      break;
    case Status.Failed:
      console.log("작업이 실패했습니다.");
      break;
  }
}

checkStatus(Status.InProgress); // 출력: "작업이 진행 중입니다."

 

2. 사용자 권한 관리

enum은 특정 권한 레벨을 나타낼 때 유용합니다. 

enum UserRole {
  Admin = "ADMIN",
  Editor = "EDITOR",
  Viewer = "VIEWER",
}

function getPermissions(role: UserRole): string[] {
  switch (role) {
    case UserRole.Admin:
      return ["read", "write", "delete"];
    case UserRole.Editor:
      return ["read", "write"];
    case UserRole.Viewer:
      return ["read"];
    default:
      return [];
  }
}

console.log(getPermissions(UserRole.Editor)); // 출력: ["read", "write"]

 

3. 폼 데이터 처리

enum은 폼 데이터의 옵션을 타입 안정성 있게 관리하는 데 유용합니다.

enum Gender {
  Male = "male",
  Female = "female",
  Other = "other",
}

interface UserForm {
  name: string;
  age: number;
  gender: Gender;
}

const user: UserForm = {
  name: "홍길동",
  age: 30,
  gender: Gender.Male,
};

console.log(user); // 출력: { name: '홍길동', age: 30, gender: 'male' }

 

 


문자열 리터럴 vs Enum 

 

특징 문자열 리터럴 열거형
가독성 단순하지만 문맥 부족 명확하고 의도 전달 가능
타입 안정성 제공됨, 하지만 문자열 입력 시 실수 가능 강력한 타입 안정성, 허용된 값만 사용 가능
확장성 어렵고 관리가 힘듦 새로운 값 추가 및 관리가 용이
런타임 오버헤드 없음 객체로 변환되어 약간의 오버헤드 발생
IDE 자동 완성 제한적 강력한 자동 완성과 탐색 기능 지원

 

 

Enum의 장점

1. 타입 안정성

  • enum은 정의된 값만 허용하므로, 잘못된 값(오타, 부적절한 문자열 등)이 입력될 위험을 방지합니다.
  • 컴파일러가 허용되지 않은 값을 즉시 감지하여 오류를 발생시키므로, 런타임 오류를 줄일 수 있습니다.

2. 의미 전달이 명확

  • enum은 값에 이름을 부여하기 때문에 코드의 가독성과 의미 전달이 명확합니다.
  • 특정 값을 표현하는 데 있어, 단순 문자열이나 숫자보다 더 많은 문맥 정보를 제공합니다.

3. 코드의 응집력

  • 관련된 값들을 한 곳에 묶어 관리할 수 있어, 값이 분산되는 것을 방지합니다.
  • 프로젝트에서 특정 도메인에만 관련된 상수를 체계적으로 관리할 수 있습니다.

4. IDE 지원

  • enum을 사용하면 코드 작성 시 자동 완성 기능과 타입 추론을 통해 생산성을 높일 수 있습니다.
  • enum 값 이름을 기억하지 못해도 IDE가 제안해 주기 때문에 실수를 줄일 수 있습니다.

 

Enum의 단점

1. 런타임 오버헤드

  • enum은 컴파일 시 자바스크립트로 변환되며, 일반적으로 즉시 실행 함수(IIFE) 형태로 출력됩니다.
  • 이는 런타임에서 추가적인 메모리와 성능 비용을 발생시킬 수 있으며, 불필요한 코드 크기를 증가시킬 수 있습니다.

2. 트리쉐이킹(Dead Code Elimination)에 대한 문제

  • 일반적인 enum은 객체로 변환되므로, 일부 번들러(예: Webpack, Rollup)에서 사용되지 않는 enum 값이 제거되지 않을 수 있습니다.
  • 트리쉐이킹(Dead Code Elimination)을 제대로 활용하려면 const enum 또는 as const를 사용하여 불필요한 코드 제거를 유도해야 합니다.

 

'TypeScript' 카테고리의 다른 글

[TypeScript] TypeScript 제네릭 타입, 기본 개념부터 예제까지  (0) 2024.11.21
[TypeScript] TypeScript 타입 조합에 대해 알아보자  (0) 2024.11.20
TypeScript의 Array타입에 대해 알아보자 (+ Tuple타입)  (0) 2024.11.11
TypeScript의 any 와 unknown을 제대로 사용하는 법  (1) 2024.11.08
객체 타입을 선언할 때 type ? interface ? 어떤 것을 사용해야하나  (3) 2024.11.07
  1. 1. enum이란?
  2. 2. enum의 기본 사용법
  3. 3. enum 활용 예제
  4. 문자열 리터럴 vs Enum 
  5. Enum의 장점
  6.  
  7. Enum의 단점
'TypeScript' 카테고리의 다른 글
  • [TypeScript] TypeScript 제네릭 타입, 기본 개념부터 예제까지
  • [TypeScript] TypeScript 타입 조합에 대해 알아보자
  • TypeScript의 Array타입에 대해 알아보자 (+ Tuple타입)
  • TypeScript의 any 와 unknown을 제대로 사용하는 법
배트리버
배트리버
🐾 사람 좋아, 개발 좋아 🐾 궁금한 건 끝까지 파고들고, 배운 건 즐겁게 나누는 개발자의 놀이터
배트리버
리트리버의 개발 놀이터
배트리버
전체
오늘
어제
  • 분류 전체보기
    • 네트워크
    • 기초 셋팅
    • 오늘의 일기
    • 리액트
    • 코테 준비
      • 프로그래머스
      • 백준
    • 코드스테이츠44기 프론트엔드
    • HTML-CSS-JavaScript
      • HTML
      • CSS
      • JavaScript
    • 자료구조&알고리즘
    • TypeScript
    • Git
    • Tip
    • 프로젝트
    • Next.js
    • 트러블슈팅

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코드스테이츠
  • 리액트
  • 자바스크립트 비동기
  • 코드스테이츠 44기 프론트엔드
  • 리액트쿼리
  • 리액트 상태관리
  • 코드스테이츠 회고록
  • 코드스테이츠 44기
  • BFS
  • 코드스테이츠 프론트엔드
  • 프로그래머스
  • 프로젝트 회고
  • 티스토리챌린지
  • 코드스테이츠 블로깅
  • KPT 회고
  • 탄스택쿼리
  • 오블완
  • 자바스크립트
  • 타입스크립트문법
  • 네트워크

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
배트리버
[TypeScript] TypeScript의 Enum타입에 대해 알아보자
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.