[typescript] 타입 가드를 사용한 다형성 구현 방법

TypeScript는 JavaScript의 상위 집합으로 정적 타입을 지원하며, 객체 지향 프로그래밍의 다형성을 제공하는 강력한 기능을 가지고 있습니다. 이번 포스트에서는 TypeScript의 타입 가드(type guard)를 사용하여 다형성을 구현하는 방법에 대해 알아보겠습니다.

타입 가드란 무엇인가?

타입 가드는 런타임 시점에 특정 타입으로 값을 검사하고, 이를 정적으로 타입 시스템에 반영하여 해당 타입으로의 안전한 접근을 보장하는 TypeScript의 기능입니다. 타입 가드를 사용하면 코드 내에서 객체의 타입을 동적으로 체크하고, 해당 타입에 따라 다른 동작을 수행할 수 있습니다.

타입 가드를 활용한 다형성 구현

아래는 TypeScript에서 타입 가드를 사용하여 다형성을 구현하는 간단한 예제 코드입니다.

// 도형에 대한 인터페이스
interface Shape {
  kind: string;
  radius?: number;
  width?: number;
  height?: number;
}

// 원에 대한 타입 가드 함수
function isCircle(shape: Shape): shape is { kind: 'circle', radius: number } {
  return shape.kind === 'circle' && typeof shape.radius === 'number';
}

// 사각형에 대한 타입 가드 함수
function isRectangle(shape: Shape): shape is { kind: 'rectangle', width: number, height: number } {
  return shape.kind === 'rectangle' && typeof shape.width === 'number' && typeof shape.height === 'number';
}

// 다형성을 활용한 함수
function getArea(shape: Shape): number {
  if (isCircle(shape)) {
    return Math.PI * shape.radius ** 2;
  } else if (isRectangle(shape)) {
    return shape.width * shape.height;
  } else {
    throw new Error('Invalid shape');
  }
}

위 예제에서는 Shape 인터페이스와 해당 인터페이스를 구현하는 타입 가드 함수, 그리고 이를 활용한 다형성을 갖는 getArea 함수를 정의하였습니다. 이를 통해 원과 사각형을 구분하여 각 도형의 넓이를 계산하는 다형성을 구현할 수 있습니다.

타입 가드를 사용하면 코드의 가독성과 안정성을 높일 수 있으며, 유지 보수성과 확장성을 향상시킬 수 있습니다.

결론

이번 포스트에서는 TypeScript의 타입 가드를 사용하여 다형성을 구현하는 방법에 대해 살펴보았습니다. 타입 가드를 활용하면 동적인 값에 대한 안전한 타입 체크를 수행하여 안정성 있는 코드를 작성할 수 있습니다.

TypeScript 공식 문서 - 타입 가드

이상으로 해당 내용을 마치도록 하겠습니다. 감사합니다.