๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“’ JavaScript

[Javascript] Prototype ์„ ํ†ตํ•œ ์ƒ์† ๊ณผ __proto__ +(MDN ์˜ˆ์ œ๋กœ ๋ณด๋Š” Prototype ์ƒ์†)

by Tamii 2021. 3. 12.
๋ฐ˜์‘ํ˜•

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ 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's prototype์— __proto__ ์†์„ฑ์ด ์‹ค์ˆ˜๋กœ ๋น ์กŒ์Šต๋‹ˆ๋‹ค.

 

 

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์„ ํ†ตํ•ด ์„ ์–ธ๋œ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ๊ณต์œ ํ•จ

์ฝ”๋“œ ์žฌ์‚ฌ์šฉ -> ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ ๋†’์•„์ง 

 

 

 

ํ”„๋กœํ† ํƒ€์ž…์— ๋Œ€ํ•œ ๋‚˜๋งŒ์˜ ์ •์˜๋ฅผ ํ•˜๋ฉฐ ์ด๋ฒˆ๊ธ€์€ ๋งˆ๋ฌด๋ฆฌ!

๋Œ“๊ธ€