❓ 정의
- 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 |