[typescript] 타입 가드와 타입 단언의 성능 비교에서의 보안 측면 고려 사항

서론

TypeScript에서는 타입 가드타입 단언을 사용하여 변수의 타입을 보다 명확하게 지정할 수 있습니다. 이러한 기능들은 코드를 작성하고 유지하는 데 도움이 되지만, 어떤 방식이 보안 면에서 더 나은 선택인지 고려해야 합니다.

타입 가드

타입 가드는 실행 시간에도 타입 정보를 유지하는 방법으로, 타입 안정성을 보장합니다. 코드 실행 중에 타입 검사를 하므로, 런타임에 오류를 방지할 수 있습니다. 예를 들어, instanceof를 사용하여 객체의 타입을 확인할 수 있습니다.

function isFish(pet: Fish | Bird): pet is Fish {
    return (pet as Fish).swim !== undefined;
}
if (isFish(pet)) {
    pet.swim();
} else {
    pet.fly();
}

타입 단언

타입 단언은 컴파일러에게 “내가 타입을 더 잘 알고 있다”고 알려주는 것입니다. 이는 개발자가 타입을 명시적으로 캐스팅하는 것으로, 런타임에 타입을 검사하지 않으므로 특정 사례에서 보안 측면에서 취약할 수 있습니다.

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

성능 비교

보안 측면에서 타입 가드가 더 나은 선택일 수 있지만, 성능 측면에서는 타입 단언이 더 우수할 수 있습니다. 타입 가드는 런타임에 추가적인 검사를 수행하므로 성능에 약간의 영향을 미칠 수 있습니다. 반면, 타입 단언은 컴파일 시간에만 영향을 미치므로 실행 시간 성능에 영향을 미치지 않습니다.

결론

타입 가드와 타입 단언은 모두 유용한 도구이지만, 보안 측면과 성능 측면에서 각각의 장단점을 고려해야 합니다. 개발 상황에 따라 어떤 방식을 사용할지 결정해야 합니다. 만약 런타임에 타입 안정성이 중요하다면 타입 가드를, 컴파일 시간 성능이 중요하다면 타입 단언을 사용하는 것이 좋을 것입니다.

참고 자료