[typescript] 타입 가드와 타입 단언의 차이점

타입스크립트에서는 타입 가드(Type Guard)타입 단언(Type Assertion)이라는 두 가지 주요 기능을 사용하여 코드 내에서 타입을 명시하거나 확정할 수 있습니다. 이 두 가지 기능은 타입스크립트의 유연성과 강력한 타입 검사 기능을 제공합니다.

타입 가드

타입 가드(Type Guard)는 런타임 시에 변수의 타입을 검사하여 해당 변수를 특정 타입으로 좁히는 역할을 합니다. 주로 typeof, instanceof, in 등의 연산자를 사용하여 타입 가드를 구현할 수 있습니다. 예를 들어:

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

if (isNumber(myVar)) {
  // myVar는 number 타입으로 좁혀졌습니다.
}

타입 단언

타입 단언(Type Assertion)은 개발자가 컴파일러에게 “내가 이 변수의 타입을 정확히 알고 있다”고 알려주는 역할을 합니다. 주로 <Type> 문법 또는 as Type 키워드를 사용하여 변수의 타입을 명시합니다. 예를 들어:

let someValue: unknown = "this is a string";
let strLength: number = (someValue as string).length;

차이점

타입 가드는 런타임 환경에서 변수의 타입을 실제로 검사하여 코드를 실행하는 동안 타입을 좁히는 역할을 합니다. 반면에, 타입 단언은 가상적인 개발 시점에서 타입을 컴파일러에게 알려주는 역할을 합니다. 둘의 관건은 런타임 vs 컴파일 타임에 있으며, 이를 통해 코드의 안정성과 유연성을 보장합니다.

따라서, 타입스크립트 코드를 작성할 때는 타입 가드타입 단언을 적절히 사용하여 코드의 안전성을 확보하고, 런타임 에러를 줄일 수 있습니다.

결론

타입 가드와 타입 단언은 모두 타입스크립트의 강력한 타입 시스템을 활용하여 코드를 안전하고 가독성 있게 유지하는 데 도움을 줍니다. 올바르게 사용할 경우, 코드의 신뢰성을 보다 쉽게 유지할 수 있습니다.

더 많은 정보를 원하실 경우, TypeScript 공식 문서를 참고하시기 바랍니다.

TypeScript 공식 문서