class 키워드 사용해서 Vehicle이라는 생성자 함수 혹은 클래스라는 개념이 만들어져 있다.
그 내부에 constructor함수를 사용해서 매개변수로 받아서 활용하고 있다. 그리고 this.name과 this.wheel 부분에 매개변수인 name과 wheel을 각각 할당하고 있다.
그리고 vehicle을 통해 하나의 인스턴스를 만들어보자.
myVehicle이라는 변수를 하나 만들고 new라는 키워드로 Vehicle이라는 생성자 함수, 즉 클래스를 실행해준다. 그리고 두개의 인수를 넣어준다.
그리고 콘솔로그로 myVehicle을 출력해보면 Vehicle이라는 객체데이터가 만들어짐. 속성으로는 name과 wheel을 확인할 수 있는 데이터임.
그 아래에는 Bicycle이라는 클래스가 정의되어있고 extends라는 확장을 의미하는 키워드가 붙어있음. 또 다른 말로 상속이라고도 할 수 있고 그 뒤에 기존에 만든 Vehicle 클래스가 붙어있음.
즉 운송수단이라는 Vehicle의 기본적인 정보를 Bicycle이라는 새로운 클래스로 상속(확장)해서 그 내용을 내부에서 사용하겠다는 의미.
추가적으로 super라는 함수를 사용할 수 있다. super라는건 확장된 키워드, 즉 Vehicle을 의미하고 super가 있는 그 자리에서 Vehicle이 실행되는 것임.
그래서 super의 매개변수인 name과 wheel은 Vehicle의 constructor인 매개변수로 들어가게 됨
그래서 어디에선가 Bicycle이 호출이 되서 인수가 넣어지면 그게 name과 wheel로 받아서 super로 넘겨지고 그게 실행되면 Vehicle이 실행되는 것.
클래스를 사용한다는 것은 미리 만들어진 정보에 살을 붙여서 새로운 기능을 확장이라는 개념으로 관리해줄 수 있는 개념.
Car부분을 보면 Vehicle의 내용을 확장해서 가지고 와서 super라는 함수를 사용해서 기본 내용을 동작시키는데, this.logic이라는 새로운 로직이 추가돼있음. 진정한 의미의 확장이란 이런 개념임.
myBicycle이라는 변수를 하나 만들고 new라는 키워드로 Bicycle이라는 생성자 함수, 즉 클래스를 실행해준다. 그리고 두개의 인수를 넣어준다.
그리고 daughtersBicycle이라는 변수를 만들어서 new라는 키워드로 Bicycle 클래스를 정의하고 인수를 넣어줌.
그리고 콘솔로그로 각 변수들을 출력해봄. 그럼 Bicycle이란 이름의 객체 데이터가 잘 출력된다.
car 클래스 쪽으로 넘어와서 myCar라는 변수를 만들고 new 키워드로 car클래스를 실행해주고 인수를 넣어줌. 세개 넣어줘야 함. 마찬가지로 daughtersCar라는 변수도 만들어줌.
그리고 콘솔로그를 출력해보면 역시 Car아는 이름의 객체데이터가 출력되고 license라는 속성도 추가되어있음.
super라는 함수가 Vehicle이라는 클래스로 실행될 수 있게 Vehicle클래스가 요구하는 인수들을 매개변수로 받음. 그리고 Vehicle의 기본로직에 추가적으로 this.license 에 세번째로 받은 인수값을 매개변수로 받아서 사용.
확장된 클래스는 super라는 함수를 통해 내부에서 내가 원하는 위치에서 손쉽게 실행해줄 수 있다.