Skip to content

Latest commit

 

History

History
131 lines (99 loc) · 3.88 KB

이넘.md

File metadata and controls

131 lines (99 loc) · 3.88 KB

이넘(enum)

1. 이넘이란 ?

  • 이넘이란 특정 값의 집합을 의미하는 데이터 타입이다. 상수 집합이라고도 표현한다.
function getDinnerPrice() {
  return 10000 + 2000;
}
// 코드만으론 어떤 가격인지 알 수 없기 때문에 상수로 변경할 수 있습니다.

function getDinnerPrice() {
  const RICE = 10000;
  const COKE = 2000;
  return RICE + COKE;
}
  • 이러한 여러 개의 상수를 하나의 단위로 묶으면 이넘이 된다. 상수는 단순히 고정된 값을 저장하는 것뿐만 아니라 이 값이 어떤 의미를 갖는지 알려줌으로써 가독성을 높이는 장점이 있다.

2. 숫자형 이넘

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)이라고 한다.

3. 문자형 이넘

  • 문자형 이넘이란 이넘의 속성 값에 문자열을 연결한 이넘을 의미한다.
enum Direction {
  Up = "Up",
  Down = "Down",
  Left = "Left",
  Right = "Right",
}
console.log(Direction.Left); // 'Left'
  • 이와 같이 아까의 예제와는 다르게 숫자가 아닌 문자열이 출력된다. 보통 이넘은 숫자로 관리하기보다 문자열로 관리하고 속성 이름과 값을 동일한 문자열로 관리하는 것도 일반적이다.

4. 알아 두면 좋은 이넘의 특징

1) 혼합 이넘

enum Answer {
  Yes = "Yes",
  No = 1,
}
  • 이렇게 숫자와 문자열을 혼합해서 사용해도 문제는 없지만 둘중의 하나의 데이터 타입으로 관리하는 것이 좋다.

2) 다양한 이넘 속성 값 정의 방식

  • 이넘의 속성 값은 고정 값 뿐만 아니라 다양한 형태로 값을 할당할 수 있다.
enum Answer {
  User, // 0
  Admin, // 1
  SuperAdmin = User + Admin, // 1
  God = "abc".length, // 3
}
  • User와 Admin의 속성 값은 0과 1이고 SuperAdmin은 둘을 더한 1이다. God은 length를 사용해 속성을 지정해 3이다. 잘 사용되지 않음

3) const 이넘

  • 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를 사용해 이넘을 작성할 경우 객체를 생성하지 않고 변수에 바로 문자열이 할당되게 된다. 이넘 예제
  • 이때는 다양한 속성값으로 할당하면 안되고 항상 속성에 고정값을 넣어줘야 한다.