[TypeScript] 이넘(Enum)

 

이넘(Enum)

이넘(Enum)은 특정 값을 고정하는 또 다른 독립된 자료형이라 할 수 있다.

타입스크립트의 튜플 타입과 비교하자면, 튜플은 특정 타입이나 값을 고정하는 배열이라면, 이넘은 특정 값을 고정하는 것이다. 즉 특정 값들의 집합을 의미하는 자료형이다.

 

이넘은 Java, C와 같은 다른 프로그래밍 언어를 다뤄본 적이 있는 사람들에게는 익숙할 수 있다.

타입스크립트에서 이넘은 문자형 이넘과 숫자형 이넘을 지원한다.

 

// enum 타입 선언
enum Coffee {
  Starbucks,
  Ediya,
  Twosome,
}

let latte: Coffee;	// enum 타입 변수 선언
latte = Coffee.Starbucks;	// enum 타입 변수에 enum 값 할당
latte = "Good";	// 오류 발생

let tea: Coffee.Twosome;	// enum 값을 타입 자체로도 사용 가능

위 코드처럼 enum 타입을 선언하고 enum 타입 변수를 선언하여 값을 할당하여 사용할 수 있다.

그러나 이때 enum 타입 변수에는 반드시 설정된 enum 값만 올 수 있다.

해당 예제에서는 설정된 enum 값 Starbucks, Ediya, Twosome 만 올 수 있는 것이다.

이외의 값이 오면 오류가 발생할 것이다.

 

 

 

 

 

숫자형 이넘

기본적으로 enum에 아무 값도 할당하지 않으면 마치 배열 인덱스와 같이 0부터 시작하여 멤버들의 번호를 매기는 특징을 가진다.

enum Rainbow {
  Red,	// 0
  Orange,	// 1
  Yellow,	// 2
  Green,	// 3
  Blue,		// 4
  Purple,	// 5
}

하지만  enum의 멤버 번호가 반드시 0부터 시작할 필요는 없다.

이때 우리는 수동으로 값을 명시할 수 있으며 이를 숫자형 이넘을 선언하는 방식이라 할 수 있다.

 

enum Rainbow {
  Red,	// 0
  Orange = 20,	// 20
  Yellow,	// 21
  Green,	// 22
  Blue,		// 23
  Purple,	// 24
}

위 예제처럼 수동으로 값을 명시할 수 있으며, 값을 변경한 부분부터 다시 1씩 증가하여 값이 할당될 것이다.

 

 

 

 

< 숫자형 이넘 활용 >

앞선 숫자형 이넘을 선언해 아래와 같이 활용할 수 있다.

enum Response {
  No = 0,
  Yes = 1,
}

function respond(user: string, message: Response): void{
  ...
}

respond("guswjd", Response.Yes);

 

 

 

 

문자형 이넘

이넘은 숫자 번호 뿐 아니라 문자열 값으로 초기화할 수 있다.

문자형 이넘은 이넘 값 전부 다 특정 문자나 다른 이넘 값으로 초기화해줘야 한다.

 

enum Coffee {
  Starbucks = 'STARBUCKS',
  Ediya = 'EDIYA',
  Twosome = 'TWOSOME',
}

 

 

 

 

리버스 매핑(Reverse Mapping)

타입스크립트에서 숫자형 이넘에서 리버스 매핑이 존재한다.

문자형 이넘에서는 리버스 매핑이 존재하지 않는다.

리버스 매핑이란 이넘의 키로 값을 얻거나 값으로 키를 얻을 수 있는 것을 말한다.

 

enum Enum {
  A
}

let a = Enum.A;	// 키로 값 얻기
let keyName = Enum[a];	// 값으로 키 얻기

 

 

 

 

객체와 이넘 차이

객체(Object) 이넘(Enum)
코드 내에서 새로운 속성을 자유롭게 추가 가능 선언할 때 이후 변경 불가능
속성 값은 JS가 허용하는 모든 타입이 올 수 있음 속성 값으로 문자열, 숫자만 가능

 

반응형