home강의 홈으로
Section 5. 객체와 클래스
Lesson 5. 상속

💡 상속 inheritance

서로 다른 클래스나 생성자 함수가 같은 속성들을 공유할 때
이들의 관계를 정의함으로써 코드의 중복을 줄이고 효율을 높임

  • "B클래스는 A클래스에서 파생된다." - "B는 A의 하위분류"



I. 클래스의 상속 문법

img

class Bird { wings = 2; } class Eagle extends Bird { claws = 2; } class Penguin extends Bird { swim () { console.log('수영중...'); } } class EmperorPenguin extends Penguin { size = 'XXXL'; } const birdy = new Bird(); const eaglee = new Eagle(); const pengu = new Penguin(); const pengdol = new EmperorPenguin(); console.log(birdy, eaglee, pengu, pengdol); for (const i of [ [ '1.', birdy instanceof Bird ], [ '2.', eaglee instanceof Bird ], [ '3.', eaglee instanceof Eagle ], [ '4.', pengdol instanceof Penguin ], [ '5.', pengdol instanceof Bird ], [ '6.', birdy instanceof Eagle ] ]) { console.log(i[0], i[1]); } pengu.swim(); pengdol.swim(); eaglee.swim();
  • 클래스에서는 extends (부모클래스)로 상속관계 정의
  • 자식 클래스에서 또 다른 클래스가 상속받을 수 있음
  • 자식 클래스는 부모 클래스의 속성을 기본적으로 가져옴
  • 자식 클래스의 인스턴스는 부모 클래스의 인스턴스로 인식됨
  • [[Protorype]]으로 상속관계 살펴볼 것 - ⭐️ 최종적으로 Object


class YalcoChicken { no = 0; menu = { '후라이드': 10000, '양념치킨': 12000 }; constructor (name, no) { this.name = name; if (no) this.no = no; } introduce () { return `안녕하세요, ${this.no}호 ${this.name}점입니다!`; } order (name) { return `${this.menu[name]}원입니다.` } } class YalcoChickenAndCafe extends YalcoChicken { cafeMenu = { '아메리카노': 4000, '라떼': 4500 }; cafeOrder (name) { return `${this.cafeMenu[name]}원입니다.` } } const chain1 = new YalcoChickenAndCafe('서면', 2) console.log(chain1); console.log( chain1.order('후라이드'), chain1.cafeOrder('라떼') );

II. 오버라이딩 overriding

자식 클래스에서 부모로부터 물려받은 속성이나 기능을 덮어씀

class Bird { wings = 2; canFly = true; travel () { console.log('비행중...') } } class Eagle extends Bird { claws = 2; } class Penguin extends Bird { canFly = false; travel () { console.log('수영중...') } } const eaglee = new Eagle(); const pengu = new Penguin(); console.log(eaglee); eaglee.travel(); console.log(pengu); pengu.travel();


class YalcoChicken { no = 0; menu = { '후라이드': 10000, '양념치킨': 12000 }; constructor (name, no) { this.name = name; if (no) this.no = no; } introduce () { return `안녕하세요, ${this.no}호 ${this.name}점입니다!`; } order (name) { return `${this.menu[name]}원입니다.` } } class YorkNannyYalcoChicken extends YalcoChicken { introduce () { return `또 뭐 쳐먹으러 기어들어왔어.`; } order (name) { return `${this.menu[name]}원이여.` } } const chain1 = new YorkNannyYalcoChicken ('종로', 48); console.log(chain1.introduce()); console.log(chain1.order('양념치킨'));



III. super

👉 MDN 문서 보기

부모 클래스의 constructor 또는 메서드 호출

class YalcoChicken { no = 0; menu = { '후라이드': 10000, '양념치킨': 12000 }; constructor (name, no) { this.name = name; if (no) this.no = no; } introduce () { return `안녕하세요, ${this.no}호 ${this.name}점입니다!`; } order (name) { return `${this.menu[name]}원입니다.` } } class ConceptYalcoChicken extends YalcoChicken { #word = ''; constructor (name, no, word) { super(name, no); this.#word = word; } introWithConcept () { return super.introduce() + ' ' + this.#word; } order (name) { return super.order(name) + ' ' + this.#word; } } const pikaChain = new ConceptYalcoChicken('도봉', 50, '피카피카~'); console.log(pikaChain); console.log(pikaChain.introWithConcept()); console.log(pikaChain.order('후라이드'));
  • super는 다른 클래스에서 상속받은 클래스에서만 사용 가능
  • 자식 클래스의 constructor 내에서는 부모 클래스의 constructor를 가리킴
  • 자식 클래스의 메서드 내에서는 부모 클래스를 가리킴
  • 부모 클래스의 constructor나 메서드에 추가적인 동작을 넣기 위해 사용

💡 정적 메서드에서

class YalcoChicken { static brand = '얄코치킨'; static contact () { console.log(`${this.brand}입니다. 무엇을 도와드릴까요?`); } } class ConceptYalcoChicken extends YalcoChicken { static contact () { super.contact(); console.log('컨셉 가맹문의는 홈페이지를 참조하세요.'); } } ConceptYalcoChicken.contact();

🤔얄코에게 질문하기질문은 반.드.시 이리로 보내주세요! ( 강의사이트 질문기능 ✖ )

강의에서 이해가 안 되거나 실습상 문제가 있는 부분,
설명이 잘못되었거나 미흡한 부분을 메일로 알려주세요!

답변드린 뒤 필요할 경우 본 페이지에
관련 내용을 추가/수정하도록 하겠습니다.

이메일 주소
yalco@yalco.kr
메일 제목 (반드시 아래 제목을 붙여넣어주세요!)
[질문] 제대로 파는 자바스크립트 (무료 파트) 5-5

🛑질문 전 필독!!

  • 구글링을 먼저 해 주세요. 들어오는 질문의 절반 이상은 구글에 검색해 보면 1분 이내로 답을 찾을 수 있는 내용들입니다.
  • 오류 메시지가 있을 경우 이를 구글에 복붙해서 검색해보면 대부분 짧은 시간 내 해결방법을 찾을 수 있습니다.
  • 강의 페이지에 추가사항 등 놓친 부분이 없는지 확인해주세요. 자주 들어오는 질문은 페이지에 추가사항으로 업데이트됩니다.
  • "유료파트의 강의페이지는 어디 있나요?" - 각 영상의 시작부분 검은 화면마다 해당 챕터의 강의페이지 링크가 있습니다.
  • 질문을 보내주실 때는 문제가 어떻게 발생했고 어떤 상황인지 등을 구체적으로 적어주세요. 스크린샷을 첨부해주시면 더욱 좋습니다.
🌏 Why not change the world?