๐Ÿ“ŒLanguage/JavaScript

TIL) ํด๋ž˜์Šค super, extends ์‚ฌ์šฉ ๋ฐฉ๋ฒ•, ์™œ ์‚ฌ์šฉํ•˜์ง€?

hellohailie 2022. 6. 1. 17:08

 

 

class Person{
	constructor(name, first, second){
    	this.name = name;
        this.first = first;
        this.second = second;
    }
    sum() {
    	return this.first + this.second;
    }
}
class PersonPlus extends Person{
	avg() {
    	return (this.first + this.second) / 2;
    }
}

const kim = new PersonPlus('kim', 10, 20);
console.log('kim.sum()',kim.sum());
console.log('kim.avg()',kim.avg());

// ์ถœ๋ ฅ๊ฐ’
kim.sum() 30
kim.avg() 15

 

 

๐Ÿ‘‡ ์œ„ ์ฝ”๋“œ์—์„œ PersonPlus๋ผ๊ณ  ํ•˜๋Š” ํด๋ž˜์Šค์—์„œ 'kim', 10, 20 ์™ธ์— 30์ด๋ผ๋Š” ๊ฐ’๋„ ์ถ”๊ฐ€์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์‹ถ๋‹ค๋ฉด???

 

class Person{
	constructor(name, first, second){
    	this.name = name;
        this.first = first;
        this.second = second;
    }
    sum() {
    	return this.first + this.second;
    }
}
class PersonPlus extends Person{
	constructor(name, first, second, third){
    	this.name = name;
        this.first = first;
        this.second = second;
        this.third = third;
    }
    sum() {
    	return this.first + this.second + this.third;
    }
	avg() {
    	return (this.first + this.second + this.third) / 3;
    }
}

const kim = new PersonPlus('kim', 10, 20, 30);
console.log('kim.sum()',kim.sum());
console.log('kim.avg()',kim.avg());

โžฅ ์ด๋ ‡๊ฒŒ ์“ฐ๋Š๋ƒ??? NO!!

 

์‹์ด ๋„ˆ๋ฌด ๊ธธ์–ด์ง€๊ณ , ์ƒ์†์ด๋ผ๋Š” ๊ฐœ๋…์ด ๋ฌด์ƒ‰ํ•ด์ง„๋‹ค. 

 

ํ•ด๊ฒฐ๋ฐฉ๋ฒ• => super

๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ๋ถˆ๋Ÿฌ์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์—๊ฒŒ ์ผ์„ ์‹œํ‚ค๊ณ , ๋ถ€๋ชจ๊ฐ€ ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ผ์€ ๋‚ด๊ฐ€ ํ•˜๊ธฐ!

 

super๋ฅผ ์“ฐ๋ฉด ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๊ณ , ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋ณด๊ธฐ์— ๋” ๊น”๋”ํ•ด์ ธ์„œ ์œ ์ง€ ๋ณด์ˆ˜ํ•˜๊ธฐ ์ข‹์•„์ง„๋‹ค. 


super ์˜ ๋‘๊ฐ€์ง€ ์šฉ๋ฒ•

 

super๋’ค์— ๊ด„ํ˜ธ()๊ฐ€ ๋ถ™์œผ๋ฉด ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์ด๋‹ค.

super ๋’ค์— ์ .์ด ๋ถ™์œผ๋ฉด ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๋ฉ”์„œ๋“œ๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค. 

 

class Person{
	constructor(name, first, second){
    	this.name = name;
        this.first = first;
        this.second = second;
    }
    sum() {
    	return this.first + this.second;
    }
}
class PersonPlus extends Person{
	constructor(name, first, second, third){
    	super(name, first, second);
        this.third = third;
    }
    sum() {
    	return super.sum() + this.third;
    }
	avg() {
    	return (this.first + this.second + this.third) / 3;
    }
}

const kim = new PersonPlus('kim', 10, 20, 30);
console.log('kim.sum()',kim.sum());
console.log('kim.avg()',kim.avg());

// ์ถœ๋ ฅ๊ฐ’
kim.sum() 60
kim.avg() 20