Prototype

๋‚จ์œคํ•˜ยท2024๋…„ 2์›” 19์ผ

JS

๋ชฉ๋ก ๋ณด๊ธฐ
5/9
post-thumbnail

๐ŸŽˆ Prototype

๐Ÿญ ์ƒ์†

  • bmw / benz / audi._._proto__ = car; ๋ฅผ ํ†ตํ•ด์„œ ์ƒ์†์„ ๊ตฌํ˜„
  • ํ•ด๋‹น ๊ฐ์ฒด(bmw)์—์„œ ์†์„ฑ(wheels)์„ ์ฐพ์ง€ ๋ชปํ•œ๋‹ค๋ฉด proto์—์„œ ์ฐพ๋Š”๋‹ค.

๐Ÿต Prototype Chain

  • car๋ฅผ ์ƒ์† ๋ฐ›์€ bmw์—๊ฒŒ ์ƒ์† ๋ฐ›๊ธฐ

  • ์ถœ๋ ฅ

  • ๊ด€๊ณ„๋„

  • ์œ„์—์„œ x5๊ฐ€ navigation์„ ์ฐพ๋Š”๋‹ค๋ฉด ํ•œ๋ฒˆ์˜ proto๊ฐ์ฒด๋งŒ ์˜ฌ๋ผ๊ฐ€๊ณ , drive()๋ฅผ ์ด์šฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด proto๋ฅผ 2๋ฒˆ ์˜ฌ๋ผ๊ฐ„๋‹ค.

  • for in ๋ฌธ์„ ๋Œ๋ ค๋ณธ๋‹ค๋ฉด proto ๊ฐ์ฒด๊นŒ์ง€ ๋‹ค ๋‚˜์˜จ๋‹ค

  • keys์™€ values์™€ ๊ฐ™์€ ๊ฐ์ฒด๋‚ด์žฅ๋ฉ”์„œ๋“œ๋Š” ์ƒ์†๋œ ํ”„๋กœํผํ‹ฐ๋Š” ์•ˆ๋‚˜์˜จ๋‹ค.

  • hasOwnPropery๋Š” ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” property๋งŒ true๋ฅผ ํ•ด์ค€๋‹ค.

  • ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ์ƒ์†๋ฐ›๊ธฐ

  • ์ด๊ฑด ๋งค๋ฒˆ ํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ท€์ฐฎ๋‹ค

  • ์œ„์˜ ๋ฐฉ๋ฒ•์€ ์ƒ์„ฑ์žํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ๊ฐ์ฒด์— --proto--๋ฅผ ์„ค์ •ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. (์ƒ์„ฑ์žํ•จ์ˆ˜์˜ ํ”„๋กœํ† ๊ฐ์ฒด ์„ค์ • ๋ฐฉ์‹)

  • ์ด๋ ‡ใ„ฑ๋ฐ ํ”„๋กœํ† ํƒ€์ž…์„ ์ด์šฉํ•˜๋ฉด ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ค„์ผ์ˆ˜์žˆ๋‹ค ์ด๋ ‡๊ฒŒ ํ•œ๋ฒˆ๋งŒ ์ž‘์—…ํ•˜๋ฉด ์ƒ์„ฑ์ž๋กœ ๋งŒ๋“  ๋ชจ๋“  ๊ฐ์ฒด์— ์ผ์ผํžˆ ์ž‘์—…ํ•ด์ค„ ํ•„์š”๊ฐ€ ์—†๋‹ค ์ƒ์„ฑ์žํ•จ์ˆ˜๊ฐ€ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด๋‚ผ๋•Œ์— ๊ทธ ๊ฐ์ฒด๋Š” ์ƒ์„ฑ์ž์˜ ์ธ์Šคํ„ด์Šค๋ผ๊ณ  ํ•œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ด๋ฅผ ํ™•์ธํ• ์ˆ˜ ์žˆ๋Š” instance of ์—ฐ์‚ฐ์ž๊ฐ€ ์žˆ๋‹ค. instance of๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ์ฒด์™€ ์ƒ์„ฑ์ž๋ฅผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋Š” ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ๊ทธ ์ƒ์„ฑ์ž๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ ๊ฒƒ์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
์ƒ์„ฑ์ž๋กœ ๋งŒ๋“  ๋ชจ๋“  ๊ฐ์ฒด๋Š” constructor ํ”„๋กœํผํ‹ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค

  • z4๋Š” BMW์˜ ์ธ์Šคํ„ด์Šค์ด๋‹ค. ์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ BMW๋ฅผ ์ด์šฉํ•ด์„œ z4๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • ์œ„์ฒ˜๋Ÿผ ์ƒ์„ฑ์ž๋กœ ๋งŒ๋“ ๊ฐ์ฒด์ด๊ธฐ์— constructor๋ฅผ ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • ์œ„์ฒ˜๋Ÿผ ํ”„๋กœํ† ํƒ€์ž…์„ ๋ฎ์–ด์“ฐ๋ฉด constructor ์†์„ฑ์ด ์‚ฌ๋ผ์ง€๊ธฐ์— ํ•˜๋‚˜์”ฉ prototype์— ์†์„ฑ์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

  • ์œ„์ฒ˜๋Ÿผ ์ˆ˜๋™์œผ๋กœ constructor๋ฅผ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค

  • ์ด๋ ‡๊ฒŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ช…ํ™•ํ•œ constructor๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๊ธฐ์— ๊ฐœ๋ฐœ์ž์— ์˜ํ•ด ์–ธ์ œ๋“ ์ง€ ์ˆ˜์ •๋  ์ˆ˜ ์žˆ๋‹ค.

  • ์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์ด๋ฉด ์–ธ์ œ๋“  ์†์„ฑ์„ ๋ณ€๊ฒฝํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

  • ์ด๋Ÿด๋•Œ๋Š” ํด๋กœ์ €๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.

  • ์œ„์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜๋ฉด ์ฝ”๋“œ์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋งŒ ์žˆ์œผ๋ฉฐ ์ˆ˜์ •ํ•ด์ฃผ์ง€๋Š” ๋ชปํ•œ๋‹ค.

๐Ÿถ prototype vs --proto--

  • ์„œ๋กœ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค. Person ํ•จ์ˆ˜์˜ prototype์†์„ฑ์„ ํ†ตํ•ด์„œ Person์˜ prototype๊ฐ์ฒด์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ณ 
  • Person์˜ prototype ๊ฐ์ฒด์˜ constructor ์†์„ฑ์„ ํ†ตํ•ด์„œ Person ํ•จ์ˆ˜์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

  • ์ด๋ ‡๊ฒŒ๋˜๋ฉด ๊ฐ์ฒด๋ฅผ ์ฐ์–ด๋‚ด๋Š” ๊ณต์žฅ์ธ Person์ด๋ผ๋Š” constructor function์„ ๋งŒ๋“  ๊ฒƒ์ด๋‹ค.

  • Person ์˜ ์ƒ์„ฑ์žํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ๋งŒ๋“  ๊ฐ์ฒด๋Š” ์œ„์™€ ๊ฐ™๋‹ค.
    ๊ธฐ์กด์— Personํ•จ์ˆ˜์—์„œ ์„ค์ •ํ•ด์ค€ ์†์„ฑ๊ฐ’๊ณผ ์ž์‹ ์˜ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์ธ Person์˜ prototype๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” --proto-- ์†์„ฑ๊ฐ’์ด ์„ค์ •๋˜์–ด ์žˆ๋‹ค.
  • ์ด๋ฅผํ†ตํ•ด์„œ ์ž์‹ ์ด ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์€ ์†์„ฑ์„ ์ฐพ์œผ๋ ค๊ณ  ํ•  ๋•Œ, --proto-- ์†์„ฑ์„ ํ†ตํ•ด์„œ prototype ๊ฐ์ฒด์— ํ•ด๋‹น ์†์„ฑ์ด ์ •์˜ ๋˜์–ด์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•ด๋ณธ๋‹ค.
  • ๋งŒ์ผ ํ•ด๋‹น prototype๊ฐ์ฒด์—๋„ ์†์„ฑ ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด, ๊ทธ prototype๊ฐ์ฒด ์œ„์— ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋’ค์ ธ๋ณด๊ฒŒ ๋œ๋‹ค.
profile
๊ฐœ๋ฐœ ์ผ์ง€ ๋ธ”๋กœ๊ทธ

0๊ฐœ์˜ ๋Œ“๊ธ€