자바스크립트 클래스의 상속과 다형성

자바스크립트는 프로토타입 기반의 객체 지향 프로그래밍 언어로써, 클래스의 상속과 다형성을 지원합니다. 이를 통해 코드의 재사용성과 유연성을 높일 수 있습니다.

클래스 상속

클래스 상속은 한 클래스가 다른 클래스로부터 속성과 메서드를 상속받는 것을 의미합니다. 자바스크립트에서는 extends 키워드를 사용하여 클래스 상속을 구현할 수 있습니다.

class Animal {
  constructor(name) {
    this.name = name;
  }

  speak() {
    console.log(this.name + ' makes a sound.');
  }
}

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

  speak() {
    console.log(this.name + ' barks.');
  }
}

const dog = new Dog('Max');
dog.speak(); // 출력: Max barks.

위 코드에서 Dog 클래스는 Animal 클래스를 상속받았습니다. extends 키워드를 사용하여 상속을 정의하고, super 키워드를 사용하여 부모 클래스의 생성자를 호출하는 것을 볼 수 있습니다. 이를 통해 자식 클래스에서 부모 클래스의 속성과 메서드를 사용할 수 있습니다.

다형성

다형성은 한 객체가 여러 가지 타입을 가질 수 있는 능력을 가리킵니다. 자바스크립트에서는 클래스 상속과 함께 다형성을 구현할 수 있습니다.

class Shape {
  calculateArea() {
    // 구현 내용
  }
}

class Rectangle extends Shape {
  constructor(width, height) {
    super();
    this.width = width;
    this.height = height;
  }

  calculateArea() {
    return this.width * this.height;
  }
}

class Circle extends Shape {
  constructor(radius) {
    super();
    this.radius = radius;
  }

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

const shapes = [
  new Rectangle(10, 5),
  new Circle(7)
];

shapes.forEach(shape => {
  console.log(shape.calculateArea());
});

위 코드에서 Shape 클래스를 부모 클래스로, RectangleCircle 클래스를 자식 클래스로 구현하였습니다. 각 자식 클래스는 calculateArea 메서드를 오버라이딩하여 독자적인 동작을 구현하였습니다.

shapes 배열에는 RectangleCircle 클래스의 인스턴스가 포함되어 있습니다. forEach 메서드를 사용하여 각 도형의 넓이를 출력하였는데, 이 때 다형성의 특성에 따라 RectangleCircle 객체는 각자의 calculateArea 메서드를 호출하게 됩니다.

결론

자바스크립트 클래스의 상속과 다형성은 객체 지향 프로그래밍의 핵심 원리를 충실히 따르고 있습니다. 상속을 통해 코드의 재사용성을 높이고, 다형성을 이용하여 유연하고 강력한 프로그램을 작성할 수 있습니다. 자바스크립트의 이러한 기능을 적절히 활용하여 효율적이고 유지보수가 용이한 코드를 작성해보세요!