[Typescript] enum이란 무엇인가?

2025. 3. 22. 23:38·Typescript

❓ 정의

- enum은 열거형 타입의 줄임말로, 상수 값들의 집합을 정의하는 데 사용

    -> 코드의 가독성을 높이고, 특정 값들만 허용되는 상황에서 오류를 줄일 수 있음!

- 자바스크립트는 enum 타입을 직접적으로 제공하지 않지만, 타입스크립트에서는 enum 키워드를 통해 공식적으로 지원

- 숫자와 문자열 모두 사용가능하며, 숫자 열거형은 첫 번째 값부터 자동으로 증가

▶ 기본 사용 예시

// 숫자 enum
enum CardinalDirections {
  North,
  East,
  South,
  West
}

console.log(CardinalDirections.North); // 0
console.log(CardinalDirections.West); // 3
// 문자열 enum
enum CardinalDirections {
  North = "North",
  East = "East",
  South = "South",
  West = "West"
}

console.log(CardinalDirections.North); // "North"

❗ 사용이유

✅ 가독성

- 코드가 단순해지고 열거형 의도를 명확히 전달 가능

✅ 오류 방지(타입 안정성)

- 잘못된 값 입력을 방지하고 일관성 유지

✅ 유지보수성

- 코드 수정 시 열거형 값만 변경하면 되므로 관리가 용이


💥 주의

1️⃣ 번들 크기 증가

- enum은 런타임 객체로 변환되므로 트랜스파일된 코드가 커질 수 있음! -> 대규모 프로젝트시 주의

2️⃣ 혼합 타입의 혼란

- 숫자와 문자열 값을 섞어 사용하는 enum은 혼란을 초래할 수 있음

enum MixedEnum {
    NumericValue = 1,
    StringValue = "String"
}

💠 예시

1️⃣ HTTP 상태 코드 관리

enum HttpStatus {
    OK = 200,
    NotFound = 404,
    InternalServerError = 500
}

function handleResponse(status: HttpStatus): void {
    if (status === HttpStatus.OK) {
        console.log("Request succeeded!");
    } else if (status === HttpStatus.NotFound) {
        console.log("Resource not found.");
    } else {
        console.log("Server error occurred.");
    }
}

2️⃣ 사용자 역할 관리

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

function getPermissions(role: UserRole): void {
    switch (role) {
        case UserRole.Admin:
            console.log("Full access granted.");
            break;
        case UserRole.Editor:
            console.log("Edit access granted.");
            break;
        case UserRole.Viewer:
            console.log("View-only access granted.");
            break;
    }
}

✅ enum과 const enum

특징 enum const enum
컴파일 결과 자바스크립트 객체로 변환되어 런타임에도 존재 컴파일 시 완전히 제거되고, 참조된 값만 인라인 처리
역방향 매핑 지원 숫자 기반 enum의 경우, 역방향 매핑(값으로 이름 찾기)이 가능 역방향 매핑이 불가능
코드 크기 객체 생성 코드가 추가되므로 번들 크기가 커질 수 있음 객체 생성 없이 값만 인라인 처리되므로 번들 크기를 줄일 수 있음
계산된 멤버 지원 계산된 멤버(computed member) 지원 계산된 멤버를 지원하지 않으며, 상수 값만 사용할 수 있음
반복(iteration) for...in 루프를 통해 열거형 멤버를 반복(iterate)할 수 있음 반복(iteration)이 불가능하며, 이를 시도하면 컴파일 에러 발생

타입스크립트에서 enum과 const enum은 열거형 타입을 정의하는 데 사용되지만, 두 가지는 컴파일 결과와 사용 방식에서 중요한 차이점이 있다.

 ❔ 언제 어떤걸 사용하는게 좋을까?

✅ enum이 필요한 경우
- 런타임에서도 열거형 객체가 필요하거나, 디버깅 중 열거형 이름과 값을 확인해야 할 때
- 역방향 매핑(값으로 이름 찾기)이 필요한 경우

✅ const enum이 필요한 경우
- 열거형이 단순히 상수 값의 집합으로 사용되고, 런타임 객체가 필요하지 않을 때
- 코드 크기와 성능 최적화가 중요한 경우

 

 

 

 

 

 

 

 

저작자표시 비영리 변경금지 (새창열림)

'Typescript' 카테고리의 다른 글

[Typescript] interface와 type  (1) 2025.04.17
[Typescript] 제네릭(Generic)  (0) 2025.03.24
[Typescript] 원시 타입과 객체 타입  (0) 2025.03.22
'Typescript' 카테고리의 다른 글
  • [Typescript] interface와 type
  • [Typescript] 제네릭(Generic)
  • [Typescript] 원시 타입과 객체 타입
버그잡는고양이발
버그잡는고양이발
주니어 개발자입니다!
  • 버그잡는고양이발
    지극히평범한개발블로그
    버그잡는고양이발
  • 전체
    오늘
    어제
    • 분류 전체보기 (382)
      • React (16)
      • Next.js (5)
      • Javascript (5)
      • Typescript (4)
      • Node.js (2)
      • Cs (16)
      • 트러블 슈팅 (5)
      • Html (1)
      • Css (3)
      • Django (0)
      • vue (0)
      • Java (2)
      • Python (0)
      • 독서 (1)
      • 기타 (3)
      • 백준 (192)
      • swea (31)
      • 프로그래머스 (30)
      • 이코테 (4)
      • 99클럽 코테 스터디 (30)
      • ssafy (31)
      • IT기사 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 인기 글

  • 태그

    Til
    코딩테스트준비
    99클럽
    항해99
    개발자취업
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
버그잡는고양이발
[Typescript] enum이란 무엇인가?
상단으로

티스토리툴바