[상속과 다향성]

도형에서 삼각형, 사각형, 오각형이 존재하면 이들의 높이와 너비를 측정할 수 있다.

높이와 너비, 길이를 각 도형마다 각각 선언되어 독립적으로 계산되어 사용되면 가용성과 유지보수성이 떨어진다.

그렇기 떄문에 하나의 class에서 공통적으로 사용되어 각 도형마다 측정기능을 '포함하여' 쓰면 된다.

class Shape { // 도형 측정 class
    constructor (width, height, color) {
        this.width = width;
        this.height = height;
        this.color = color;
    }

    draw() {
        console.log(`drawing ${this.color} color of`);
    }

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

class Rectangle extends Shape { // 사각형 class / Shape class 상속

}

const rectangle = new Rectangle(20, 20, 'blue');
rectangle.draw();                 // drawing blue color of
console.log(rectangle.getArea()); // 400
class Rectangle extends Shape {}  // 사각형 class / Shape class 상속
class Triangle extends Shape {}   // 삼각형 class / Shape class 상속

const rectangle = new Rectangle(20, 20, 'blue');
const triangle = new Triangle(20, 20, 'red');

console.log(rectangle instanceof Rectangle);  // true
console.log(triangle instanceof Rectangle);   // false
console.log(triangle instanceof Triangle);    // true
console.log(triangle instanceof Shape);       // true
console.log(triangle instanceof Object);      // true