[typescript] 추상 클래스와 인터페이스를 조합하여 더 유연한 구조를 설계하는 방법

타입스크립트는 강력한 타입 시스템을 가지고 있어서 추상 클래스와 인터페이스를 조합하여 유연하고 안정적인 구조를 설계할 수 있습니다.

추상 클래스란?

추상 클래스는 인스턴스화할 수 없는 클래스로, 다른 클래스들이 공통적으로 가져야 하는 속성과 메서드를 정의합니다. 추상 클래스는 abstract 키워드를 사용하여 정의되며, 최소한 하나 이상의 추상 메서드를 포함합니다.

abstract class Animal {
  abstract makeSound(): void;
  move(): void {
    console.log("roaming the earth...");
  }
}

위 예제에서 makeSound 메서드는 추상 메서드이며, 하위 클래스에서 반드시 구현되어야 합니다. move 메서드는 구현된 메서드입니다.

인터페이스란?

인터페이스는 구조를 정의하기 위한 TypeScript의 핵심 기능입니다. 클래스나 객체가 특정한 구조를 준수하기 위해 사용됩니다.

interface Shape {
  calculateArea(): number;
}

위 예제에서 Shape 인터페이스는 calculateArea 메서드를 가져야 함을 정의하고 있습니다.

추상 클래스와 인터페이스를 조합하여 활용하기

이 두 가지를 조합하여 사용하면, 추상 클래스로 공통적인 행동을 구현하고 인터페이스로 구조를 정의할 수 있습니다. 예를 들어 동물들의 추상 클래스와 기능을 수행하는 동물들의 인터페이스를 만들어 보겠습니다.

abstract class Animal {
  abstract makeSound(): void;
}

interface Perform {
  performTrick(): void;
}

class Dog extends Animal implements Perform {
  makeSound(): void {
    console.log("Woof! Woof!");
  }
  performTrick(): void {
    console.log("Performing a trick...");
  }
}

위 코드에서 Dog 클래스는 Animal 클래스를 상속하고 Perform 인터페이스를 구현하여 makeSound 메서드를 갖고 있으며 performTrick 메서드를 구현하고 있음을 보여줍니다.

이처럼 추상 클래스와 인터페이스를 조합하여 사용하면, 구조와 행동을 완벽하게 정의할 수 있습니다.

위와 같은 방법을 통해 TypeScript에서 추상 클래스와 인터페이스를 조합하여 더 유연한 구조를 설계할 수 있습니다.

참고 자료