175일차 - Enums

김민찬·2021년 10월 30일
0

취업으로의 여정

목록 보기
180/196
post-thumbnail

About Enums

TypeScript에는 JavaScript에는 없는 Enums라는 Type이 있다.
서칭해본 결과 다른 프로그래밍 언어에서는 일부 존재하는 Type이다. (Java, C# 등)

Enums는 열거형으로 명명된 값의 집합을 이루는 자료형이다.
TypeScript에서는 숫자형과 문자형 두 가지 Enums가 존재한다.

Numeric Enums(숫자 열거형)

enum이라는 키워드를 사용해서 열거형을 정의할 수 있다.

enum Nums {
  First,
  Second,
  Third,
  Fourth
}

console.log(Nums.First); // 0
console.log(Nums.Second); // 1
console.log(Nums.Third); // 2
console.log(Nums.Fourth); // 3

Nums 별도의 값을 넣지 않으면 숫자형 Enum으로 취급하고 처음 값을 0으로 그리고 순서대로 1씩 증가시킨다.

그럼 아래와 같이 초기값을 넣어주면 어떻게 될까?
초깃값 다음부터 1씩 증가한다.

enum Nums {
  First = 5,
  Second,
  Third,
  Fourth
}

console.log(Nums.First); // 5
console.log(Nums.Second); // 6
console.log(Nums.Third); // 7
console.log(Nums.Fourth); // 8

궁금증과 실험

Numeric Enums를 공부하다가 궁금한 두 가지가 생겨서 직접 실험해 봤다.

Q1. 만약 초기와 중간만 값을 지정하면 어떻게 될까?

A. 초기 값 부터 1씩 증가한다음 지정한 값을 만나면 그 다음부터는 지정한 값부터 1씩 증가한다. 설명으로는 부족할 수 있으니 아래 예제를 참고하면 이해가 쉬울 것이다.

enum Nums {
  A = 2,
  B,
  C = 100,
  D
}

console.log(Nums.A); // 2
console.log(Nums.B); // 3
console.log(Nums.C); // 100
console.log(Nums.D); // 101

여기서 아래와 같은 궁금한 내용이 추가로 생겼다.

Q2. 그럼 초깃값을 지정하지 말고, 중간부터 지정하면 어떻게 될까?

A. 예상한 대로 초깃값은 0으로 순서대로 1씩 증가 시키다가, 중간에 지정한 값을 만나면 그 다음부터는 지정한 값부터 1씩 증가한다. 이것 역시 예제를 준비했다.

enum Nums {
  A,
  B,
  C = 100,
  D
}

console.log(Nums.A); // 0
console.log(Nums.B); // 1
console.log(Nums.C); // 100
console.log(Nums.D); // 101

String Enums(문자열 열거형)

Numeric Enums와 다르게 자동증가하는 기능이 없다.

enum Nums {
  A = 'a',
  B = 'b',
  C = 'c',
  D = 'd'
}

console.log(Nums.A); // 'a'
console.log(Nums.B); // 'b'
console.log(Nums.C); // 'c'
console.log(Nums.D); // 'd'

Reverse Mapping(역 매핑)

숫자 열거형에만 존재하는 기능이고 문자열 열거형에는 존재하지 않는다.
enum키(key)값(value)를 얻을 수 있고, 반대로 값(value)으로 키(key)를 얻을 수도 있다.

enum Num {
  A
}

let a = Num.A; // 키로 값을 획득하기
let keyName = Num[a]; // 값으로 키를 획득하기

참고자료

TypeScript - Enums
캡틴판교 - TypeScript

profile
두려움 없이

0개의 댓글