이넘(enum)이란, 상수 값들의 집합을 말한다.
상수를 활용하여 특정 값에 의미를 부여한다.
function getDinnerPrice() {
return 10000 + 2000;
}
위 코드에서 10000과 2000이 어떤 걸 가리키는지 알 수 없다.
function getDinnerPrice() {
const RICE = 10000;
const COKE = 2000;
return RICE + COKE;
}
상수를 사용하여 값에 의미를 부여하면 코드의 가독성이 높아진다.
상수란?
- 변하지 않는 고정 값
- 특정 값이 어떤 의미를 갖는지 알려주는 역할
이넘(enum)이란?
// 이넘 선언
enum ShoesBrand {
Nike, // 0
Adidas, // 1
NewBalance // 2
}
// 사용하기
var myShoes = ShoesBrand.Nike;
var yourShoes = ShoesBrand.NewBalance;
객체.속성
식으로 조회 가능 🙋♀️ 중요
- 이넘은 각 속성 순서대로 자체 숫자 값을 갖는다. (기본 타입이 숫자 타입)
- 예: 위의 myShoes에는 0, yourShoes에는 1 대입
enum Direction {
Up, // 0
Down, // 1
Left, // 2
Right // 3
}
양방향으로 사용 가능
- 숫자 값을
객체.속성명
으로 가져오기- 또는
객체[숫자]
형태로 해당 값 가져오기- 예시
Direction.Up = 0; Direction[0] = 'Up';
enum Direction {
Up = 'Up',
Down = 'Down',
Left = 'Left',
Right = 'Right'
}
enum Answer {
Yes = 'Yes',
No = 1
}
~.length
와 같은 문자열 길이도 속성으로 가능enum Authorization {
User, // 0
Admin, // 1
SuperAdmin = User + Admin, // 0 + 1 = 1
God = "abc".length // 3
}
const enum logLevel {
Debug = 'Debug',
Info = 'Info',
Error = 'Error'
}
=> 즉, 컴파일되는 양의 차이
enum logLevel {
Debug = 'Debug',
Info = 'Info',
Error = 'Error'
}
// 컴파일
"use strict";
var logLevel;
(function (logLevel) {
logLevel["Debug"] = "Debug";
logLevel["Info"] = "Info";
logLevel["Error"] = "Error";
})(logLevel || (logLvel = {}));
const enum logLevel {
Debug = 'Debug',
Info = 'Info',
Error = 'Error'
}
var appLevel = logLevel.Error // 변수에 할당
// 컴파일 결과
// 객체 생성 없이 변수에 이넘 값 바로 할당
"use strict";
var appLevel = "Error"
다양한 속성 값(연산 값, length 값 등)은 부여할 수 없음
=> 항상 일정한 타입으로 속성 값 지정해야
(하지만 혼합 형태의 이넘은 잘 쓰이지 않으니 단점이라 하기엔(?))