์๋ ํ์ธ์ Foma๐ป ์ ๋๋ค!
์ด๋ฒ ๊ธ๋ ์ญ์ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฐฐ์ด 'ํด๋์ค'๋ฅผ ์ ๊ฐ ์ดํดํ ๋ฐฉ์์ผ๋ก ๋ณต์ตํ๋ ์ฐจ์์์
์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
๋ฐ๋ก ์์ํ ๊ฒ์~
ํด๋์ค๋?
ํด๋์ค๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ํน์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํด ๋ณ์์ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ์ผ์ข ์ ํ๋ก, ๊ฐ์ฒด๋ฅผ ์ ์ํ๊ธฐ ์ํ ์ํ(๋ฉค๋ฒ ๋ณ์)์ ๋ฉ์๋(ํจ์)๋ก ๊ตฌ์ฑ๋๋ค. - ์ํค ๋ฐฑ๊ณผ -
์ฆ, ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ฝ๊ฒ ๋ฏธ๋ฆฌ ํ์ ๋ง๋ค์ด ๋๋ ๊ฒ์ ๋๋ค.
ํด๋์ค ์์ฑํ๊ธฐ
์์ ํด๋์ค๋ฅผ ๋ถ์ฌ์ค ๋ค constructor(์์ฑ์)๋ฅผ ์ด์ฉํด์ ์ด๊ธฐํ ํด์ค๋ค.
๋ฉ์๋๋ ํ๋กํผํฐ๋ฅผ ์์ฑํ๊ฑฐ๋ ์ถ๊ฐํ๋ ๋ฒ์ ์ผ๋ฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋์ ๋์ผํ๋ค.
class Player {
constructor(name) {
this.height = 180
this.name = name
}
jump(space) {
this.height += space
console.log(`${this.name}์ด ์ ํ๋ฅผ ํ์ฌ ${this.height}๊ฐ ๋์์ต๋๋ค.`)
}
run() {
console.log(`${this.name}์ด ๋ฐ๊ณ ์์ต๋๋ค.`)
}
}
ํด๋์ค ์์๋ฐ๊ธฐ
ํด๋์ค๋ฅผ ์์๋ฐ๋ ๋ฐฉ๋ฒ์ ํด๋์ค ์ด๋ฆ ๋ค์ extends๋ฅผ ๋ถ์ด๊ณ ์์๋ฐ์ ํด๋์ค ๋ฅผ ์ฑํํ๋ฉด ๋ฉ๋๋ค.
์ผ๋ฐ ํจ์๋ก ๋ง๋ ๊ฐ์ฒด์ ๊ฐ์ด ๋ถ๋ชจ๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
//extends๋ฅผ ์ฌ์ฉํ์ฌ ์์๋ฐ์
class BasketBallPlayer extends Player {
shoot() {
console.log("Shoot")
}
}
//BasketBallPlayer๋ ์์ฑ์๊ฐ ์๋๋ผ๋ ๋ถ๋ชจ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ๋ค.
let basket = new BasketBallPlayer("Jordan")
//๋ถ๋ชจ๊ฐ ์๋ ๋ฉ์๋๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉ๊ฐ๋ฅ
basket.jump(50)
ํด๋์ค์ ์ผ๋ฐ ํจ์ ๋ค๋ฅธ์
์์์ ์ดํด๋ณด๋ฉด ํด๋์ค๋ก ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ์ผ๋ฐ ํจ์๋ก ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋๊ฐ์ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๋ค.
ํ์ง๋ง ํด๋์ค๋ ์ผ๋ฐ ํจ์๋ก ๋ง๋๋ ๊ฒ๊ณผ๋ ๋ค๋ฅธ ์ ์ด ๋ช ๊ฐ์ง ์๋ค.
1. ํด๋์ค๋ ํธ์ถํ ์ ์๋ค.
ํด๋์ค๋ก ๋ง๋ ๊ฐ์ฒด๋ฅผ ํธ์ถํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
function Person {...}
Person() //OK
class User {...{
User() //ERROR
2. ์ถ๋ ฅ ์ ํด๋์ค ์ด๋ฆ์ผ๋ก ์ถ๋ ฅ๋จ
console.log(User) //[class User]
console.log(Person) //[Function: Person]
3. ํด๋์ค ์์ ๋ฉ์๋๋ ์ด๊ฑฐํ ์ ์๋ค.
์ผ๋ฐ ํจ์๋ก ๋ง๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์ด๊ฑฐํ๋ฉด ๋ฉ์๋๊น์ง ์ด๊ฑฐํ ์ ์์ง๋ง ํด๋์ค๋ ๊ทธ๋ ์ง ์๋ค.
๊ทธ ์ด์ ๋ ํด๋์ค์ enumerable ํ๋กํผํฐ ํ๋๊ทธ๊ฐ false๋ก ๋์ด์๊ธฐ ๋๋ฌธ์ด๋ค.
for (let i in user) {
console.log(i)
}
/*
uid
name
age
*/
for (let i in person) {
console.log(i)
}
/*
uid
name
age
getInfo
*/
ํด๋์ค ํ๋ ๋ฐ์ธ๋ฉ๋ ๋ฉ์๋ ๋ง๋ค๊ธฐ
class Button {
constructor(value) {
this.value = value;
}
click() {
console.log(this.value);
}
}
let button = new Button("์๋
ํ์ธ์.");
setTimeout(button.click, 1000); // undefined
//์ด๊ฒ์ ํด๊ฒฐํ๊ธฐ ์ํด์ ํ์ดํ ํจ์๋ฅผ ํตํด ๋ํ์ ํด์ค ํจ์๋ฅผ ์ ๋ฌํ๋ฉด ๋๋ค.
class AnotherButton {
constructor(value) {
this.value = value;
}
click = () => {
console.log(this.value);
}
}
let button1 = new AnotherButton("ํ์ด")
setTimeout(button1.click,1000) //ํ์ด
๋์ ์ผ๋ก ํด๋์ค ๋ง๋ค๊ธฐ
ํจ์๋ฅผ ์ด์ฉํด์ ๋์ ์ผ๋ก ํด๋์ค๋ฅผ ์์ฑํ ์ ์๋ค.
function makePerson() {
return class {
walk() {
console.log("walk")
}
}
}
ํจ์๋ฅผ ์ด์ฉํด์ ์์๋ ๊ฐ๋ฅํ๋ค.
class P extends makePerson() {}
let p = new P()
p.walk() //walk
์ค๋ฒ๋ผ์ด๋ฉ
๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ
์๋ธํด๋์ค ๋๋ ์์ ํด๋์ค๊ฐ ์์ ์ ์ํผํด๋์ค๋ค ๋๋ ๋ถ๋ชจ ํด๋์ค๋ค ์ค ํ๋์ ์ํด ์ด๋ฏธ ์ ๊ณต๋
๋ฉ์๋๋ฅผ ํน์ ํ ํํ๋ก ๊ตฌํํ๋ ๊ฒ - ์ํค ๋ฐฑ๊ณผ -
์ฆ, ๋ถ๋ชจ ํด๋์ค์์ ์ด๋ฏธ ๊ตฌํ๋ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค์์ ๋ฐ๊พธ๋ ๊ฒ์ ๋๋ค.
super.๋ฉ์๋์ด๋ฆ(ํ๋ผ๋ฏธํฐ)๋ฅผ ์์ฑํ๊ณ ์ดํ์ ์ถ๊ฐํด์ค ๋ฉ์๋๋ฅผ ๊ตฌํํด์ฃผ๋ฉด ๋ฉ๋๋ค.
class ValleyBallPlayer extends Player {
spike() {
console.log("Spike")
}
jump(space) {
super.jump(space)
this.spike()
}
}
์์ฑ์ ์ค๋ฒ๋ผ์ด๋ฉ
๋ง์ฝ ๋ถ๋ชจ๊ฐ ์์ฑ์๊ฐ ์๊ณ ์์์ ์์ฑ์๋ฅผ ๋ค๋ฅด๊ฒ ๊ตฌํํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด super(ํ๋ผ๋ฏธํฐ)๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
class FootBallPlayer extends Player {
constructor(name,shoeSize) {
//๋ถ๋ชจ๊ฐ ์๋ ์์ฑ์๋ super๋ฅผ ์จ์ค์ผํจ.
super(name)
this.shoeSize = shoeSize
}
}
Reference
'๐ Language > Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] ๋น๋๊ธฐ ์ฒ๋ฆฌํ๋ ๋ฒ ์์๋ณด๊ธฐ(Callback,Promise,Async & Await) (0) | 2022.02.15 |
---|---|
[JS] Static,Protected,Private์ ๋ํด ์์๋ณด๊ธฐ (0) | 2022.02.15 |
[JS] ํ๋กํ ํ์ (Prototype) ๋ค๋ค๋ณด๊ธฐ (0) | 2022.02.12 |
[JS] ํ๋กํผํฐ ์ต์ (ํ๋๊ทธ) ๋ค๋ฃจ๊ธฐ(Property Flag) (0) | 2022.02.12 |
[JS] JSON๊ณผ ๊ฐ์ฒด ๋ค๋ฃจ๊ธฐ (0) | 2022.02.05 |
๋๊ธ