October 28, 2020
์ผ๋จ ์ด๋ ค์ด ๋ง๋ก๋ Javascript ์์ ํด๋์ค๋ฅผ ์์ํด์ ์๋ธํด๋์ค๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ด๋ค.
class Person {
constructor(name, first, second) {
this.name = name
this.first = first
this.second = second
}
sum() {
return this.first + this.second
}
}
์ ์ ํฉ๊ณ ๊ตฌํ๋ ๊ธฐ๋ฅ ๋ง๊ณ ์ ์ ํ๊ท ๊ตฌํ๋ ๊ธฐ๋ฅ๋ ๋ฃ๊ณ ์ถ๋จ ๋ง์ด์ง.
๊ทธ๋์ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ค.
class Person {
constructor(name, first, second) {
this.name = name
this.first = first
this.second = second
}
sum() {
return this.first + this.second
}
avg() {
return (this.first + this.second) / 2
}
}
let kim = new Person('kim', 2, 4)
kim.sum()
6
kim.avg()
3
์ ๋๋ค.
๋ง์ฝ Person ์ด๋ผ๋ ํด๋์ค๊ฐ ๋ด๊ฐ ๋ง๋ ๊ฒ์ด ์๋ ๊ฐ์ ธ๋ค ์ฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ผ๋ฉด ๋ด๊ฐ ์์ ํ ๊ฒ์ด ์๋ณธ์ ๋ฎ์ด์ฐ๊ฒ ๋๊ฑฐ๋ ์์ ์ฌํญ ๋๋ฌธ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ชปํ๊ฒ ๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๊ณ ๋ง๋ค.
๋ Person() ์ด๋ผ๋ ํด๋์ค์ ๊ธฐ๋ฅ์ ์ต์ํ์ผ๋ก ์ ์งํ๋ฉด์ avg() ๊ฐ์ ๊ธฐ๋ฅ์ ๋ฐ๋ก ์ถ๊ฐํ๊ธฐ์๋ ๋ถ๋ด? ์ค๋ฌ์ด ๊ฒฝ์ฐ ๋ผ๊ณ ํ๋ค.
๋ง์ง๋ง์ผ๋ก ๊ทธ๋ฐ ์์ ์ฌํญ ๋๋ฌธ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ชปํ๊ฒ ๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์๋ ์๋ค๊ณ ํ๋ค.
์์ ์ฝ๋๋ฅผ ๊ณ ๋๋ก ๋ณต๋ถํด์ ํด๋์ค ์ด๋ฆ๋ง ๋ค๋ฅด๊ฒ ๋ง๋๋ ๊ฑฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๊ธฐ์ avg() ๋ฅผ ์ถ๊ฐํด ์ฃผ๋ ๊ฑฐ๋ค.
class Person {
constructor(name, first, second) {
this.name = name
this.first = first
this.second = second
}
sum() {
return this.first + this.second
}
}
class PersonPlus {
constructor(name, first, second) {
this.name = name
this.first = first
this.second = second
}
sum() {
return this.first + this.second
}
avg() {
return (this.first + this.second) / 2
}
}
๊ฒฐ๊ณผ๋ ์ํ๋ ๋๋ก ๊ฐ์ ์ป์ ์ ์๊ฒ ์ง๋ง ์ฌ๊ธฐ์๋ ์น๋ช ์ ์ธ ๋ฌธ์ ๊ฐ ์กด์ฌํ๋ค.
๊ทธ๊ฑฐ์จ ๋ฐ๋ก ์ค๋ณต ์ด๋ค.
์ด ์ค๋ณต ์ ๊ฑฐ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ฉด์ ์ฝ๋์ ์์ ์ค์ด๋ ๋ฐฉ๋ฒ์ ๋ญ๊น?
PersonPlus ํด๋์ค์์ ์ผ๋จ ์ค๋ณต์ ๋ค ์ง์ ๋ฒ๋ฆฐ๋ค.
class Person {
constructor(name, first, second) {
this.name = name
this.first = first
this.second = second
}
sum() {
return this.first + this.second
}
}
class PersonPlus {
avg() {
return (this.first + this.second) / 2
}
}
ํ์ง๋ง ์์ง ํ๋ ๋จ์๋ค.
๊ทธ๊ฒ์ class Person ์ ์์๋ฐ์ ์ค๋ ๊ณผ์ ์ด๋ค.
๋ถ๋ชจ๋์ ๋ชจ๋ ๊ณ์ข๋ฅผ ์ด์ ๋ด๊ป๋ก ํ๋ฅด๊ฒ ๋ง๋ค์.
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
}
}
extends Person ์ ํตํด ๋ถ๋ชจ๋์ ๊ณ์ข๋ฅผ ๋ด ํธ์ฃผ๋จธ๋๋ก ์ฐ๊ฒฐํ๋ค!
์ด์ ๋จ์ ๊ฒ์ ๋ถ๋ชจ์ ์์๋ฅผ ์จ๋จน๋๊ฑฐ๋ค!(??)
ํด๋์ค Person ์ด ๊ฐ์ง๊ณ ์๋ ์์๋ค์ด ์ด์ PersonPlus ์ ๋ก๋ฉ๋๋ค.
class๋ก ๋ง๋ ํ๋์ ๊ฐ์ฒด ์์ฑ์(๋ถ๋ชจ)์ ๊ธฐ๋ฅ ๋ฑ์ ์ถ๊ฐํ๋ ค๊ณ ํ ๋, ์์ ์์ฑ์๋ฅผ ๋ง๋ค์ด ๋ค์ด์ฌ ๊ฐ์ ๋ถ๋ชจ๋ก ๋ถํฐ ์์๋ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
๋ค๋ฅธ ์ฌ๋์ด ๋ง๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ ์ ์ง๋ณด์๋ฅผ ์ํด ์ง์ ์์ ์ ์ค๋ฅ๊ฐ ๋ ์ ์์ต๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ณต์ ํด์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ค๋ณต์ด ๋ง์์ ธ ์ ์ง๋ณด์์ ์ข์ง์๊ณ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ํจ์จ์ด ๋จ์ด์ง๋๋ค.
(extends ๋ถ๋ชจํด๋์ค๋ช - ๋ถ๋ชจ๋ก๋ถํฐ ๋ฐ์์์ ํ์ฅํ๋ค.)
์์ํด๋์ค๋
class ์์ํด๋์ค๋ช
extends ๋ถ๋ชจํด๋์ค๋ช
{
์ถ๊ฐํ ํจ์๋ช
() {}
}