- 객체는 연관된 로직들로 이루어진 작은 프로그램.
- 상속 = 객체의 로직을 그대로 물려 받는 또 다른 객체를 만들 수 있는 기능.
- 기존의 로직을 수정하고 변경해서 새로운 객체를 만들 수 있게 해준다.
상위 객체의 코드를 물려받아 하위 객체에 없는 프로퍼티도 사용할 수 있게 하기 위함이다.
- 클래스 기반 언어 : 클래스를 활용하여 인스턴스 생성.
- 프로토타입 기반 언어 : 클래스라는 개념이 없고 객체에서 객체를 바로 상속.
- 클래스를 정의 및 상속하고 객체 생성.
- 핵심 : 생성자를 만들면, 생성자 객체와 생성자.prototype 객체가 생성되고 생성자.prototype 객체는 원형을 담고 있기 때문에 상속하고자 하는 부모 생성자의 prototype으로 변경시킨다.
- 객체에서 바로 객체로 상속
- 새로운 객체 생성 후, 프로토타입 속성에 매개변수로 받은 객체를 할당한다.
- 생성자 함수에는 자동으로 prototype이 생긴다.
- constructor, prototype은 부부관계라고 보면 된다.
- 함수를 정의하면 프로토타입 객체가 정의되고 그 객체의 멤버로 constructor 속성을 가진다.
- constructor 속성은 프로토타입 객체를 생성했던 함수에 대한 참조..
- Truck 이라는 함수 정의.
- Truck's prototype, Truck 객체 생성.
- Truck's prototype내에는 constructor라는 속성을 가진다.
- constructor 속성은 프로토타입 객체를 생성했던 함수인 Truck에 대해 참조한다고 했다.
- 그러므로, oldTruck.constructor와 Truck.prototype.constructor는 모두 Truck 함수를 바라보고 있으므로 True 반환.
- extends는 클래스의 자식 클래스를 생성할 때 사용하는 키워드이다.
- drive 메소드를 찾고자 한다.
- Semi-Truck.prototype 객체 내에서 drive 메소드를 찾는다.
- drive 메소드가 없으므로, Truck.prototype 객체 내에서 drive 메소드를 찾는다.
- 핵심 : extends는 프로토타입 기반으로 동작한다.
메소드 오버라이딩 : 서브클래스가 슈퍼클래스에 의해 이미 제공된 메소드를 특정한 형태로 구현하는 것을 제공하는 특징.
- 부모 메소드 전체를 교체하지 않고, 부모 메소드를 토대로 일부 기능만 변경하고 싶을 경우 사용.
- super.method() : 부모 클래스에 정의된 메소드를 호출한다.
- super() : 부모 생성자를 호출하는데, 자식 생성자 내부에서만 사용가능하다.
- 화살표 함수에는 super, this가 없다.
- 생성자는 기본적으로 부모 constructor를 호출한다.
- 클래스에 자체 생성자가 없는 경우에 자동으로 일어난다.
- 상속클래스의 생성자에선 다음과 같이 반드시 super()을 호출해야 한다.
- 상속 클래스의 생성자 함수가 실행되면, 빈 객체를 만들고 this에 이 객체를 할당하는 일을 부모 클래스의 생성자가 처리해주길 기대한다.
- 그러므로 super를 호출해 부모 생성자를 실행해줘야 한다. 그렇지 않으면 this가 될 객체가 만들어지지 않아 에러가 뜬다.
- 클래스 확장 : class OldTruck extends Truck
- 메서드 오버라이딩 : OldTruck에 정의된 메서드에서 super.method()를 사용해 Truck에 정의된 메소드 사용 가능.
- 생성자 오버라이딩 : this를 사용하기 전에 OldTruck 생성자 안에서 super()로 부모 생성자인 Truck 생성자 반드시 호출.
- 화살표 함수는 this나 super를 갖지 않는다.