[typescript] 타입 가드와 타입 단언의 사용에 따른 메모리 사용량 비교

TypeScript는 정적 타입 지정을 통해 JavaScript 코드의 안정성을 높여주는 매우 강력한 도구입니다. 그러나 타입스크립트는 컴파일 과정에서 타입 정보를 삭제하여 런타임에는 사용되지 않습니다. 여기서 타입 가드와 타입 단언은 코드에서 타입 정보를 보존하고 사용하는 두 가지 방법입니다. 이번 글에서는 두 방법의 메모리 사용량을 비교해보겠습니다.

타입 가드 (Type Guard)

타입 가드는 런타임 중에 객체의 타입을 검사하여 해당 타입에 맞게 동작하도록 보장하는 방법입니다. 가장 흔한 예로는 instanceof 연산자를 사용한 타입 가드가 있습니다. 예를 들어, 아래와 같이 instanceof를 사용하여 특정 타입으로의 타입 가드를 할 수 있습니다.

class Cat {
  meow() {
    console.log('Meow!');
  }
}

class Dog {
  bark() {
    console.log('Woof!');
  }
}

function makeSound(animal: Cat | Dog) {
  if (animal instanceof Cat) {
    animal.meow(); // (parameter) animal: Cat
  } else {
    animal.bark(); // (parameter) animal: Dog
  }
}

이렇게 타입 가드를 사용하면 런타임에 객체의 실제 타입을 확인하여 타입별 동작을 보장할 수 있습니다.

타입 단언 (Type Assertion)

타입 단언은 컴파일러에게 “나는 이 변수가 이 타입이다” 라고 확신시켜주는 방법입니다. 이를 통해 컴파일러는 개발자가 보장한 타입으로 해당 변수를 취급합니다. 타입 단언은 아래와 같이 사용할 수 있습니다.

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

타입 단언은 개발자가 직접 해야 하기 때문에 잘못된 타입 단언은 런타임 에러를 발생시킬 수 있으므로 주의가 필요합니다.

메모리 사용량 비교

타입 가드와 타입 단언 중에서 어떤 방법이 더 효율적인지에 대한 공식적인 정보는 없지만, 일반적으로 타입 가드가 더 많은 메모리를 사용할 가능성이 높습니다. 타입 가드는 런타임에 객체를 확인하기 위해 런타임 자원을 소비하므로 메모리 부담이 상대적으로 높을 수 있습니다.

그러나 타입 단언은 런타임에 별다른 영향을 미치지 않으므로 메모리 사용량이 적을 것으로 예상됩니다.

따라서, 메모리 사용량을 최적화하고 싶다면 타입 단언을 사용하는 것이 좋을 수 있습니다.

결론

타입 가드와 타입 단언은 TypeScript에서 타입 정보를 보존하고 활용하기 위한 방법으로, 각각의 장단점이 있습니다. 또한, 메모리 사용량 면에서도 타입 단언이 더 효율적일 수 있으므로 상황에 맞게 적절하게 활용하는 것이 중요합니다.

참고 자료: TypeScript 공식 문서