
Inheritance (상속)
프로그래밍에서 상속은 우리가 알고 있는 상속과 동일하다
부모클래스가 설정한 틀을 자식 클래스도 동일하게 가지고와 사용하는 것
만약 도형들을 만드는 기능을 가진 클래스가 있다고 생각하자
모든 도형들은 높이 넓이 색상을 가지게 되지만 도형의 종류는 여러가지다
그렇기에 도형의 공통적인 정보를 가지고 있는 Shape이라는 부모 클래스를 만든다
아래의 코드를 살펴보자
class Shape{
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;
}
setArea(){
}
}
위 코드 처럼 Shape이란 부모 클래스를 만들었고 이제 자식 클래스를 만들어 볼건데
삼각형을 만들어주는 클래스를 만들어보자 근데 생각해보면 삼각형은 넓이를 구하려면
높이x길이/2 이기에 그 부분만 자식 클래스에서 설정을 해주면 되는 것이다.
이게 바로 필요한 함수만 재 정의해서 쓸 수 있는 오버라이딩이다 !!
class Triangle extends Shape{
draw(){
super.draw();
console.log('삼각형')
}
getArea(){
return (this.width * this.height) / 2;
}
}
const triangle = new Triangle(20, 20, 'red');
triangle.draw();
console.log(triangle.getArea());
Triangle 클래스는 부모인 Shape을 상속(extends)를 하였고
넓이를 구하는 getArea() 메소드는 새롭게 정의하여 오버라이딩 하였으며
draw()메소드 또한 console.log를 바꿔 주었다 하지만 이렇게 메소드를 오버라이딩 해주면
부모가 가지고 있었던 메소드들은 사용이 되지 않게 되는데 이 부분을 같이 사용하고 싶다면
위 코드와 같이 super.draw()를 해주면 바로 상속받고 있는 Shape의 draw()메소드를
'같이' 사용하게 되는 것이다 !!
이와 같이 상속은 어마어마한 코드의 다용성을 늘려줄 수가 있다.
만약 저 클래스에서 shape의 부분만 수정해 준다면 그 shape을 상속받고 있는 여러 도형들의
클래스에서도 같이 적용을 받기 때문에 너무 필요한 부분이다. 😏