[typescript] 다양한 타입 가드 패턴의 성능 비교

본 포스트에서는 TypeScript에서 다양한 타입 가드 패턴을 사용할 때의 성능을 비교해보고자 합니다.

타입 가드 패턴이란?

타입 가드 패턴은 TypeScript에서 변수나 인자의 타입을 세부적으로 체크하기 위한 방법을 의미합니다. 이를 통해 더욱 정확한 타입 추론을 할 수 있고, 코드의 안정성을 높일 수 있습니다.

타입 가드 패턴의 성능 비교

본 섹션에서는 typeof, instanceof, in 연산자 등을 활용한 다양한 타입 가드 패턴을 성능 면에서 비교해보겠습니다.

typeof 연산자

typeof 연산자를 활용한 타입 가드 패턴은 런타임에서 타입 체크를 수행하지 않기 때문에 성능상의 이점이 있습니다. 다만, typeof는 타입을 정확하게 체크하지 못하는 경우가 있으므로 이 점을 유의해야 합니다.

function printName(input: string | number) {
  if (typeof input === 'string') {
    console.log(input.toUpperCase());
  }
}

instanceof 연산자

instanceof 연산자는 클래스의 인스턴스 여부를 확인하여 타입 가드를 수행합니다. 이 때, 프로토타입 체인 상의 객체들도 고려되므로 정확한 타입 체크가 가능합니다. 하지만 클래스의 계층 구조가 복잡할 경우 성능이 저하될 수 있습니다.

class Animal {}
class Dog extends Animal {}

function makeSound(animal: Animal) {
  if (animal instanceof Dog) {
    console.log('Bark!');
  }
}

in 연산자

in 연산자는 객체의 속성 존재 여부를 확인하여 타입 가드를 수행합니다. 이를 통해 동적으로 속성을 체크할 수 있으나, 정확한 타입 체크를 위해서는 별도의 타입 가드 함수를 작성해야 합니다.

interface Square {
  size: number;
}

function calculateArea(shape: Square | { radius: number }) {
  if ('size' in shape) {
    console.log('Area of square:', shape.size ** 2);
  }
}

결론

다양한 타입 가드 패턴을 활용하면 코드의 안정성을 높일 수 있지만, 성능 면에서는 각 패턴의 특징을 고려해야 합니다. 프로젝트의 요구 사항과 환경에 맞는 타입 가드 패턴을 선택하여 사용하는 것이 중요합니다.

본 포스트에서는 TypeScript에서 제공하는 각 타입 가드 패턴의 성능적 특징에 대해 알아보았습니다. 개발자들은 이를 참고하여 적절한 패턴을 선택하고 코드를 최적화하는 데 도움이 되길 바랍니다.

참고 자료