상속
class Human {
constructor(name){
this.name = name;
}
walk() {
return "one by one step";
}
}
class Luasenvy extends Human {
constructor(name){
super(name);
}
walk() {
return "fly";
}
}
상속은 ES6에서 많은 문법들이 추가되어 현재는 extends 키워드를 사용하면 쉽게 구현이 가능하다. Luasenvy.prototype = Object.create(Human)
과 같은 문법들도 있지만 오래되고 가독성이 떨어져 많이 사용하지는 않는다. 상속 클래스를 만들 때에는 반드시 constructor()
에서 super()
를 호출하여 상위 클래스의 constructor를 호출해야 한다.
클래스와 팩토리 디자인 패턴 이 문서를 참고하여 프로토타입 체인을 확인할 수 있다.
폴리모피즘 ( 다형성 )
const human = new Human("Some Guy");
const luasenvy = new Luasenvy("luasenvy");
const peoples = [human, luasenvy];
peoples.forEach(people => people.walk());
전혀 다른 클래스이지만 동일한 메서드를 사용할 수 있어서 코드의 가독성과 재사용성을 높일 수 있다. 하위 클래스에서 walk()
를 구현하지 않아도 walk를 사용할 수 있는데 super.walk()
함수를 프로토타입으로 참조할 수 있기 때문에 호출될 수 있는 것이다. 이렇게 하위 클래스에서 상위 클래스의 메서드를 덮어씌우는 작업을 오버라이딩Overriding 이라고도 한다.
오버로딩Overloading 또한 다형성을 주는 기능 중 하나이지만 자바스크립트에서는 지원하지 않는 기능이다. 오버로딩은 메서드 명과 파라미터 유형까지 확인하여 호출시점의 파라미터에 따라서 구현된 메서드를 호출하는 기능이다.