[typescript] 상속과 구현을 통해 어떤 객체의 다형성을 구현할 수 있는가?

상속을 통한 다형성 구현

상속을 사용하여 여러 클래스가 부모 클래스의 메서드와 속성을 공유할 수 있습니다. 이를 통해 다양한 형태의 객체를 일관된 방식으로 다룰 수 있습니다.

class Animal {
  makeSound() {
    console.log('Some sound');
  }
}

class Dog extends Animal {
  makeSound() {
    console.log('Bark');
  }
}

class Cat extends Animal {
  makeSound() {
    console.log('Meow');
  }
}

function petSound(animal: Animal) {
  animal.makeSound();
}

petSound(new Dog()); // 출력: "Bark"
petSound(new Cat()); // 출력: "Meow"

인터페이스 구현을 통한 다형성

인터페이스를 구현함으로써 여러 클래스가 동일한 형태를 갖도록 할 수 있습니다. 이를 통해 다양한 객체가 일관된 인터페이스를 사용할 수 있습니다.

interface Shape {
  area(): number;
}

class Circle implements Shape {
  constructor(private radius: number) {}
  area() {
    return Math.PI * this.radius ** 2;
  }
}

class Square implements Shape {
  constructor(private sideLength: number) {}
  area() {
    return this.sideLength ** 2;
  }
}

function calculateArea(shape: Shape) {
  console.log('Area:', shape.area());
}

calculateArea(new Circle(5)); // 출력: "Area: 78.54"
calculateArea(new Square(5)); // 출력: "Area: 25"

다형성을 통해 코드의 재사용성을 높이고 유지보수를 용이하게 만들 수 있습니다.

관련 참고 자료: TypeScript Handbook - Inheritance