본문 바로가기
카테고리 없음

TypeScript 열거형(Enum) 제대로 이해하기 – 실무 예제로 배우기 (10강)

by mystory55776 2025. 5. 15.

TypeScript 열거형(Enum) 제대로 이해하기 – 실무 예제로 배우기

TypeScript의 **열거형(Enum)**은 코드에서 **상수 값을 관리**할 때 매우 유용한 기능입니다. 열거형은 숫자나 문자열로 구성된 상수 집합을 정의할 수 있게 해 주며, 코드의 가독성 및 유지보수성을 크게 향상시킵니다. 이번 강의에서는 TypeScript의 열거형(Enum)을 실무 예제와 함께 마스터할 수 있도록 깊이 있게 설명하겠습니다.

열거형(Enum)란?

**열거형(Enum)**은 상수 값들을 **그룹화**하여 정의할 수 있는 특별한 타입입니다. 즉, 서로 관련이 있는 상수들을 묶어서 **가독성**과 **관리 용이성**을 높이는 데 사용됩니다. TypeScript에서는 숫자(Enum)와 문자열(Enum) 두 가지 형태의 열거형을 지원합니다.

숫자형 열거형(Enum)

**숫자형 열거형**은 열거형의 각 값이 자동으로 숫자로 매핑되는 형태입니다. TypeScript에서 열거형을 정의하면 첫 번째 값은 기본적으로 **0부터 시작**하고, 이후 값들은 이전 값에 1을 더한 값으로 자동 설정됩니다.

enum Direction {
  Up,
  Down,
  Left,
  Right
}

let move: Direction = Direction.Up;
console.log(move); // 0

위 예제에서 Direction 열거형은 **Up**, **Down**, **Left**, **Right**라는 네 가지 방향을 정의합니다. **Direction.Up**의 값은 **0**이고, **Direction.Down**은 **1**, **Direction.Left**는 **2**, **Direction.Right**는 **3**으로 자동 할당됩니다.

문자열형 열거형(Enum)

**문자열형 열거형**은 각 값에 명시적으로 문자열을 할당하여 사용할 수 있습니다. 이 방법은 숫자형 열거형에서의 자동 증가 방식이 아닌, **명확한 문자열 값을 제공**하여 코드를 더욱 이해하기 쉽게 만들어 줍니다.

enum Status {
  Active = "ACTIVE",
  Inactive = "INACTIVE",
  Pending = "PENDING"
}

let userStatus: Status = Status.Active;
console.log(userStatus); // "ACTIVE"

위 예제에서 **Status** 열거형은 각 상태를 **"ACTIVE"**, **"INACTIVE"**, **"PENDING"**으로 명시적으로 설정합니다. 따라서 **Status.Active**는 **"ACTIVE"**라는 문자열 값을 갖게 됩니다.

열거형(Enum)의 주요 특징

열거형은 여러 가지 유용한 기능을 제공합니다. TypeScript에서 열거형을 사용하면 **타입 안전성**을 보장하고, 코드의 가독성을 높일 수 있습니다. 열거형의 주요 특징은 다음과 같습니다:

  • 명시적인 값 할당: 열거형의 각 값에 명시적으로 숫자나 문자열을 할당할 수 있습니다.
  • 타입 안전성: 열거형을 사용하면 타입이 잘못 설정되는 오류를 예방할 수 있습니다.
  • 자동 증가 기능: 숫자형 열거형에서는 첫 번째 값 이후 모든 값이 자동으로 증가합니다.
  • 조합 가능: 숫자형 열거형을 비트 플래그로 사용할 수도 있습니다.

열거형(Enum) 활용 예제

열거형은 실무에서 **상수 값들을 그룹화**하고, 코드의 가독성을 높이는 데 매우 유용합니다. 다음은 실무에서 자주 사용되는 열거형 활용 예제를 소개합니다.

상태 관리에 열거형 사용

enum TaskStatus {
  NotStarted = "NOT_STARTED",
  InProgress = "IN_PROGRESS",
  Completed = "COMPLETED"
}

function getTaskStatus(status: TaskStatus): string {
  switch (status) {
    case TaskStatus.NotStarted:
      return "Task has not started yet.";
    case TaskStatus.InProgress:
      return "Task is in progress.";
    case TaskStatus.Completed:
      return "Task is completed.";
    default:
      return "Unknown status.";
  }
}

console.log(getTaskStatus(TaskStatus.InProgress)); // Task is in progress.

위 예제에서는 **작업의 상태(TaskStatus)**를 열거형으로 정의하고, 이를 바탕으로 상태별 메시지를 출력하는 함수 getTaskStatus를 작성하였습니다. 이처럼 열거형을 활용하면 상태 값이 변경되어도 코드 수정이 쉽고, **타입 안전성**도 보장할 수 있습니다.

비트 플래그로 열거형 사용하기

열거형은 **비트 플래그(Bitwise Flags)**로도 사용할 수 있습니다. 비트 플래그를 사용하면 여러 개의 값을 **조합**하여 하나의 숫자로 표현할 수 있습니다.

enum Permissions {
  Read = 1 << 0,  // 0001
  Write = 1 << 1, // 0010
  Execute = 1 << 2, // 0100
  Delete = 1 << 3  // 1000
}

let userPermissions: Permissions = Permissions.Read | Permissions.Write;
console.log(userPermissions); // 3 (0001 | 0010 = 0011)

위 예제에서는 **비트 연산자**를 사용하여 **읽기(Read)**, **쓰기(Write)**, **실행(Execute)**, **삭제(Delete)** 권한을 나타내는 값을 정의하였습니다. 이렇게 비트 플래그로 열거형을 사용하면 여러 권한을 하나의 숫자 값으로 **조합**하고, 이를 통해 효율적인 권한 관리가 가능합니다.

열거형(Enum)의 확장과 활용

열거형은 다른 타입과 결합하여 **확장**할 수 있습니다. 예를 들어, 열거형을 **객체**나 **배열**과 결합하여 더욱 복잡한 데이터 구조를 다룰 수 있습니다. TypeScript는 이처럼 다양한 방식으로 열거형을 활용할 수 있도록 도와줍니다.

배열과 객체에서 열거형 사용

enum Days {
  Monday = "MON",
  Tuesday = "TUE",
  Wednesday = "WED",
  Thursday = "THU",
  Friday = "FRI",
  Saturday = "SAT",
  Sunday = "SUN"
}

const workDays: Days[] = [Days.Monday, Days.Tuesday, Days.Wednesday, Days.Thursday, Days.Friday];
const weekendDays: Days[] = [Days.Saturday, Days.Sunday];

console.log(workDays); // ["MON", "TUE", "WED", "THU", "FRI"]

위 예제에서는 **요일(Days)**을 열거형으로 정의하고, **주중과 주말**을 배열로 관리합니다. 이처럼 열거형을 배열이나 객체와 결합하여 사용할 수 있습니다.

열거형(Enum) 선택 가이드

열거형은 언제 사용할지에 대해 고민할 때, 다음과 같은 상황에서 유용하게 활용될 수 있습니다:

  • 상수 값의 그룹화: 관련 있는 상수 값들을 그룹화하여 관리하고 싶을 때.
  • 상태 값 관리: 여러 상태 값 중에서 하나를 선택해야 할 때.
  • 비트 플래그: 여러 개의 값을 **비트 연산**을 사용하여 하나의 값으로 조합해야 할 때.

마무리: TypeScript 열거형의 중요성

열거형(Enum)은 TypeScript에서 **타입 안전성**을 보장하고, 코드의 가독성을 높이는 중요한 도구입니다. 숫자형과 문자열형 열거형을 적절하게 활용하면 코드의 유지보수성이 좋아지고, 상수 값들을 효율적으로 관리할 수 있습니다. 비트 플래그나 배열, 객체와 결합하여 더 복잡한 데이터 구조를 다룰 때도 유용합니다.

열거형을 잘 활용하여 더 안전하고 효율적인 코드를 작성해보세요!

다음 강의에서는 TypeScript에서 제네릭(Generic)을 활용하여 재사용 가능한 타입을 정의하는 방법을 배워보겠습니다.