1. 클래스 상속
1.1 클래스 상속이란?
클래스 상속이란 다른 클래스의 속성과 메서드를 그대로 가져오는 것 즉 상속받는 것을 말한다.
// 클래스 Animal
class Animal {
constructor(name, age) {
this.name = name;
this.age = age;
}
showName(){
console.log(`My name is ${this.name}`);
}
showAge(){
console.log(`I am ${this.age} years old`);
}
}
// 클래스 Animal로 새로운 인스턴스인 pubao를 생성
let pubao = new Animal('pubao', 1, 'bamboo')
// 클래스 Animal을 상속받은 클래스 Cat
class Cat extends Animal {
constructor(name, age, favouriteFood) {
// super라는 메서드로 부모 클래스 Animal의 속성과 메서드 가져오기
super(name, age);
this.favouriteFood = favouriteFood;
}
meow() {
console.log(`${this.name}: meow! meow! 😾`)
}
}
// 클래스 Cat으로 새로운 인스턴스인 samsaek을 생성
let samsaek = new Cat('samsaek', 5, 'tuna');
console.log(samsaek);
// {
// age: 5,
// favouriteFood: "tuna",
// name: "samsaek"
// }
samsaek.meow();
// "samsaek: meow! meow! 😾"
코드해석
- 클래스 Animal의 프로퍼티와 메서드를 가지는 새로운 클래스 Cat을 선언한다
- 키워드 extends는 오른쪽에 위치한 클래스를 왼쪽 클래스가 상속한다는 의미
- 클래스 Cat에 constructor안에 있는 super라는 함수는 부모 클래스의 속성과 메서드에 접근할 수 있게 해준다
- 자식 클래스에 부모 클래스와 같은 메서드가 있다면 자식 클래스 메서드가 부모 클래스 메서드를 덮어씌운다 (자식 클래스 메서드가 더 우선순위)
super 키워드
- constructor 안에서 메소드로 사용할 수 있다
- 부모의 constructor를 호출하면서 인수를 전달한다
- this를 쓸 수 있게 해준다
- 키워드로 사용할 수 있다
- 부모 클래스에 대한 필드나 함수를 참조할 수 있다
1.2 상속여부를 체크하는 instanceof
instanceof: 왼쪽에 있는 object가 오른쪽에 있는 class의 instance인지 아닌지 체크하는 오퍼레이터
console.log(samsaek instanceof Cat); // true
console.log(samsaek instanceof Animal); // true
console.log(pubao instanceof Cat); // false
console.log(pubao instanceof Animal); // true
코드해석
- line1: samsaek이라는 인스턴스는 클래스 Cat으로 생성되었기 때문에 samsaek은 Cat의 인스턴스다
- line2: samsaek이라는 인스턴스는 클래스 Cat으로 생성되었고 클래스 Cat은 클래스 Animal을 상속받기 때문에 samsaek은 Animal의 인스턴스다
- line3: pubao라는 인스턴스는 클래스 Cat으로 생성되지 않았기 때문에 pubao는 Cat의 인스턴스가 아니다
- line4: pubao라는 인스턴스는 클래스 Animal로 생성되었기 때문에 pubao는 Animal의 인스턴스다
'JavaScript' 카테고리의 다른 글
| [자바스크립트] 스프레드 오퍼레이터(spread operator, 전개 연산자)란? (0) | 2022.03.29 |
|---|---|
| [자바스크립트] =, ==, ===의 차이 (할당연산자, 동등연산자, 일치연산자) (0) | 2022.03.29 |
| [자바스크립트] 클래스 선언하는 방법 (클래스, 오브젝트, 인스턴스의 차이) (0) | 2022.03.29 |
| [자바스크립트] 함수를 선언하는 3가지 방법 (함수 선언식, 함수 표현식, 화살표 함수) (0) | 2022.03.29 |
| [자바스크립트] document.createElement로 DOM 요소 추가하기 (0) | 2022.03.25 |
댓글