이넘(enum)은 특정 값의 집합을 의미하는 데이터 타입입니다.
이넘으로 이름이 있는 상수들의 집합을 정의할 수 있습니다.
여기서 상수란 변하지 않는 고정된 값을 말합니다. 이넘으로 변하지 않는 값들의 집합을 정의할 수 있습니다.
enum Animation {
Titans,
Haikyuu,
Gintama
}
enum
키워드와 함께 여러 개의 상수(Titans, Haikyuu, Gintama)를 하나의 단위(Animation)으로 묶었습니다.const titan = Animation.Titans;
.
접근자를 사용하여 속성 이름을 붙여 접근할 수 있습니다.이넘은 속성이 어떤 값을 가지고 있느냐에 따라 구분할 수 있습니다.
이넘의 속성은 기본적으로 숫자 값을 가집니다.
이넘의 속성에 값을 지정하지 않으면 기본적으로 숫자 0부터 시작하여 순서대로 1씩 증가된 값을 갖습니다.
enum Animation {
Titans, // 0
Haikyuu, // 1
Gintama // 2
}
console.log(Animation.Haikyuu); // 1
이넘 속성의 초기값을 변경할 수 있습니다.
enum Animation {
Titans = 10, // 10
Haikyuu, // 11
Gintama // 12
}
console.log(Animation.Haikyuu); // 11
1씩 자동으로 증가하는 기능은 왜 필요할까?
자동으로 증가하는 기능은 각 속성의 값 자체에는 큰 의미가 없고, 각 값이 해당 이넘의 다른 속성의 값들과 구별돼야 하는 경우에 유용합니다.
이넘 속성의 값으로 문자열을 할당할 수 있습니다.
enum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHT"
}
이넘에 숫자와 문자열을 섞어서 선언할 수 있습니다.
enum Answer {
Yes = 'Yes',
No = 1
이넘 값은 일관되게 숫자나 문자열 둘 중 하나의 데이터 타입으로 관리하는 것이 좋기 때문에, 이렇게 사용하지 않는 것을 권장합니다.
이넘의 속성 값으로 상수뿐만 아니라 다양한 형태로 값을 할당할 수 있습니다.
enum FileAccess {
None,
Read = 1 << 1,
Write = 1 << 2,
ReadWrite = Read | Write,
G = "123".length,
}
+
, -
, ~
를 사용한 경우+
, -
, *
, /
, %
, <<
, >>
, >>>
, &
, |
, ^
의 피연산자로 사용할 경우NaN
이거나 Infinity
이면 컴파일 시점에 오류가 발생합니다.const 이넘이란 이넘을 선언할 때 앞에 const를 붙인 이넘을 의미합니다.
const enum Direction {
Up,
Down,
Left,
Right
}
// 컴파일 결과
"use strict";
var Direction;
(function (Direction) {
Direction["Up"] = "Up";
Direction["Down"] = "Down";
Direction["Left"] = "Left";
Direction["Right"] = "Right";
{)(Direction || (Direction = {}));
const enum Direction {
Up,
Down,
Left,
Right
}
"use strict";
이넘은 비슷한 성격이나 같은 범주에 있는 상수를 하나로 묶어 더 큰 단위의 상수로 만들 때 사용합니다.
참고
📖 쉽게 시작하는 타입스크립트
🔗https://www.typescriptlang.org/ko/docs/handbook/enums.html#%EC%88%AB%EC%9E%90-%EC%97%B4%EA%B1%B0%ED%98%95-numeric-enums