Enum이란
enum은 특정 값의 집합을 이름 붙여 정의하는 방법입니다. 기본적으로 숫자 값을 사용하여 각 항목에 순차적인 숫자를 할당합니다. 이러한 기본 숫자 enum 외에도 문자열, 혼합형으로 사용할 수 있으며, 컴파일시 JavaScript 객체로 변환되어 실행됩니다.
숫자형 Enum
숫자형 enum은 기본적으로 첫 번째 항목이 0부터 시작하여 순차적으로 값을 증가시킵니다. 또한, 시작 값을 사용자가 직접 지정할 수도 있으며, 이후 항목은 자동으로 증가합니다.
enum OrderStatus {
Pending = 1,
Processing,
Shipped,
Delivered,
}
console.log(OrderStatus.Shipped);
// 출력: 3
console.log(OrderStatus[3]);
// 출력: Shipped
Pending을 1로 지정했기 때문에, 이후 값은 2,3,4로 자동 증가합니다. 숫자형 enum은 양방향 매핑을 지원해 값으로 이름(OrderStatus[3]처럼)을 찾을 수도 있습니다.
문자열형 Enum
문자열형 enum은 각 항목에 고유한 문자열 값을 부여합니다.
enum UserRole {
Admin = "ADMIN",
Editor = "EDITOR",
Viewer = "VIEWER",
}
const user = { name: "민수", role: UserRole.Editor };
console.log(`${user.name}의 역할: ${user.role}`);
// 출력: 민수의 역할: EDITOR
숫자형과 달리 양방향 매핑을 지원하지 않습니다. 하지만 직관적인 값 표현을 할 수 있습니다.
혼합형 Enum
숫자와 문자열 값을 혼합하여 사용할 수 있습니다. 그러나 코드의 일관성을 위해 가능한 한 피하는 것이 좋으며, 특별한 경우에만 사용됩니다.
enum Signal {
Off = 0,
On = "ACTIVE",
}
console.log(Signal.Off);
// 출력: 0
console.log(Signal.On);
// 출력: ACTIVE
계산된 enum
값을 동적으로 계산할 수 있도록 합니다. 이를 통해 보다 복잡한 로직에 따른 값을 enum으로 표현할 수 있습니다.
const getPriority = () => 10;
enum TaskPriority {
Low = 1,
Medium = getPriority(),
High = Medium * 2,
}
console.log(TaskPriority.Medium);
// 출력: 10
console.log(TaskPriority.High);
// 출력: 20
Enum 사용 시 주의점
- 숫자형은 간단하지만 암묵적 증가에 주의하고, 문자열형은 명확하지만 매핑이 제한됩니다.
- 단순히 상수 객체로 충분한 경우 `{ readonly key: value }`를 사용합니다.
'TypeScript' 카테고리의 다른 글
[TypeScript] any 타입 (1) | 2025.02.24 |
---|---|
[TypeScript] 튜플(Tuple): 다양한 타입을 하나로 관리하기 (0) | 2025.02.24 |
[TypeScript] 객체 지향 설계를 위한 클래스 (1) | 2025.02.24 |
[TypeScript] 인터페이스 설계 (0) | 2025.02.24 |
[TypeScript] null의 개념과 활용 (0) | 2025.02.24 |