다형성이란
상황의 변화에 따라 유연하게 대응하는
성질이다.
JS OOP의 다형성
//Polymorphism
class Animal {
constructor(name) {
this.name = name;
}
attack() {
return "attack with " + this.weapon;
}
}
class Cat extends Animal {
constructor(name, nail) {
super(name);
this.weapon = nail;
}
}
const naby = new Cat("Naby", "sharp nail");
naby.attack();
동물 클래스를 상속하는 고양이 클래스는
이름과 공격 외에 무기 속성을 별도로 가지고 있다.
그리고 고양이 나비는 발톱을 이용해 공격한다.
class Dog extends Animal {
constructor(name, tooth) {
super(name);
this.weapon = tooth;
}
attack(subWeapon) {
return "attack with " + this.weapon + " and " + subWeapon;
}
}
const cream = new Dog("Cream", "tiny tooth");
cream.attack("cream's tail");
멍멍이 클래스 또한 동물 클래스를 상속받았기에
이름과 공격 메서드를 기본적으로 가지고 있다.
하지만 여기서 멍멍이는 상속받은 공격 메서드와 같은 이름으로 메서드를 재정의한다.
상속받은 형질을 새로 재정의하는 것을 오버라이딩이라 한다.
오버라이딩을 통해 멍멍이는 고양이와 다른 attack메서드를 사용할 수 있는 다형성을 가진다.
강아지 크림이는 이빨 외에도 꼬리로도 공격을 할 수 있다.
'Front-end > JavaScript' 카테고리의 다른 글
JS FP 2편 - 참조 투명성과 멱등성(Idempotence) (0) | 2023.02.19 |
---|---|
JS FP 1편 - side effect (0) | 2023.02.16 |
JS OOP 5편 - Class private 문법(#) (0) | 2023.02.14 |
JS OOP 4편 - extends(JS 클래스 상속) (0) | 2023.02.13 |
JS OOP 3편 - this 바인딩(new, implicit, explicit, arrow) (0) | 2023.02.12 |