인프런 커뮤니티 질문&답변
클래스와 상속에 대한 질문입니다.
해결된 질문
작성
·
266
·
수정됨
0
첫번째 질문
class Monster {
power = 10;
constructor(aaa) {
this.power = aaa;
}
attack = () => {
console.log("공격하자!!");
console.log(`내 공격력은 ${this.power} 이야`);
};
run = () => {
console.log("도망가자!!");
};
}
const mymonster1 = new Monster(20);
mymonster1.attack();
mymonster1.run();
const mymonster2 = new Monster();
mymonster2.attack();
mymonster2.run();//터미널
공격하자!!
내 공격력은 20 이야
도망가자!!
공격하자!!
내 공격력은 undefined 이야
도망가자!!위와 같이 new Monster 하면서 생성자에 power 값을 넘겨주지 않으면 undefined 이 찍히는데,
저렇게 생성자가 있는 상황에서, 기본적으로 class 안에서 설정해 준 power 값 power = 10;을 이용하려면 어떻게 해야 하나요?
두번째 질문
class Monster {
power = 10;
constructor(aaa) {
this.power = aaa;
}
attack = () => {
console.log("공격하자!!");
console.log("내 공격력은 " + this.power + " 이야!!!");
};
}
class SkyMonster extends Monster {
run = () => {
console.log("날라서 도망가자!!");
};
}
class GroundMonster extends Monster {
run = () => {
console.log("뛰어서 도망가자!!");
};
}
const skymonster = new SkyMonster(10);
skymonster.attack();
skymonster.run();
const groundmonster = new GroundMonster(30);
groundmonster.attack();
groundmonster.run();
class Monster {
power = 10;
constructor(aaa) {
this.power = aaa;
}
attack = () => {
console.log("공격하자!!");
console.log("내 공격력은 " + this.power + " 이야!!!");
};
}
class SkyMonster extends Monster {
constructor(qqq) {
super(qqq);
}
run = () => {
console.log("날라서 도망가자!!");
};
}
class GroundMonster extends Monster {
constructor(www) {
super(www);
}
run = () => {
console.log("뛰어서 도망가자!!");
};
}
const skymonster = new SkyMonster(10);
skymonster.attack();
skymonster.run();
const groundmonster = new GroundMonster(30);
groundmonster.attack();
groundmonster.run();
//터미널
공격하자!!
내 공격력은 10 이야!!!
날라서 도망가자!!
공격하자!!
내 공격력은 30 이야!!!
뛰어서 도망가자!!위의 코드를 아래 코드로 바꾸면서 부모 생성자로 값을 넘겨주는 방법을 알려주셨는데
터미널에 찍히는 결과는 똑같은데 왜 저렇게 부모 생성자로 값을 넘겨줘야 하는지 이유를 잘 모르겠습니다.
답변 1
1
안녕하세요. Sophia님
매개변수에 기본값을 지정하는 방법을 학습해 보시길 바랍니다. 아래 링크를 참고해 보시길 바랍니다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Functions/Default_parameters동일한 결과가 발생하는 이유는 생성자 함수가 생략 가능 하기 때문입니다. constructor에 대해 학습해 보세요.
또한 부모 클래스에서 상속된 자식 클래스에서 새로운 속성을 정의하기 위해 super 키워드를 사용합니다. 이 때, 부모 클래스를 호출하지 않게 되면 this에 대한 참조 에러가 발생하기 때문입니다.
자바스크립트 Class에 대해 학습해 보시길 바랍니다.
https://poiemaweb.com/es6-class
감사합니다.





