자바스크립트 클래스 상속과 확장

자바스크립트는 프로토타입 기반의 객체지향 언어로서, 클래스 상속과 확장을 지원합니다. 클래스 상속은 기존 클래스를 기반으로 새로운 클래스를 만들어내는 것을 의미하며, 확장은 기존 클래스에 새로운 기능을 추가하는 것을 의미합니다. 이러한 개념을 이해하고 활용하면 코드 재사용성과 확장성을 높일 수 있습니다.

클래스 상속

자바스크립트에서 클래스 상속을 구현하는 방법은 다양합니다. ES6 이후부터는 class 키워드를 사용하여 클래스를 정의하고 extends 키워드를 사용하여 상속을 표현할 수 있습니다. 아래의 예시 코드를 살펴봅시다.

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

  speak() {
    console.log(`${this.name}이 소리를 냅니다.`);
  }
}

class Dog extends Animal {
  constructor(name, breed) {
    super(name);
    this.breed = breed;
  }

  speak() {
    console.log(`${this.name}이(가) 멍멍하며 짖습니다.`);
  }
}

위의 예시 코드는 Animal 클래스를 상속하는 Dog 클래스를 정의하는 예시입니다. Dog 클래스에서 extends 키워드를 사용하여 Animal 클래스를 상속하고, super 키워드를 사용하여 부모 클래스의 생성자를 호출합니다. 이런식으로 기존 클래스의 속성과 메서드를 가져와 기능을 재사용할 수 있습니다.

클래스 확장

기존의 클래스에 새로운 기능을 추가하는 것을 클래스 확장이라고 합니다. 이는 상속과는 다르게 새로운 클래스를 만들 필요 없이 기존 클래스를 변형시킴으로써 기능을 확장할 수 있습니다. 아래의 예시 코드를 살펴봅시다.

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

  speak() {
    console.log(`${this.name}이 소리를 냅니다.`);
  }
}

function canFly(target) {
  target.fly = function() {
    console.log(`${this.name}이(가) 날개를 펼칩니다.`);
  }
}

const bird = new Animal("");
canFly(bird);
bird.fly(); // "새이(가) 날개를 펼칩니다."

위의 예시 코드에서 canFly 함수는 Animal 클래스의 인스턴스에 fly 메서드를 추가해주는 확장 기능을 제공합니다. canFly 함수는 target 매개변수를 통해 확장 대상이 되는 객체를 받고, 해당 객체에 fly 메서드를 추가합니다. 이렇게 기존 클래스에 새로운 기능을 추가함으로써 클래스의 확장이 이루어집니다.

자바스크립트의 클래스 상속과 확장은 코드의 재사용성과 확장성을 높여줍니다. 상속을 통해 기존 클래스의 기능을 재사용하고, 확장을 통해 기존 클래스에 새로운 기능을 추가함으로써 유연한 코드 구조를 구현할 수 있습니다. 이를 통해 효율적이고 유연한 자바스크립트 코드를 작성할 수 있습니다.