[typescript] 클래스 상속과 인터페이스 구현을 통해 어떤 기능을 확장할 수 있는가?

TypeScript는 클래스 상속과 인터페이스 구현을 통해 기능을 확장할 수 있는 강력한 기능을 제공합니다. 이러한 기능을 활용하여 코드의 재사용성을 높일 수 있고, 프로그램의 유지보수성을 개선할 수 있습니다.

클래스 상속

클래스 상속을 사용하여 한 클래스의 기능을 다른 클래스에서 재사용할 수 있습니다. 이를 통해 코드 중복을 피하고, 상위 클래스의 기능을 하위 클래스에서 확장할 수 있습니다.

class Animal {
  private name: string;

  constructor(name: string) {
    this.name = name;
  }

  public move(distance: number = 0) {
    console.log(`${this.name} moved ${distance}m.`);
  }
}

class Dog extends Animal {
  constructor(name: string) {
    super(name);
  }

  public bark() {
    console.log("Woof! Woof!");
  }
}

const dog = new Dog("Buddy");
dog.move(10); // 출력: Buddy moved 10m.
dog.bark(); // 출력: Woof! Woof!

위의 예제에서 Dog 클래스는 Animal 클래스를 상속받아 move 메서드를 확장하고 bark 메서드를 추가했습니다.

인터페이스 구현

인터페이스를 사용하여 클래스가 특정한 구조를 따르도록 강제할 수 있습니다. 이를 통해 코드의 일관성을 유지하고, 다형성을 구현할 수 있습니다.

interface Shape {
  calculateArea(): number;
}

class Square implements Shape {
  constructor(private sideLength: number) {}

  public calculateArea() {
    return this.sideLength * this.sideLength;
  }
}

class Circle implements Shape {
  constructor(private radius: number) {}

  public calculateArea() {
    return Math.PI * this.radius ** 2;
  }
}

const square = new Square(5);
console.log(square.calculateArea()); // 출력: 25

const circle = new Circle(3);
console.log(circle.calculateArea()); // 출력: 28.274333882308138

위의 예제에서 Shape 인터페이스를 구현하는 SquareCircle 클래스가 각각 calculateArea 메서드를 구현하고 있습니다.

이러한 TypeScript의 클래스 상속과 인터페이스 구현을 통해 코드를 구조화하고 확장할 수 있으며, 객체지향 프로그래밍의 다양한 원칙을 지키면서 유연한 코드를 작성할 수 있습니다.

참고문헌: