- 이넘이란 특정 값의 집합을 의미하는 데이터 타입이다. 상수 집합이라고도 표현한다.
function getDinnerPrice() {
return 10000 + 2000;
}
// 코드만으론 어떤 가격인지 알 수 없기 때문에 상수로 변경할 수 있습니다.
function getDinnerPrice() {
const RICE = 10000;
const COKE = 2000;
return RICE + COKE;
}
- 이러한 여러 개의 상수를 하나의 단위로 묶으면 이넘이 된다. 상수는 단순히 고정된 값을 저장하는 것뿐만 아니라 이 값이 어떤 의미를 갖는지 알려줌으로써 가독성을 높이는 장점이 있다.
enum Direction {
Up, // 0
Down, // 1
Left, // 2
Right, // 3
}
console.log(Direction.Left); // 2
- 이넘의 첫 번째 속성인 Up의 값은 0이고, 두 번째 속성인 Down 값은 1이다. 0부터 차례로 할당이 되는 이유는 타입스크립트의 내부 규칙 때문이다.
Console.log(Direction.Up); // 0;
Console.log(Direction[0]); // "Up";
- 이넘의 속성과 값이 거꾸로 연결되어 할당되는 것을 리버스 매핑(reverse mapping)이라고 한다.
- 문자형 이넘이란 이넘의 속성 값에 문자열을 연결한 이넘을 의미한다.
enum Direction {
Up = "Up",
Down = "Down",
Left = "Left",
Right = "Right",
}
console.log(Direction.Left); // 'Left'
- 이와 같이 아까의 예제와는 다르게 숫자가 아닌 문자열이 출력된다. 보통 이넘은 숫자로 관리하기보다 문자열로 관리하고 속성 이름과 값을 동일한 문자열로 관리하는 것도 일반적이다.
enum Answer {
Yes = "Yes",
No = 1,
}
- 이렇게 숫자와 문자열을 혼합해서 사용해도 문제는 없지만 둘중의 하나의 데이터 타입으로 관리하는 것이 좋다.
- 이넘의 속성 값은 고정 값 뿐만 아니라 다양한 형태로 값을 할당할 수 있다.
enum Answer {
User, // 0
Admin, // 1
SuperAdmin = User + Admin, // 1
God = "abc".length, // 3
}
- User와 Admin의 속성 값은 0과 1이고 SuperAdmin은 둘을 더한 1이다. God은 length를 사용해 속성을 지정해 3이다. 잘 사용되지 않음
- const 이넘이란 이넘을 선언할 때 앞에 const를 붙인 이넘을 말한다.
enum logLevel {
Debug = "Debug",
Info = "Info",
Error = "Error",
}
"use strict";
var logLevel;
(function (logLevel) {
logLevel["Debug"] = "Debug";
logLevel["Info"] = "Info";
logLevel["Error"] = "Error";
})(logLevel || (logLevel = {}));
var appLevel = logLevel.Error;
- const를 이넘 앞에 붙이는 이유는 컴파일 결과물의 코드 양을 줄이기 위해서 이다. const를 사용하지 않고 이넘코드를 자바스크립트로 변환시키면 속성 이름과 값을 연결해주는 객체를 생성한다. 이넘 예제
// const 이넘
const enum logLevel {
Debug = 'Debug',
Info = 'Info',
Error = 'Error',
}
let appLevel = logLevel.Debug;
console.log(appLevel); // Debug
"use strict";
var appLevel = "Error"; /* logLevel.Error */
- const를 사용해 이넘을 작성할 경우 객체를 생성하지 않고 변수에 바로 문자열이 할당되게 된다. 이넘 예제
- 이때는 다양한 속성값으로 할당하면 안되고 항상 속성에 고정값을 넣어줘야 한다.