2020. 9. 9. 15:53ใ์นดํ ๊ณ ๋ฆฌ ์์
๐ฅ prototype ์ด๋?
ES6๋ฌธ๋ฒ ์ด์ ์๋ Java Script์๋ class๊ฐ ์์๋ค๊ณ ํฉ๋๋ค. ๊ทธ๋์ prototype์ ํตํด์ ์ด๋ฅผ ํ๋ด๋ด๋ ค๊ณ ํ์ต๋๋ค. prototype์์ด ํจ์์ new๋ง ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด ์๋์ ๊ฐ์ด ๋ฉ๋๋ค.
function ํ์์ก() {
this.meat = pork;
this.sauce = sour;
}
let '๊นํผํ' = new ํ์์ก();
let '์ค๋๋ํ์์ก' = new ํ์์ก();
์ด๋ ๊ฒ ๊นํผํ๊ณผ ์ค๋๋ํ์์ก์ ๋ง๋ ๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ์ meat๊ณผ sauce๊ฐ ๊ฐ 2๊ฐ์ฉ 4๊ฐ๋ฅผ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. ํ์ง๋ง prototype์ ํตํด์ ๋น ๊ณต๊ฐ์ ๋ฃ๊ณ ์ถ์ ๋ฐ์ดํฐ๋ค์ ๋ค ๋ด์๋๊ณ ํ์์ก๋ผ๋ฆฌ ๊ทธ ๊ณต๊ฐ์ ๊ณต์ ํด์ ์ฌ์ฉํ๊ฒ ๋ง๋ค๋ฉด ์ด๋จ๊น์?
function ํ์์ก() {
ํ์์ก.prototype.meat = pork;
ํ์์ก.prototype.sauce = sour;
}
let '๊นํผํ' = new ํ์์ก();
let '์ค๋๋ํ์์ก' = new ํ์์ก();
let '์๊ณ ๊ธฐํ์์ก' = new ํ์์ก();
let '๊ฟ๋ฐ๋ก์ฐ' = new ํ์์ก();
//๋ช ๊ฐ๊ฐ ์ค๋ ํ์์ก์ meat๊ณผ sauce์ ๋ฉ๋ชจ๋ฆฌ ์ฐจ์ง๋ ๊ฐ๋ค.
ํ์์ก.prototype ์ด๋ผ๋ ๋น ๊ฐ์ฒด๊ฐ ์์ด์ ๊ทธ ๊ณณ์๋ค ๊ฐ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์์ฑ์ ํจ์๋ก ํ์์ก์ ์ฌ๋ฌ๊ฐ ๋ง๋ค์ด๋ ํ์์ก๋ค์ meat๊ณผ sauce์ ๋ฉ๋ชจ๋ฆฌ ์ฐจ์ง๊ฐ ๋์ด๋์ง ์์ต๋๋ค.
__prototype__ ์ ํ๊ฒ์ ์์ ํ๋กํ ํ์
์ ์ฃผ์๊ฐ์ ์กฐํํ ๋ ์ฌ์ฉ
object.create( x.prototype) = > ์ธ์๋ก ๋ค์ด๊ฐ ํ๋กํ ํ์
์ ๋ฐํ์ผ๋ก ์๋ก์ด ํ๋กํ ํ์
์ ๋ง๋ ๋ค!
swallow copy ์ deep copy์ ์ฐจ์ด์ธ ์ ๊ธฐ์ตํด์ค!
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ OOP๊ฐ ๊ธฐ๋ณธ์ธ ์ธ์ด๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ๋ง์ฝ์ create์ผ๋ก ํ๋กํ ํ์
์ ์นดํผํ๋ค๋ฉด ๋ฐ๋์
XXX.prototype.constructor = XX ์ผ๋ก ์ค์ ์ ํด์ค์ผํ๋ค. -> ์ด๋ฐ๊ฑธ ๋ชฝํคํจ์น๋ผ๊ณ ํ๋ค.
๋ ์๋ก ๋ง๋ ๊ฐ์ฒด๋ฅผ ์์ฒ๋ผ ์ฐ๊ฒฐํด๋ ์๋ณธ์์์ this๊ฐ ์ธ์์ด ์๋๊ธฐ ๋๋ฌธ์ XX.call( this, argument) ๋ฅผ ํด์ค์ผํ๋ค.
์ง๊ธ์ Class ๊ฐ ์์ด์ ๊ด์ฐฎ๋ค. constructor๋ก ๊ฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ extends๋ก ๊ธฐ์กด์ ์๋ class์ ๋ค๋ฅธ ๊ฒ๋ค์ ์ถ๊ฐํ ์ ์๋ค. ๋ super๋ฅผ ํตํด์ This๋ฅผ ์ ํํด์ ํ๊ณ ์ถ์ ๊ธฐ๋ฅ์ ๊ตฌ์ฐํ ์ ์๋ค. class ์์ instance๋ this๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
๋ถ๋ชจ์ ๊ฐ์ constructor ์๋ ๋ถ๋ถ์ ์๋ต์ด ๊ฐ๋ฅํ๋ค.
๋คํ์ฑ! ์๋ณธ์ ๊ฐ์ง๋ง ์๋์ ๋ค๋ฅด๊ฒ ํ๋๊ฒ!
Overloading ํ๋ผ๋ฏธํฐ๊ฐ ๋ฌ๋ผ์ ๊ฐ์ด ๋ค๋ฅด๊ฒ ๋์ค๋๊ฒ( ์ด๊ฑฐ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ต๋๋ค.) Overriding ๋ฉ์๋๊ฐ ๋ฌ๋ผ์ ๊ฐ์ด ๋ค๋ฅธ ๊ฒ!