[typescript] 타입 가드를 사용한 추상 클래스 구현

본 포스트에서는 TypeScript에서 타입 가드를 사용하여 추상 클래스를 구현하는 방법에 대해 알아보겠습니다.

추상 클래스란 무엇인가요?

추상 클래스는 인스턴스를 생성할 수 없는 클래스로, 다른 클래스들이 상속하여 구현할 메서드와 프로퍼티를 정의합니다. 이 추상 클래스를 상속하는 클래스는 추상 클래스에서 정의한 메서드와 프로퍼티를 반드시 구현해야 합니다.

타입 가드란 무엇인가요?

타입 가드는 TypeScript에서 특정 타입으로 값을 제한하고 나머지 타입과 값을 제한된 타입으로 변환하는 기능을 말합니다. 이를 사용하여 추상 클래스의 메서드를 호출할 때 해당 메서드가 구현되어 있는지 미리 확인할 수 있습니다.

추상 클래스와 타입 가드를 함께 사용하는 방법

abstract class Shape {
  abstract area(): number;
}

class Circle extends Shape {
  constructor(private radius: number) {
    super();
  }

  area(): number {
    return Math.PI * this.radius ** 2;
  }
}

class Square extends Shape {
  constructor(private sideLength: number) {
    super();
  }

  area(): number {
    return this.sideLength ** 2;
  }
}

function isShape(obj: any): obj is Shape {
  return 'area' in obj;
}

function printArea(shape: Shape) {
  if (isShape(shape)) {
    console.log(shape.area());
  }
}

위 예제에서 isShape 함수는 타입 가드 역할을 합니다. printArea 함수는 isShape 함수를 사용하여 해당 객체가 Shape 타입인지 확인한 후에 area 메서드를 안전하게 호출합니다.

마치며

추상 클래스와 타입 가드를 조합하여 TypeScript에서 타입 안전성을 높이고 코드를 더욱 견고하게 작성할 수 있습니다. 이를 통해 개발자는 더욱 확신을 갖고 프로그래밍을 할 수 있을 것입니다.

참고 자료