[typescript] 타입 가드 예제

JavaScript나 TypeScript에서 작업을 할 때, 런타임 중에 어떤 타입이나 어떤 객체를 체크해야 하는 경우, 타입 가드 (type guard) 를 사용할 수 있습니다. 타입 가드는 코드 상에서 어떤 타입인지를 확인하고 해당 타입에 맞게 동작할 수 있도록 도와줍니다.

typeof 타입 가드

typeof 타입 가드는 TypeScript에서 가장 널리 사용되는 타입 가드 중 하나입니다.

function printValue(value: string | number) {
  if (typeof value === "string") {
    console.log(`값은 문자열입니다: ${value.toUpperCase()}`);
  } else {
    console.log(`값은 숫자입니다: ${value.toFixed(2)}`);
  }
}

printValue("hello"); // 출력: 값은 문자열입니다: HELLO
printValue(123.456); // 출력: 값은 숫자입니다: 123.46

이 예제에서 typeof를 사용하여 해당 값이 문자열인지 확인한 후, 문자열인 경우에는 대문자로 출력하고, 숫자인 경우에는 소수점 2자리로 출력하는 함수를 정의했습니다.

instanceof 타입 가드

클래스의 타입을 확인하기 위해 instanceof 타입 가드를 사용할 수도 있습니다.

class Animal {
  move() {
    console.log("동물이 움직입니다.");
  }
}

class Horse extends Animal {
  gallop() {
    console.log("말이 속력을 내며 이동합니다.");
  }
}

function moveAnimal(animal: Animal) {
  if (animal instanceof Horse) {
    animal.gallop();
  } else {
    animal.move();
  }
}

moveAnimal(new Horse()); // 출력: 말이 속력을 내며 이동합니다.
moveAnimal(new Animal()); // 출력: 동물이 움직입니다.

이 예제에서 instanceof를 사용하여 AnimalHorse 클래스의 인스턴스를 체크하여 해당하는 동작을 수행하도록 했습니다.

타입 가드를 사용하면 코드의 가독성과 안정성을 높일 수 있으며, 잘 활용하면 런타임 중 타입 관련 오류를 줄일 수 있습니다.

결론

타입 가드는 TypeScript에서 강력한 도구로서, 런타임 중에 타입을 체크하고 그에 맞는 동작을 수행할 수 있도록 도와줍니다. typeofinstanceof를 비롯한 다양한 타입 가드를 적절히 활용하여 안정적이고 확장 가능한 코드를 작성할 수 있습니다.

참고 문헌: