
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
배열에는 Dog
와 Cat
인스턴스가 포함되어 있습니다. forEach
메서드를 사용하여 배열의 각 요소에 대해 speak
메서드를 호출하면 각 객체의 타입에 따라 다른 소리가 출력됩니다.
다형성을 이해하기 위해서는 개념적으로는 ‘같은 메서드지만 다른 동작을 하는 것’으로 생각할 수 있습니다. 예를 들어, 사람과 동물이 모두 ‘소리를 낸다’는 동일한 메서드를 가지고 있지만, 실제로는 사람은 말을 하고 동물은 울음소리를 내는 등 서로 다른 동작을 수행합니다.
주의해야 할 점
- 클래스를 상속할 때
extends
키워드를 사용합니다. 자식 클래스는 부모 클래스의 속성과 메서드를 상속받을 수 있습니다. - 자식 클래스에서 부모 클래스의 메서드를 재정의할 수 있습니다. 이를 통해 동일한 메서드 이름을 가지면서 다른 동작을 수행할 수 있습니다.
- 자식 클래스에서
super
키워드를 사용하여 부모 클래스의 생성자를 호출할 수 있습니다. 이는 자식 클래스에서 부모 클래스의 속성을 초기화하기 위해 사용됩니다. - 다형성을 활용하려면 부모 클래스에서 정의한 메서드를 자식 클래스에서 재정의해야 합니다. 이를 통해 각각의 객체가 다른 동작을 할 수 있습니다.
상속과 다형성은 객체지향 프로그래밍의 중요한 개념이며, 클래스를 사용하여 코드를 구조화하고 재사용성을 높일 수 있습니다. 자바스크립트의 클래스를 활용하면 간결하고 확장 가능한 코드를 작성할 수 있습니다.
이상으로 ES6(ECMAScript 2015)의 클래스, 상속과 다형성에 대한 설명을 마치겠습니다. 이해에 도움이 되었기를 바랍니다! 추가적인 질문이 있다면 언제든지 물어보세요.