상속과 instanceof

정승원·2023년 5월 9일
0

JavaScript

목록 보기
32/69
post-thumbnail

운송수단


class 하나가 정의 되어 있고, Vehicle로 지정되있다.
그래서 constructor로 기본 내용이 작성이 되어있고,
acceleration이라는 매게변수를 받아서 사용하는 것이다. 만약에
acceleration에 아무런 값도 들어가지 않으면, 기본 값인 1이 할당이 되는 것이다.
그리고 accelerate는 this.speed 속성에 더하기 할당으로, 가속도를 할당하고 있다. 만약에 가속도에서 3이 들어간다면 기본 값인 1을 들어가진 않고,
더하기 할당으로 계속 3이 증가 할 것이다.
그리고 decelerate가 실행이 된다면,
if 조건을 통해서, 스피드가 0보다 작거나 같으면, 정지 하는 메세지를 출력해 주고 함수를 종료, 만약 더 크면 if조건이 실행 되지 않을 것이고 빼기 할당에 의해 계속 줄어들 것이다.

자전거


Bicycle뒤에 extends키워드를 통해서 Vehicle 클래스가 작성이 되어있다,
이 뜻은 Bicycle에 Vehicle를 extends하니까, 확장해서 사용하겠다 라는 뜻이다. 즉. 연결을 하는 것이다. 그래서 연결을 했으면 같이 사용해주어야 하는 것이
super라는 함수이다. 그래서 super(acceleration)이렇게 선언을 해주면,
constructor부분이다. 자전거는 운송수단을 상속 받아서, 내부에서 사용할 건데,
운송수단에 있는 constructor가 super자리에서 호출이 된다 라는 의미를 가지고 있다.

생성자 함수로 호출을 해 보았다.
이렇게 출력을 했다. 그래서 결과 값은,

이렇게 출력이 되었다.
숫자 300으로 호출한 것은 price로 가고 만약 아무것고 없다면, 기본 값인 100이 출력이 될 것이다. 그리고 숫자 2로 넣은것은 acceleration로 출력이 된다. 이것도 아무런 값도 출력이 되지 않으면, 기본 값인 1이 출력이 되는 것이겠다.
그리고 wheel은 2로 지정을 해 두었으니, 2가 잘 출력이 된다.

자전거에서 과속 하기.


이렇게 자전거에 과속을 점 표기법으로 넣고, 지금 두번을 출력을 했다. 그래서 결과값을 보면,

4가 출력되는 것을 볼 수 있다. 왜 2가 아니야하면, 300, 2 라는 출력에서 2가 있으니 2, 4, 6이렇게 2씩 증가를 하게되서, 4라는 값이 나온다.

자동차


자동차는 Car라는 이름으로 만들었고, extends로 자전거를 상속 받고 있다.
그래서 super라는 함수를 당연하게 호출을 하고,
두개의 인수가 필요함으로, price, acceleration를 선언 해 준다.
또 자전거에 wheel이 있고, 자동차에 wheel이 있다. 그래서 보면 자전거의 wheel이 덮힌다는 것이다 그래서 4가 출력이 될 것이다.
그리고 acceleration를 자동차에서 재정의를 하고 있다.
해석을 해 보면 if 조건문이 있고, 조건으로 ! 부정연산자로 썼다.
만약에 license가 참일 경우, 부정 연산자를 통해서, 조건은 false가 될 것이고, 그럼 조건은 실행되지 않을 것이다. 결론은 license가 있으면 실행 되지 않는다는 것이다. 이제 license가 참일 경우 if 조건은 해당되지 않아, 넘어가고 그 아래 있는 더하기 할당으로 출력을 하고 있다.
출력을 하면

이렇게 const로 carA, carB를 선언 해 주고 출력을 하면,
출력 값엔

이렇게 출력 값이 나온다. 처음 carA, carB의 선언한 것에, trus, false를 지정해 준 값은 license에 값으로 지정이 되고, 7000, 4000은 price에 출력이 되고, 기본 값도 없다. 그리고 마지막 10, 6은 acceleration에 출력이 된다.

자동차 과속


자동차A, 자동차B에서 과속을 출력해 주었다. 그럼 결과 값은

이렇게 값이 출력이 된다. carA는 true기 때문에 if조건에 걸리지 않게 되어서, 한 번 과속은 10, 두 번 과속은 20이 되는 것이다. 그리고 speed는 20까지 올라 간 것이 확인할 수 있을 것이다.
반면에 carB는 false이기 때문에 스피드도 0이 되고, if 조건에 걸리게 되면서 console.error이 뜨게 되는 것이다. 이렇게 carA, carB의 차이점도 알아보았다.

보트


class에 보트라는 이름을 선언해 주고, extendes로 Vehicle를 상속했다. 그래서 super에서 acceleration를 호출하는 것이다.
price = price, moter = 1 moter은 기본 값이 1인 것이다.
출력을 하면

이렇게 출력을 하였다. 그래서 결과 값은

이러한 값이 나온다.
const에 선언해준 10000dms price로 가고, 5는 acceleration로 간다.

instanceof

자전거


instanceof를 출력하고, 자전거를 입력하면, true가 입력이 된다.
이유는 자전거는 인스턴스이기 때문이다.
마찬가지로 운송수단도 true이다. 인스턴스기 때문

자동차


자동차도 마찬가지로 true가 나온다. 인스턴스 이기 때문.

보트

보트도 마찬가지로 instanceof bote라고 출력을 해도 true가 나오고
instanceof Vehicle해도 true가 나온다.
하지만 Bicycle를 출력하면 false가 나온다. 이유는 보트는 자전거를 상속하지 않았기 때문이다. 자동차도 false가 나온다 상속하지 않아서.

최종코드


profile
프론트엔드 개발자 준비

0개의 댓글