logo

상속, 다형성 그리고 코드 재사용

Chapter 30

56 조회

0 추천

433 단어

3분 예상

2024. 08. 20. 게시

2025. 02. 26. 수정

luasenvy 작성

CC BY-NC-SA 4.0

상속

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 또한 다형성을 주는 기능 중 하나이지만 자바스크립트에서는 지원하지 않는 기능이다. 오버로딩은 메서드 명과 파라미터 유형까지 확인하여 호출시점의 파라미터에 따라서 구현된 메서드를 호출하는 기능이다.