Front-end/JavaScript

JS OOP 6편 - 다형성(Polymorphism)

파리외 개발자 2023. 2. 15. 00:04
다형성이란 
상황의 변화에 따라 유연하게 대응하는
성질이다.

 

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메서드를 사용할 수 있는 다형성을 가진다.

강아지 크림이는 이빨 외에도 꼬리로도 공격을 할 수 있다.