๐ŸŽ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (9) ๊ฐ์ฒด ๊ฐ„ ์ „ํ†ต์  ๋ฐฉ์‹์˜ ์ƒ์†๋ฐฉ์‹, __proto__

๐Ÿฆธ๐Ÿปโ€โ™‚๏ธprototype-inheritance

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Class ๋ฌธ๋ฒ•์ด ์•„๋‹Œ ์ „ํ†ต์  ๋ฐฉ์‹์œผ๋กœ ์ƒ์†์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฒ•์— ๋Œ€ํ•œ ๊ธ€์ด๋‹ค.

let pikachu = {
  attack: 90,
  defence: 50,
  skillOne: 'toSlapYourFace',
  skillTwo: 'lightning shock',
}

let raichu = { cuteness: 100, specialSkill: 'jungwangsukwha', canEvolve: true }

์—ฌ๊ธฐ ํ”ผ์นด์ธ„์™€ ๋ผ์ด์ธ„๊ฐ€ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์†์„ฑ์„ ์ˆ˜์ž‘์—…์œผ๋กœ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ๋‹ค.

ํ˜„์žฌ ๋‘ ๊ฐ์ฒด๋Š” ์„œ๋กœ ๋‚จ๋‚จ์ด๋‹ค. 1๋„ ์ƒ๊ด€์—†๋Š” ์‚ฌ์ด์ด๋‹ค.

๐ŸŒ‰__proto__

์œ„์˜ ๋‹ค์†Œ ๋‚œํ•ดํ•œ ๋“ฏํ•œ ์˜ˆ์‹œ๋ฅผ ๋“ค๊ธด ํ–ˆ๋Š”๋ฐ ์‚ฌ์‹ค,

let superObj = { superVal: 'super' } // === pikachu
let subObj = { subVal: 'sub' } //  === raichu

๋ž‘ ๋˜‘๊ฐ™์€ ๋ฐฉ์‹์ด๋‹ค. ๋” ์žฌ๋ฐŒ๊ฒŒ ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ์„ ๋ฟ..

์—ฌํ•˜ํŠผ ๋‘ ๊ฐ์ฒด๋Š” ์„œ๋กœ ๋‚จ๋‚จ์ธ ์ƒํƒœ์ธ๋ฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—์„œ๋Š” Class ๋ฌธ๋ฒ•์ด ์•„๋‹Œ, ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ์ž์‹์œผ๋กœ ๋งŒ๋“ค์–ด ๋ฒ„๋ฆด ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

์–ด๋–ป๊ฒŒ?

๋ฐ”๋กœ ๋ผ์ด์ธ„์˜ ์›ํ˜•์ด ๋ฌด์—‡์ธ๊ฐ€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” (๋ผ์ด์ธ„์˜ ์›ํ˜•์€ ํ”ผ์นด์ธ„ ใ…Žใ…Ž..๐Ÿฅฐ)

prototype link ๋ฅผ ์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

raichu.__proto__ = pikachu;
{attack: 90, defence: 50, skillOne: "toSlapYourFace", skillTwo: "lightning shock"}
raichu.cuteness
100
raichu.specialSkill
"jungwangsukwha"
raichu.canEvolve
true

๋‹น์—ฐ ๋ผ์ด์ธ„์˜ ๊ธฐ๋ณธ ์†์„ฑ์„ ์„ ํƒํ•˜๋ฉด ์ž๊ธฐ๊ฐ€ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฐ’์ด๋ฏ€๋กœ ๊ณ ๋Œ€๋กœ ๋‚˜์˜จ๋‹ค.

๊ทผ๋ฐ ๋งŒ์•ฝ ๋ผ์ด์ธ„.์Šคํ‚ฌOne ์ฒซ๋ฒˆ์งธ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ญ๊ฐ€ ๋‚˜์˜ฌ๊นŒ? ๋ผ์ด์ธ„์˜ ์†์„ฑ์—” ์Šคํ‚ฌOne ์ด ์—†์–ด์„œ ์•„๋ฌด๊ฒƒ๋„ ์•ˆ๋‚˜์˜ฌ๊นŒ?

raichu.skillOne
;('toSlapYourFace')
raichu.skillTwo
;('lightning shock')

ํ”ผ์นด์ธ„ (์›ํ˜•๊ฐ์ฒด) ์˜ ์‹ธ๋Œ€๊ธฐ ์Šคํ‚ฌ์„ ๊ทธ๋Œ€๋กœ ๋ฌผ๋ ค๋ฐ›์•˜๋‹ค!

๋ผ์ด์ธ„์˜ ์†์„ฑ์—๋Š” skillOne, skillTwo ์„ ์•ˆ๊ฐ–๊ณ  ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์Šคํ‚ฌ์„ ๋ฌผ๋ ค๋ฐ›์•˜๋‹ค!

raichu.__proto__ = pikachu

์–ธ๋”๋ฐ” proto ๋งํฌ๋ฅผ ํ†ตํ•ด ๋ผ์ด์ธ„๊ฐ€ ํ”ผ์นด์ธ„์˜ ์ž์‹์ด๋‹ค. ํ”ผ์นด์ธ„์˜ ์†์„ฑ์„ ๋ชจ๋‘ ๋ฌผ๋ ค๋ฐ›๋Š”๋‹ค ๋ผ๊ณ  ๋งํฌ๋ฅผ ๊ฑธ์–ด์ค€๊ฑฐ๋‹ค.

์ž‘๋™ ์›๋ฆฌ๋Š” Javascript ์—์„œ๋Š” ์šฐ์„ ์ ์œผ๋กœ ๋ผ์ด์ธ„์—์„œ ์Šคํ‚ฌ์›๊ณผ ์Šคํ‚ฌํˆฌ ์†์„ฑ์„ ๊ฐ–๊ณ  ์žˆ๋Š”์ง€ ๋จผ์ € ์ฐพ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์—†๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์–ธ๋”๋ฐ” proto ๋ผ๋Š” ์†์„ฑ์„ ๋‹ด๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์— (ํ”ผ์นด์ธ„) ๋“ค์–ด๊ฐ€์„œ ์Šคํ‚ฌ์›๊ณผ ์Šคํ‚ฌํˆฌ ์†์„ฑ์„ ์ฐพ๋Š”๋‹ค.

์žˆ๋‹ค!

๊ทธ๋Ÿผ ์“ด๋‹ค! ๋ผ์ด์ธ„๋Š” ํ”ผ์นด์ธ„์˜ ์†์„ฑ์„ ๋ฌผ๋ ค๋ฐ›๋Š”๋‹ค!

๐ŸŽƒํ”ผ์นด์ธ„์—๊ฒŒ ๋ฌผ๋ ค๋ฐ›์€ ์†์„ฑ์„ ๋ฐ”๊ฟ”๋ณด๊ธฐ

ํ”ผ์นด์ธ„์˜ ๊ณต๊ฒฉ๋ ฅ์€ ํ˜„์žฌ attack : 90 ์ด๋‹ค.

ํ”ผ์นด์ธ„์˜ ๊ณต๊ฒฉ๋ ฅ๋„ ๋ผ์ด์ธ„๊ฐ€ ์ƒ์†๋ฐ›์•˜์œผ๋ฏ€๋กœ,

raichu.attack
90

๋ช…์ƒ‰์ด ๋ผ์ด์ธ„์ธ๋ฐ ๊ณต๊ฒฉ๋ ฅ์ด ํ•œ ๋‘๋ฐฐ๋Š” ๋˜์–ด์•ผ์ง€ ์•Š๊ฒ ๋‚˜.

๋ฐ”๊ฟ”๋ณด์ž.

raichu.attack = 180
180

์—ฌ๊ธฐ์„œ ์˜๋ฌธ์ด ๋“œ๋Š”๊ฑฐ๋‹ค. ์–ด๋ผ ๋ผ์ด์ธ„ ๊ณต๊ฒฉ๋ ฅ ๋ฐ”๊ฟจ๋Š”๋ฐ.. ํ”ผ์นด์ธ„ ๊ณต๊ฒฉ๋ ฅ๋„ ๋ฐ”๋€Œ๋‚˜์š”?

๋‹ต์€ ์•„๋‹ˆ.

pikachu.attack
90

ํ”ผ์นด์ธ„์˜ ๊ณต๊ฒฉ๋ ฅ์€ ์—ฌ์ „ํžˆ ๋˜‘๊ฐ™๋‹ค.

์ฆ‰, ๋ผ์ด์ธ„์˜ (์ž์‹ ๊ฐ์ฒด ๋‚ด ์š”์†Œ์˜) ๊ฐ’์„ ๋ฐ”๊ฟจ์„ ๋ฟ __proto__๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์˜ (ํ”ผ์นด์ธ„) ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๋Š”๊ฒŒ ์•„๋‹ˆ๋‹ค.

ํ”ผ์นด์ธ„ ๊ฐ์ฒด์˜ proto ๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒŒ ์•„๋‹ˆ๋‹ค.

๐Ÿคค์š”์•ฝ

__proto__ ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ์ž์‹์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค.

raichu.__proto__ = pikachu;
{attack: 90, defence: 50, skillOne: "toSlapYourFace", skillTwo: "lightning shock"}
raichu.cuteness
100
raichu.specialSkill
"jungwangsukwha"
raichu.canEvolve
true

์žฅ์ ์€ ์œ ์—ฐํ•จ, ๋‹จ์ ์€ ์‚ฌ๊ณ  ํ˜น์€ ๋ณต์žก์„ฑ์„ ์•ผ๊ธฐํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. (์ผ๋‹จ ๋„˜์–ด๊ฐ€์ž)

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œ์ค€์—์„œ๋Š” __proto__ ๋ฅผ ์ธ์ •ํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค๊ณ  ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋ผ์šฐ์ € ํ˜น์€ javascript ์‹œ์Šคํ…œ๋“ค์ด __proto__๋ฅผ ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•ด์„œ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์‹ค์ƒ์˜ ํ‘œ์ค€์ธ ์…ˆ์ด๋ผ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ƒ์†์„ ๋ฐ›๋Š” ๊ฒƒ์€ ์ •์„์ด ์•„๋‹ˆ๋ผ๊ณ  ํ•œ๋‹ค.


Written by@[DotoriMook]
ํ”„๋ก ํŠธ์—”๋“œ ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž ๋„ํ† ๋ฆฌ๋ฌต์˜ ๊ธฐ์ˆ ๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ ์ž…๋‹ˆ๋‹ค.

GitHubMediumTwitterFacebook