[typescript] switch문에서의 다양한 데이터 타입의 비교 방법

TypeScript에서 switch 문을 사용하여 다양한 데이터 타입을 비교하는 방법에 대해 알아보겠습니다. switch 문은 특정 조건에 따라 다른 동작을 수행할 수 있도록 선택할 수 있게 해주는 구문입니다. 그런데 JavaScript와 TypeScript에서 switch 문을 사용할 때 데이터 타입 비교에 주의를 기울여야 합니다.

숫자와 문자열 비교

switch 문에서 숫자나 문자열을 비교할 때는 === (일치 연산자)를 사용하여 정확한 타입과 값이 일치하는지 확인해야 합니다. TypeScript는 타입과 값이 일치하지 않으면 컴파일러 오류를 발생시키므로 안전하게 비교할 수 있습니다.

let numOrString: number | string = "hello";

switch (numOrString) {
  case 1:
    console.log("숫자 1입니다.");
    break;
  case "hello":
    console.log("문자열 'hello'입니다.");
    break;
  default:
    let check: never = numOrString;
}

위의 예제에서 numOrString 변수는 숫자나 문자열을 가질 수 있습니다. switch 문에서 숫자 1과 문자열 ‘hello’을 각각 비교하여 해당하는 동작을 수행하고 있습니다.

객체 비교

객체를 비교할 때는 일치 연산자인 ===를 사용하여 참조값이 일치하는지 확인해야 합니다. 예를 들어, 다음과 같이 객체의 속성값에 따라 switch 문을 사용할 수 있습니다.

type Shape = { kind: "circle"; radius: number } | { kind: "square"; sideLength: number };

function getArea(shape: Shape): number {
  switch (shape.kind) {
    case "circle":
      return Math.PI * shape.radius ** 2;
    case "square":
      return shape.sideLength ** 2;
    default:
      let check: never = shape;
  }
}

위의 예제에서 Shape 타입은 circle 또는 square라는 속성을 가진 객체를 가질 수 있습니다. switch 문에서는 kind 속성에 따라 해당하는 동작을 수행하고 있습니다.

enum 비교

enum 타입을 사용하여 switch 문에서 열거형 값을 비교할 수도 있습니다. 예를 들어, 다음과 같이 enum을 정의하고 사용할 수 있습니다.

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

function move(direction: Direction): void {
  switch (direction) {
    case Direction.Up:
      console.log("위쪽으로 이동");
      break;
    case Direction.Down:
      console.log("아래쪽으로 이동");
      break;
    case Direction.Left:
      console.log("왼쪽으로 이동");
      break;
    case Direction.Right:
      console.log("오른쪽으로 이동");
      break;
    default:
      let check: never = direction;
  }
}

위의 예제에서 Direction enum을 사용하여 switch 문에서 각각의 방향에 따라 이동 동작을 수행하고 있습니다.

이와 같이 TypeScript에서 switch 문을 사용하여 다양한 데이터 타입을 비교하고 해당하는 동작을 수행할 수 있습니다. 이는 코드의 가독성을 높이고 안전한 타입 체크를 할 수 있는 장점을 가지고 있습니다.

이상으로 TypeScript에서 switch 문을 다양한 데이터 타입과 함께 사용하는 방법에 대해 알아보았습니다.

참고 문헌: TypeScript 공식 문서