본문 바로가기
language/typescript

🎯 Enum vs Const Enum – 차이점과 실무에서의 선택 기준

by 죄니안죄니 2025. 4. 27.

🎯 Enum vs Const Enum – 차이점과 실무에서의 선택 기준

타입스크립트에서 열거형(enum)은 상수를 깔끔하게 선언할 수 있는 방법입니다.
그런데 비슷한 문법인 const enum도 존재합니다. 둘은 어떤 차이가 있고, 실무에서는 무엇을 선택해야 할까요?


① 기본 Enum

enum Direction {
  Up,
  Down,
  Left,
  Right
}

console.log(Direction.Up); // 0

기본 enum런타임에도 존재하는 객체로 변환됩니다. 따라서 다음과 같은 양방향 매핑도 가능합니다:


Direction[0] === 'Up'; // true
Direction['Up'] === 0; // true

② Const Enum

const enum Direction {
  Up,
  Down,
  Left,
  Right
}

const d = Direction.Left;

const enum런타임에는 완전히 사라지고 숫자 값만 남습니다. → 결과적으로 훨씬 가볍고 빠르게 실행됩니다.


// 컴파일 결과 예시
var d = 2;

③ 차이 비교

항목 enum const enum
런타임 존재 ✅ 있음 (객체로 컴파일됨) ❌ 없음 (값만 인라인됨)
양방향 접근 가능 불가능
번들 크기 조금 더 큼 작음 (최적화됨)
tsconfig 설정 필요 없음 preserveConstEnums: false
사용 제한 없음 라이브러리에서 export 불가

④ 실무 선택 가이드

  • 공용 라이브러리, SDK, 외부 API 타입 정의 → 일반 enum 사용
  • 성능이 중요하고 내부 전용 enumconst enum 사용
  • Webpack, Babel 사용 시 const enum은 문제가 생길 수 있음 → 일반 enum 선호

⑤ const enum 주의사항

// tsconfig.json
{
  "compilerOptions": {
    "preserveConstEnums": false // 기본값은 false (const enum 최적화됨)
  }
}

그러나 const enum라이브러리로 export할 수 없습니다. 바벨(Babel) 트랜스파일을 쓰는 경우 컴파일 에러가 발생하기도 합니다.


📘 마무리 요약

  • enum은 런타임 객체로 존재하며 유연하고 직관적
  • const enum은 더 빠르고 가볍지만 제약이 있음
  • 실무에선 팀 컨벤션 + 트랜스파일러 환경 고려해서 결정

📘 다음 글 예고

👉 Mapped Type & Template Literal Type 실전 예제에서 동적으로 타입을 만드는 기술을 배워봅니다!

 

댓글