[typescript] 열거형(Enum) 멤버의 값 변경에 따른 에러 처리하기

TypeScript에서는 열거형(Enum)을 사용하여 명명된 상수 집합을 정의할 수 있습니다. 이는 코드를 더 읽기 쉽고 유지보수하기 쉽게 만들어줍니다. 그러나 때로는 프로젝트 진행 중에 열거형 멤버의 값이 변경될 수 있습니다. 이때 기존 코드에서의 값 변경에 따른 영향을 방지하기 위해 에러 처리 로직을 추가하는 것이 바람직합니다.

열거형(Enum)이란?

열거형(Enum)은 관련된 항목들을 묶어서 정의할 수 있는 TypeScript의 기능입니다. 일반적으로 고정된 값의 집합을 표현할 때 사용됩니다.

다음은 열거형의 간단한 예제입니다.

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

이렇게 정의된 열거형은 Direction.Up, Direction.Down, Direction.Left, Direction.Right의 값을 가집니다.

값을 변경할 때의 문제점

만약에 이미 사용 중인 열거형의 값이 변경된다면, 이는 예기치 않은 동작을 유발할 수 있습니다. 예를 들어, Direction.Up이 0이었는데 갑자기 1로 변경된다면? 기존 코드에서 Direction.Up을 사용하고 있었다면 문제가 발생할 수 있습니다.

에러 처리 방법

이러한 문제를 해결하기 위해 위험한 상황을 감지하고자 하는 경우 never 타입을 이용하여 런타임 에러를 발생시킬 수 있습니다.

다음은 Direction 열거형의 Up 멤버 값이 변경될 경우 에러를 발생시키는 예제입니다.

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

function assertNever(value: never): never {
  throw new Error(`Unexpected value: ${value}`);
}

function move(direction: Direction) {
  switch (direction) {
    case Direction.Up:
      // up 로직 처리
      break;
    // 다른 case들
    default:
      assertNever(direction); // 이 코드는 런타임 에러를 발생시킵니다.
  }
}

위 예제에서 assertNever 함수는 never 타입을 파라미터로 받아서 에러를 발생시킵니다. move 함수의 switch문에서 default에 해당되는 경우에 assertNever를 호출하여 값의 변경을 감지하고 런타임 에러를 발생시킵니다.

결론

값이 변경될 수 있는 열거형(Enum)을 사용할 때는 기존 코드에 영향을 주지 않도록 주의해야 합니다. 에러 처리 로직을 추가하여 런타임 중에 문제를 감지하고 처리할 수 있도록 하는 것이 좋습니다.


참고 문헌: