[typescript] 타입 가드와 타입 체크의 차이점

타입스크립트에서는 코드를 작성할 때 타입을 안전하게 유지하기 위해 타입 가드와 타입 체크라는 두 가지 주요 개념을 사용합니다. 이 두 가지 개념은 유사해 보이지만, 실제로는 서로 다른 기능을 가지고 있습니다. 이번 글에서는 타입 가드와 타입 체크의 차이점을 알아보겠습니다.

1. 타입 가드 (Type Guard)

타입 가드는 런타임에서의 값에 대한 타입을 검사하여 타입을 추론하거나 확정하는 기능입니다. 주로 typeof, instanceof, in 등의 연산자를 활용하여 타입을 확인하고, 그 결과를 통해 해당 값의 타입을 좁혀나갑니다.

예를 들어, 다음과 같이 instanceof를 사용하여 타입을 가드하는 코드를 작성할 수 있습니다.

class Animal {
  name: string;
  constructor(name: string) {
    this.name = name;
  }
}

class Dog extends Animal {
  breed: string;
  constructor(name: string, breed: string) {
    super(name);
    this.breed = breed;
  }
}

function isDog(animal: Animal): animal is Dog {
  return animal instanceof Dog;
}

위 코드에서 isDog 함수는 animalDog 타입인지 여부를 판별하고, 해당 결과를 animal is Dog 형태로 반환합니다.

2. 타입 체크 (Type Check)

타입 체크는 컴파일 타임에 타입을 확인하고, 해당 타입에 맞게 코드를 작성하는 것을 의미합니다. 타입 체크는 주로 조건문이나 제네릭을 활용하여 코드를 작성하며, 컴파일러가 코드를 검사하여 타입 안정성을 확보합니다.

예를 들어, 다음과 같이 조건문과 제네릭을 사용하여 타입을 체크하는 코드를 작성할 수 있습니다.

function isNumber(value: any): value is number {
  return typeof value === 'number';
}

위 코드에서 isNumber 함수는 valuenumber 타입인지 여부를 체크하며, 해당 결과를 value is number 형태로 반환합니다.

결론

따라서, 타입 가드와 타입 체크는 코드의 안정성을 유지하고, 타입 관련 오류를 사전에 방지하는 데 중요한 역할을 합니다.

참고 문헌: