๐Ÿ“Œ ๋ถ€๋ชจ Class

class Animal {
  constructor(color) {
    this.color = color;
  }
  eat() {
    console.log("๋จน์ž!");
  }
  sleep() {
    console.log("์ž”๋‹ค");
  }
}

โœ์ž์‹ class 1

class Tiger extends Animal {}
const tiger = new Tiger("๋…ธ๋ž‘์ด");
console.log(tiger); //Tiger { color: '๋…ธ๋ž‘์ด' }
tiger.eat(); //๋จน์ž!
tiger.sleep(); //์ž”๋‹ค

โœ์ž์‹ class 2

class Dog extends Animal {
  <u>play()</u> {
    console.log("๋†€์ž~!");
  }
}
const dog = new Dog("๋นจ๊ฐ•์ด");
console.log(dog);
dog.eat();
dog.sleep();
<u>**dog.play();**</u>

๐Ÿšฉsuper โ†’ ๋ถ€๋ชจclass๋ฅผ ๊ฐ€๋ฅดํ‚จ๋‹ค.

๐Ÿ“Œ ์ž์‹ class์— ์ƒˆ๋กœ์šด ์ƒ์„ฑ์ž ์ถ”๊ฐ€ํ•˜๊ธฐ

class Dog extends Animal {
  constructor(color, ownerName) {
    <u>super(color);</u>
    **this.ownerName = ownerName**;
  }
  play() {
    console.log("๋†€์ž~!");
  }
}
const dog = new Dog("๋นจ๊ฐ•์ด", "Tom");
console.log(dog); //Dog { color: '๋นจ๊ฐ•์ด', ownerName: 'Tom' }

๐Ÿ“Œ ์ž์‹ class์— ๋ฉ”์†Œ๋“œ ๋ฐ”๊ฟ”์ฃผ๊ธฐ

class Dog extends Animal {
  constructor(color, ownerName) {
    super(color);
    this.ownerName = ownerName;
  }
  play() {
    console.log("๋†€์ž~!");
  }
  //์˜ค๋ฒ„๋ผ์ด๋”ฉ overriding ๋ฎ์–ด์”Œ์šฐ๊ธฐ
  eat() {
    console.log('๊ฐ•์•„์ง€๊ฐ€ ๋จน๋Š”๋‹ค.') 
  }
}
dog.eat(); //๊ฐ•์•„์ง€๊ฐ€ ๋จน๋Š”๋‹ค.

๐Ÿ“Œ ๋ถ€๋ชจ ๋ฉ”์†Œ๋“œ์— ์ž์‹ class์— ๋งค์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๊ธฐ

class Dog extends Animal {
  constructor(color, ownerName) {
    super(color);
    this.ownerName = ownerName;
  }
  play() {
    console.log("๋†€์ž~!");
  }
  eat() {
    super.eat(); //๋จน์ž!
    console.log("๊ฐ•์•„์ง€๊ฐ€ ๋จน๋Š”๋‹ค."); //๊ฐ•์•„์ง€๊ฐ€ ๋จน๋Š”๋‹ค.
  }
}
dog.eat(); //๋จน์ž! 
					 //๊ฐ•์•„์ง€๊ฐ€ ๋จน๋Š”๋‹ค.

๐Ÿ’ฅ super( ) โ†’ ๋ถ€๋ชจํด๋ž˜์Šค์˜ โ€œ์ƒ์„ฑ์žโ€

super. โ†’ ๋ถ€๋ชจํด๋ž˜์Šค โ€œ์ž์ฒดโ€