개발 일기

Enums ? 본문

컴퓨터 언어/Typescript

Enums ?

이건욱

Enum은 Javascript에 대한 확장이 아니며 Typescript에 몇가지 특징중에 하나 입니다.

 

Enum을 사용하면 개발자가 정의한 상수이름을 지정할수가 있습니다.

Typescript은 숫자와 문자열을 지원합니다.

 

Numeric enums

만약에 다른 언어로부터 왔다면 enum keyword는 되게 친숙할것 입니다.

enum Direction {
  Up = 1,
  Down,
  Left,
  Right
}

다음과 같이 데이터가 있을때 초기값을 1로써 자동적으로 1 씩 증가 하게 됩니다.

따라서 아래에서는 Up = 1 , Down = 2 , Left = 3 , Right = 4 입니다.

 

만약에 자동적으로 1씩 증가가 아닌 직접적으로 결정을 하고 싶은 경우에는 다음과 같이 사용이 가능합니다.

enum Response {
  No = 0,
  Yes = 1
}

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

respond("Princess Caroline", Response.Yes);

다음과 같은 형식을 불가능 합니다. 초기화가 안되어 있는 값이 먼저 나와야 합니다 아니면 똑같이 값을 설정을 해야합니다.

enum E {
  A = getSomeValue(),
  B // Error! Enum member must have initializer.
}

 

String enums

문자열 enums 에서는 다음과 같이 초기화 값을 가지고 있어야 합니다.

enum Direction {
  Up = "UP",
  Down = "DOWN",
  Left = "LEFT",
  Right = "RIGHT"
}

 

다음과 같이 혼합도 가능하지만 추천하고 싶지는 않습니다.

enum BooleanLikeHeterogeneousEnum {
  No = 0,
  Yes = "YES"
}

다음과 같은 값은 값에 대해서 처음에 초기화도 없기 때문에 값이 X = 0 , Y = 1 , Z = 2로 나옵니다.

// All enum members in 'E1' and 'E2' are constant.

enum E1 {
  X,
  Y,
  Z
}

 

다음과 같이 이러한 여러 방법도 가능합니다.

enum FileAccess {
  // constant members
  None,
  Read = 1 << 1,
  Write = 1 << 2,
  ReadWrite = Read | Write,
  // computed member
  G = "123".length
}

console.log(FileAccess.None , FileAccess.Read , FileAccess.Write , FileAccess.ReadWrite , FileAccess.G)
// 0,  2,  4,  6,  3 

 

다음과 같이 반대로 mapping도 가능합니다.

enum Enum {
  A
}
let a = Enum.A;
let nameOfA = Enum[a]; // "A"

'컴퓨터 언어 > Typescript' 카테고리의 다른 글

Generics ?  (0) 2020.05.14
Unions and Intersection Types ?  (0) 2020.05.10
Literal Types ?  (0) 2020.05.03
Function ?  (0) 2020.05.03
Class ?  (0) 2020.05.01
Comments