타입스크립트 강의를 듣다가 enum에 대해서 까먹어버렸다

TypeScript의 enum문법에 대해서 공부하고 기록합니다.

enum이 뭔가?

타입스크립트에서 enum은 여러 개의 값을 하나의 이름으로 그룹화할 수 있는 강력한 기능입니다.

이를 통해 코드의 가독성을 높이고, 특정 값만 사용할 수 있도록 제한할 수 있습니다.


쉽게 말해, enum은 이름이 붙은 상수들의 집합입니다. 이 집합에 있는 각 값은 숫자 또는 문자열로 표현될 수 있습니다.

enum Color {
  Red = "RED",
  Green = "GREEN",
  Blue = "BLUE",
}

let myColor: Color = Color.Green;
console.log(myColor); // 출력: 'GREEN'

위 코드에서 Color라는 enum을 선언했습니다.

이제 myColor 변수가 Color 타입을 가지며, 이 변수에는 Color.Red, Color.Green, Color.Blue 중 하나의 값만 할당될 수 있습니다.

이는 타입스크립트가 이 변수에 대해 엄격한 타입 검사를 하도록 도와줍니다.


enum의 동작 방식

타입스크립트의 enum은 두 가지 방식으로 동작합니다: 숫자 enum과 문자열 enum입니다.

  1. 숫자 enum 숫자 enum은 기본적으로 0부터 시작하여 값이 자동으로 증가합니다. 아래의 예제를 통해 살펴보겠습니다.
enum Direction {
  North,
  South,
  East,
  West,
}

let myDirection: Direction = Direction.North;
console.log(myDirection); // 출력: 0

myDirection = Direction.East;
console.log(myDirection); // 출력: 2

Direction.North는 0, Direction.South는 1, Direction.East는 2, Direction.West는 3으로 자동으로 할당됩니다.

Direction.North를 출력하면 0이 나오는 이유가 여기에 있습니다.


  1. 문자열 enum 문자열 enum은 각 값에 고유한 문자열을 할당하는 방식입니다.
enum Status {
  Active = "ACTIVE",
  Inactive = "INACTIVE",
  Pending = "PENDING",
}

let currentStatus: Status = Status.Active;
console.log(currentStatus); // 출력: 'ACTIVE'

문자열 enum은 각 값이 독립적인 문자열로 관리되므로, 숫자 enum과 달리 자동 증가하지 않습니다. 대신, 모든 값을 명시적으로 지정해야 합니다.


enum의 장점

이제 enum을 사용하는 이유를 생각해보겠습니다.

  1. 타입 안정성: enum을 사용하면 유효하지 않은 값을 사용할 가능성을 줄일 수 있습니다. 예를 들어, 함수에 잘못된 값을 전달하는 실수를 방지할 수 있습니다.

  2. 가독성: 코드의 가독성을 높이는 데 도움이 됩니다. 각 상수에 의미 있는 이름을 부여할 수 있어, 코드를 읽는 사람에게 더 명확한 의미를 전달할 수 있습니다.

  3. 자동 완성 지원: enum을 사용하면 개발 도구(VS Code 등)에서 자동 완성 기능을 제공하여, 실수를 줄이고 개발 속도를 높일 수 있습니다.


enum의 단점

하지만, enum에도 몇 가지 단점이 있습니다.

  • 코드 복잡성: 너무 많은 enum을 사용하면 코드가 복잡해질 수 있습니다. 특히, 작은 프로젝트에서는 오히려 코드 가독성을 해칠 수 있습니다.

  • 유니언 타입과 비교: 타입스크립트의 유니언 타입은 enum과 유사한 기능을 제공하지만, 더 가볍고 단순합니다. 간단한 경우에는 enum 대신 유니언 타입을 사용하는 것이 더 나을 수 있습니다.

    type Direction = "North" | "South" | "East" | "West";
    


추가적으로 알아두면 좋은 enum 기능

  1. const enum

const enum은 성능 최적화를 위해 사용됩니다. 컴파일 시점에 실제 값으로 대체되어, 런타임에 불필요한 코드가 생성되지 않습니다.

const enum Direction {
  North,
  South,
  East,
  West,
}

let myDirection: Direction = Direction.North;
console.log(myDirection); // 출력: 0


  1. 리버스 매핑 (Reverse Mapping)

타입스크립트의 숫자 enum은 값을 통해 원래의 이름을 역으로 조회할 수 있습니다.

enum Direction {
  North,
  South,
  East,
  West,
}

console.log(Direction[0]); // 출력: 'North'

하지만 문자열 enum은 리버스 매핑이 지원되지 않으니 주의해야 합니다.


결론

타입스크립트의 enum은 강력한 기능을 제공하여 특정 값들을 그룹화하고, 코드의 가독성과 타입 안전성을 높이는 데 기여합니다.

그러나 무분별한 사용은 코드 복잡성을 높일 수 있으므로, 필요할 때 적절하게 사용하는 것이 중요합니다.


enum을 통해 안전하고 명확한 코드를 작성하고, 실수를 줄이는 데 도움을 받을 수 있을 것입니다.

앞으로 프로젝트에서 enum을 적절히 활용하여 더 견고한 코드를 작성해 나가길 기대합니다.