[TIL] 프로토타입과 상속 (Prototype and Inheritance)

경두현·2020년 5월 8일
0

TIL

목록 보기
7/11
post-thumbnail

Class인스턴스는 Class의 기능을 모두 상속한다. 하지만 상속은 이 한단계로만 끝나지 않는다. 만약에 객체의 프로토타입에서 원하는 것을 찾지 못하면, 해당 프로토타입의 프로토타입을 검색한다. 이것이 프로토타입 체인의 생성 방식이며 개념이다. JavaScript는 원하는 조건의 프로토타입을 찾을때까지 끊임없이 프로토타입을 거슬러 올라간다. 만약에 끝까지 검색해도 원하는 조건이 없을시에는 Error를 일으킨다.

Class의 계층 구조를 생성 시, 프로토타입 체인을 염두에 두면 효율적인 구조를 만들 수 있다. 즉, 가장 적절한 위치에 메서드를 지정하는 것이다.

class Vehicle {
  constructor(){
    this.passengers = [];
    console..og("운송 수단이 만들어졌습니다.");
  }
  addPassenger(p) {
    this.passengers.push(p);
  }
}

class Car extends Vehicle {
  constructor() {
    super();
    console.log("자동차가 생성되었습니다.");
  }
  deployAirbags() {
    console.log("펑~!!")
  }
}

예제의 코드에서 처음보는 키워드가 2가지 있다.
extends
extends 키워드는 Car를 Vehicle의 서브클래스로 만든다.
super()
super()는 슈퍼클래스의 생성자를 호출하는 특별한 함수이다. 서브클래스에서는 무조건 이 함수를 반드시 호출해야한다. 미호출시 Error 발생.

let v = new Vehicle();
v.addPassenger("Frank");
v.passenger; // ["Frank"]

let c = new Car();
c.addPassenger("Alice");
c.passenger;  ["Alice"]

v.deployAirbags(); // Error
c.deployAirbags(); // "펑~!!"

이 코드의 결과로 상속은 단방향인걸 알 수 있다. Car Class에서는 Vehicle Class의 모든 메서드에 접근 가능하지만 Vehicle에서는 Car의 메서드에 접근이 불가능하다.

profile
개발자(진)

0개의 댓글