[typescript] 동적 타입 언어와 정적 타입 언어의 타입 가드와 타입 단언 처리 비교

동적으로 타입을 결정하는 언어에서는 일반적으로 변수의 타입을 런타임 중에 결정합니다. 이는 코드 실행 중에 변수의 타입이 변할 수 있음을 의미합니다. 반면 정적 타입 언어에서는 변수의 타입을 컴파일할 때 결정하고 런타임 중에는 변하지 않습니다.

TypeScript는 정적 타입 언어로, 컴파일 시점에서 변수의 타입을 결정합니다. 이러한 특성으로 TypeScript는 개발자가 프로그램의 런타임 동작을 예측하고 에러를 사전에 방지할 수 있도록 도와줍니다.

타입 가드(Type Guards)

타입 가드는 런타임에 변수의 타입을 체크하고, 타입이 확실하게 될 경우 해당 타입으로의 변환을 도와주는 기능입니다.

function isNumber(x: any): x is number {
    return typeof x === "number";
}

let value: any = 5;
if (isNumber(value)) {
    // value는 여기서 number 타입으로 유추됩니다.
    console.log(value.toFixed(2));
}

타입 단언(Type Assertion)

타입 단언은 개발자가 컴파일러에게 “나는 변수가 특정 타입이라고 확신한다”고 알려주는 기능입니다.

let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
// 또는
let strLength: number = (<string>someValue).length;

동적 타입 언어에서처럼 정적 타입 언어에서도 타입 가드와 타입 단언을 사용하여 변수의 타입을 더욱 명확하게 다룰 수 있습니다.

이와 같이 TypeScript는 정적 타입 언어의 장점을 살려, 더욱 안정적이고 안전한 코드 작성을 도와줍니다.

참고문헌: TypeScript 공식 문서