[typescript] 클래스 상속과 인터페이스 구현의 관계를 통해 어떤 유연성을 얻을 수 있는가?

클래스 상속과 인터페이스 구현은 TypeScript에서 코드를 구조화하고 유연성을 제공하는데 중요한 역할을 합니다. 이러한 기능들은 코드 재사용성과 확장성을 높이며, 더 견고한 소프트웨어를 만드는데 도움을 줍니다. 이 블로그 포스트에서는 TypeScript에서 클래스 상속과 인터페이스 구현의 관계를 살펴보고, 어떤 유연성을 얻을 수 있는지 알아보겠습니다.

1. 클래스 상속의 유연성

클래스 상속은 부모 클래스의 속성과 메서드를 자식 클래스가 상속받아 사용할 수 있게 합니다. 이를 통해 코드 재사용성을 높일 수 있으며, 부모 클래스의 기능을 확장하거나 변경하여 새로운 기능을 추가할 수 있습니다.

예를 들어, 다음은 Vehicle 부모 클래스와 Car 자식 클래스의 예제입니다:

class Vehicle {
  constructor(public make: string, public model: string) {}

  start() {
    console.log('The vehicle starts moving.');
  }
}

class Car extends Vehicle {
  // Additional properties and methods specific to Car
  constructor(make: string, model: string, public color: string) {
    super(make, model);
  }

  // Override the start method for the Car
  start() {
    console.log('The car engine starts.');
    super.start();
  }
}

위 예제에서 Car 클래스는 Vehicle 클래스를 상속받아 start 메서드를 오버라이딩하고, 새로운 속성인 color를 추가하여 확장하였습니다. 이를 통해 코드의 중복을 줄이고 유연한 기능 확장이 가능해졌습니다.

2. 인터페이스 구현의 유연성

인터페이스는 클래스나 객체가 특정한 구조를 따르도록 강제함으로써 코드 간의 호환성을 높여줍니다. TypeScript에서 인터페이스는 클래스가 특정 구조를 따르도록 강제할 뿐만 아니라, 여러 클래스가 공통적으로 가져야 하는 속성과 메서드를 명시적으로 정의할 수 있습니다.

다음은 Shape 인터페이스를 구현하는 Circle 클래스의 예제입니다:

interface Shape {
  calculateArea(): number;
}

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

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

위 예제에서 Circle 클래스는 Shape 인터페이스를 구현하여 calculateArea 메서드를 강제함으로써, 다양한 도형 클래스가 특정한 메서드를 구현하기 쉽도록 도와줍니다.

결론

이러한 클래스 상속과 인터페이스 구현은 TypeScript에서 코드의 유연성을 높이는데 중요한 도구입니다. 클래스 상속을 통해 기능을 재사용하고 확장하며, 인터페이스를 통해 코드 간의 호환성을 높일 수 있습니다. 이는 유지보수가 쉬우며, 확장이 용이한 안정적인 소프트웨어를 개발하는데 큰 도움이 됩니다.

참고 문헌: