자바스크립트는 프로토타입 기반의 객체 지향 프로그래밍 언어로써, 클래스의 상속과 다형성을 지원합니다. 이를 통해 코드의 재사용성과 유연성을 높일 수 있습니다.
클래스 상속
클래스 상속은 한 클래스가 다른 클래스로부터 속성과 메서드를 상속받는 것을 의미합니다. 자바스크립트에서는 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
클래스를 부모 클래스로, Rectangle
과 Circle
클래스를 자식 클래스로 구현하였습니다. 각 자식 클래스는 calculateArea
메서드를 오버라이딩하여 독자적인 동작을 구현하였습니다.
shapes
배열에는 Rectangle
과 Circle
클래스의 인스턴스가 포함되어 있습니다. forEach
메서드를 사용하여 각 도형의 넓이를 출력하였는데, 이 때 다형성의 특성에 따라 Rectangle
과 Circle
객체는 각자의 calculateArea
메서드를 호출하게 됩니다.
결론
자바스크립트 클래스의 상속과 다형성은 객체 지향 프로그래밍의 핵심 원리를 충실히 따르고 있습니다. 상속을 통해 코드의 재사용성을 높이고, 다형성을 이용하여 유연하고 강력한 프로그램을 작성할 수 있습니다. 자바스크립트의 이러한 기능을 적절히 활용하여 효율적이고 유지보수가 용이한 코드를 작성해보세요!