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)을 사용할 때는 기존 코드에 영향을 주지 않도록 주의해야 합니다. 에러 처리 로직을 추가하여 런타임 중에 문제를 감지하고 처리할 수 있도록 하는 것이 좋습니다.
참고 문헌:
- TypeScript Handbook: https://www.typescriptlang.org/docs/handbook/enums.html