ES6(ECMAScript 2015) – 클래스 – 1 – 상속과 다형성

ES6(ECMAScript 2015) - 객체 리터럴 확장 - 2 - 프로토타입 축약
ES6(ECMAScript 2015) – 클래스 – 1 – 상속과 다형성

ES6(ECMAScript 2015) – 클래스 – 1 – 상속과 다형성

소제목: 상속과 다형성의 개념

ES6(ECMAScript 2015)에서 도입된 클래스는 객체지향 프로그래밍을 구현하는 데 사용되는 중요한 개념입니다. 클래스를 이해하기 위해서는 상속과 다형성에 대한 개념을 먼저 알아야 합니다.

상속

상속은 한 클래스가 다른 클래스의 속성과 메서드를 이어받는 것을 의미합니다. 상속을 통해 기존 클래스를 확장하고 재사용할 수 있습니다. 이는 부모 클래스와 자식 클래스 사이의 관계를 형성하는 것으로 생각할 수 있습니다.

예시:

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

  speak() {
    console.log(this.name + '이/가 소리를 내고 있습니다.');
  }
}

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

  speak() {
    console.log(this.name + '이/가 멍멍하고 짖고 있습니다.');
  }
}

const dog = new Dog('뽀미');
dog.speak(); // 출력 결과: "뽀미이/가 멍멍하고 짖고 있습니다."

위 예시에서 Animal 클래스는 동물의 기본 특성을 가지고 있고, Dog 클래스는 Animal 클래스를 상속받아서 확장한 것입니다. Dog 클래스는 speak 메서드를 재정의하여 개의 짖는 소리를 출력합니다. 따라서 dog.speak()를 호출하면 “뽀미이/가 멍멍하고 짖고 있습니다.”라는 문구가 출력됩니다.

상속을 통해 코드의 재사용성을 높일 수 있으며, 코드 구조를 계층적으로 구성하여 가독성을 개선할 수 있습니다. 이를 비유적으로 표현하면, 부모 클래스는 큰 나무의 줄기이고 자식 클래스는 줄기에서 뻗어나온 작은 가지들로 생각할 수 있습니다. 작은 가지들은 공통된 특성을 가지면서 각각의 독립성을 유지합니다.

다형성

다형성은 상속 관계에 있는 클래스들이 동일한 메서드를 가지면서 다른 방식으로 동작할 수 있는 특성을 의미합니다. 다형성은 객체지향 프로그래밍의 강력한 개념 중 하나로, 코드의 유연성과 확장성을 높여줍니다. 다형성을 활용하면 여러 객체를 동일한 타입으로 다룰 수 있으며, 객체의 실제 타입에 따라 실행 결과가 달라집니다.

예시:

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

  speak() {
    console.log('동물이 소리를 내고 있습니다.');
  }
}

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

  speak() {
    console.log('개가 멍멍하고 짖고 있습니다.');
  }
}

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

  speak() {
    console.log('고양이가 야옹하고 울고 있습니다.');
  }
}

const animalArray = [new Dog('뽀미'), new Cat('나비')];

animalArray.forEach(animal => {
  animal.speak();
});

위 예시에서 Dog 클래스와 Cat 클래스는 모두 Animal 클래스를 상속받아서 확장한 것입니다. 각 클래스는 speak 메서드를 재정의하여 다른 소리를 출력하도록 구현되었습니다. animalArray 배열에는 DogCat 인스턴스가 포함되어 있습니다. forEach 메서드를 사용하여 배열의 각 요소에 대해 speak 메서드를 호출하면 각 객체의 타입에 따라 다른 소리가 출력됩니다.

다형성을 이해하기 위해서는 개념적으로는 ‘같은 메서드지만 다른 동작을 하는 것’으로 생각할 수 있습니다. 예를 들어, 사람과 동물이 모두 ‘소리를 낸다’는 동일한 메서드를 가지고 있지만, 실제로는 사람은 말을 하고 동물은 울음소리를 내는 등 서로 다른 동작을 수행합니다.

주의해야 할 점

  • 클래스를 상속할 때 extends 키워드를 사용합니다. 자식 클래스는 부모 클래스의 속성과 메서드를 상속받을 수 있습니다.
  • 자식 클래스에서 부모 클래스의 메서드를 재정의할 수 있습니다. 이를 통해 동일한 메서드 이름을 가지면서 다른 동작을 수행할 수 있습니다.
  • 자식 클래스에서 super 키워드를 사용하여 부모 클래스의 생성자를 호출할 수 있습니다. 이는 자식 클래스에서 부모 클래스의 속성을 초기화하기 위해 사용됩니다.
  • 다형성을 활용하려면 부모 클래스에서 정의한 메서드를 자식 클래스에서 재정의해야 합니다. 이를 통해 각각의 객체가 다른 동작을 할 수 있습니다.

상속과 다형성은 객체지향 프로그래밍의 중요한 개념이며, 클래스를 사용하여 코드를 구조화하고 재사용성을 높일 수 있습니다. 자바스크립트의 클래스를 활용하면 간결하고 확장 가능한 코드를 작성할 수 있습니다.

이상으로 ES6(ECMAScript 2015)의 클래스, 상속과 다형성에 대한 설명을 마치겠습니다. 이해에 도움이 되었기를 바랍니다! 추가적인 질문이 있다면 언제든지 물어보세요.

답글 남기기