์๋ฐ์คํฌ๋ฆฝํธ์์ class๋?
์์ฑ์ํจ์ ์์ฑ
ํจ์ ํธ์ถ
๊ฐ์ฒด ์์ฑ
์ ๋ด๋ถ ๊ตฌํ
ํฌ๋กฑ์ ์์ ๊ณผ ์ํ์ฝ๋ฉ js ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ฐธ์กฐํ์ฌ
MDN์ ์๋ Class Model ์์์์ -> Constructor function ๊ณผ prototype์ ์ด์ฉํ์ฌ ์์์ ๊ตฌํํด ๋ณด์๋ค.
Class ๋ฅผ ์ด์ฉํ ์์
Javascript๋ ํ๋กํ ํ์ based ์ธ์ด
์๋๋ class ๊ฐ ์๊ธฐ ์ ์ ์์ฑ์ ํจ์๋ฅผ ์ด์ฉํ์ฌ ์์์ ๊ตฌํํ๋ค.
๋ฐ๋ผ์ Class ์ extends ๋ฅผ ํ๋กํ ํ์ ์ ํตํด ๊ตฌํํด๋ณด์
Constructor function (์์ฑ์ ํจ์) ๋ฐ ๊ฐ์ฒด ์์ฑ
1) Car (๋ถ๋ชจ) , Model (์์) ์ด๋ผ๋ ์์ฑ์ ํจ์ ์์ฑ
๊ฐ์์ Prototype ๊ฐ์ฒด๊ฐ ์์ฑ๋จ ( Car's prototype , Model's prototype)
2) New ์ฐ์ฐ์๋ฅผ ์ด์ฉํด mycar ๊ฐ์ฒด ์์ฑ
__proto__
: ๊ฐ์ฒด๊ฐ ๊ฐ์ง๊ฒ ๋๋ ์์ฑ
: ์์ ์ ์์ฑํ ์์ฑ์ ํจ์์ Prototype ์ด ๊ฐ๋ฆฌํจ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋จ
3) mycar.show() ํธ์ถ
1) mycar.show() ์ฐพ๊ธฐ -> X
2) __proto__๊ฐ๋ฆฌํค๋ show() ์ฐพ๊ธฐ -> O
Model์ show๋ฅผ ๋ณด๋ฉด Car์ ๋ฉ์๋ ์ธ present๋ฅผ ์ฌ์ฉํ๋๋ฐ ์๋ก ์ฐ๊ฒฐ์ด ๋์ด์์ง ์์์ undefined
๋ถ๋ชจ์ ์์ Prototype ๊ฐ์ฒด ์ฐ๊ฒฐ
Model ์ ํ๋กํ ํ์ ๊ฐ์ฒด์ __proto__ Car์ ํ๋กํ ํ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ํ๋ฉด ๋๋ค
๋นํ์ค ๋ฐฉ์ : Model.prototype.__proto__ = Car.prototype
* Model.prototype.__proto__๊ฐ Car ํ๋กํ ํ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ฒํจ
* __(์ธ๋๋ฐ)๋ก ์์ํ๋ ๊ฒ์ ์ง์ ํธ์ถํ์ง ์๋๊ฒ์ด ์ข๋ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ ๊ฒ์ด ์ข์
Object.create() ๋ฐฉ์
Model.prototype.show = Object.create(Car.prototype)
__proto__๊ฐ Carํ๋กํ ํ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์๋ก์ด Model ํ๋กํผํ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
์ด ๋ง๋ค์ด์ง ์๋ก์ด ๊ฐ์ฒด์ __proto__ ๋ Carํ๋กํ ํ์ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ธฐ ๋๋ฌธ์
present() ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
๋ถ๋ชจ(Car) ์์ฑ ์ ์์(Model)์์ ์ฌ์ฉ
Car.call (this, brand)
Model.show ํจ์๋ ๊ฒฐ๊ตญ this.present() ์์ Car ์ ์์ฑ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์
Car์ ์์๋ค์ ๊ฐ์ ธ์์ ์ฌ์ฉํด์ผํจ -> Car ํจ์๋ฅผ ์คํ
Car.call (this, brand)
Car์ this๋ฅผ Model ๋ก ๋ง๋ ๊ฐ์ฒด๋ก ๋ฐ๊ฟ์ ์คํ ์ํด์ผ๋ก์จ Car์ ์์๋ฅผ Model์์ ์ฌ์ฉํจ
( * Car์ this๋ Car์์์์ this์ด๊ธฐ ๋๋ฌธ์ Model์์ ๋ง๋ค์ด์ง mycar์ด๋ผ๋ ๊ฐ์ฒด๋ก ๋ฐ๊ฟ์ ์คํ)
์ด๋ ๊ฒ ์ง์ prototype์ ์ด์ฉํด ์์๊ด๊ณ๋ฅผ ๊ตฌํํจ์ผ๋ก์จ prototype ๊ณผ __ptoro__์ ๊ธฐ๋ฅ์ ๋์ผ๋ก ํ์ธํ๋ค.
ํ์ง๋ง ์ด๋ ๊ฒ ์ดํด๋ ํ์ง๋ง ๋ง๋ก ์ค๋ช ํ๊ธฐ๋ ๋ ์ด๋ ค์ prototype์ ์๋ฏธ์ ๊ทธ ์ฅ์ ์ ํ๋ง๋๋ก ์ ๋ฆฌํด ๋ณด์๋ค.
Prototype
ํจ์๊ฐ ์ ์ธ๋ ๋ ์๋์ผ๋ก ์ ์ธ๋๋ ์์ฑ ๊ฐ์ฒด
์ฌ์ฉํ๋ ์ด์
Constructor function (์์ฑ์ํจ์)๊ฐ๋ง๋ ๋ชจ๋ ๊ฐ์ฒด๋ prototype์ ํตํด ์ ์ธ๋ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๊ณต์ ํจ
์ฝ๋ ์ฌ์ฌ์ฉ -> ๋ฉ๋ชจ๋ฆฌ ํจ์จ ๋์์ง
ํ๋กํ ํ์ ์ ๋ํ ๋๋ง์ ์ ์๋ฅผ ํ๋ฉฐ ์ด๋ฒ๊ธ์ ๋ง๋ฌด๋ฆฌ!
'๐ JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] Closure ๊ณผ Currying (0) | 2021.04.09 |
---|---|
javascript ๊ณผ Promise ์ async await (0) | 2021.03.15 |
[JavaScript ] prototype vs __proto__ + ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ (0) | 2021.03.11 |
[Javascript] __proto__ ์ ์์ (0) | 2021.03.11 |
JavaScript ํจ์ํธ์ถ Call / Bind ๋ฉ์๋ (0) | 2021.03.11 |
๋๊ธ