๐Ÿ“– ํ”„๋กœํ† ํƒ€์ž… - 1

3661 ๋‹จ์–ด JavaScriptJavaScript

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ”„๋กœํ† ํƒ€์ž…์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณธ๋‹ค. ํ”„๋กœํ† ํƒ€์ž…์€ ๋‚ด์šฉ์ด ๋งŽ์•„์„œ ๋‘ํŽธ ์ •๋„์— ๋‚˜๋ˆ ์„œ ํฌ์ŠคํŒ…ํ•˜๊ฒŒ ๋  ๊ฒƒ ๊ฐ™๋‹ค.

์ด๋ฒˆ ํŽธ์—์„œ๋Š” ํ”„๋กœํ† ํƒ€์ž…์„ ํ†ตํ•œ ์ƒ์†์— ๋Œ€ํ•ด ๊ฐ€๋ณ๊ฒŒ ์•Œ์•„๋ณด์ž!

์ƒ์†

์ƒ์†(inheritance)์€ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•ต์‹ฌ๊ฐœ๋…์œผ๋กœ์จ ํŠน์ • ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค๋ฅธ ๊ฐ์ฒด๊ฐ€ ๋ฐ›์•„์™€์„œ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

Java๋‚˜ C++ ๊ฐ™์€ ๋‹ค๋ฅธ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์—์„œ๋Š” Class๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒ์†์„ ๊ตฌํ˜„ํ•œ๋‹ค.
ํ•˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํ”„๋กœํ† ํƒ€์ž…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์†์„ ๊ตฌํ˜„ํ•œ๋‹ค. MDN์— ํ”„๋กœํ† ํƒ€์ž…์— ๋Œ€ํ•œ ์„ค๋ช…์„ ๋ณด์ž.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ”„๋กœํ† ํƒ€์ž…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒ์†์„ ๊ตฌํ˜„ํ•œ๋‹ค. (ES2015๋ถ€ํ„ฐ class ํ‚ค์›Œ๋“œ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์œผ๋‚˜, ๋ฌธ๋ฒ•์ ์ธ ์–‘๋…์ผ ๋ฟ์ด๋ฉฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์—ฌ์ „ํžˆ ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜์˜ ์–ธ์–ด๋‹ค.)


ํ”„๋กœํ† ํƒ€์ž…

๊ทธ๋Ÿฌ๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ํ”„๋กœํ† ํƒ€์ž…์„ ํ†ตํ•ด ์ƒ์†์ด ์ด๋ค„์ง„๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋์œผ๋‹ˆ, ํ”„๋กœํ† ํƒ€์ž…์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ์˜ ์ƒ์†์€ ์ •ํ™•ํžˆ ์ด์•ผ๊ธฐํ•˜๋ฉด ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ ์ด๋ฃจ์–ด์ง„๋‹ค.

ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋ž€ ๋‹จ์ˆœํžˆ ํŠน์ • ๊ฐ์ฒด์˜ ๋ถ€๋ชจ ์—ญํ• ์„ ํ•˜๋Š” ๊ฐ์ฒด๋กœ์จ ์ƒ์†์„ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. ๋ถ€๋ชจ ๊ฐ์ฒด๋Š” ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ž์‹์—๊ฒŒ ๊ณต์œ  ํ”„๋กœํผํ‹ฐ๋ฅผ ์ œ๊ณตํ•˜๊ณ , ์ž์‹ ๊ฐ์ฒด๋Š” ๋ถ€๋ชจ์˜ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๋ถ€๋ชจ์˜ ํ”„๋กœํผํ‹ฐ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ, ์ž์‹ ๊ฐ์ฒด๋Š” [[prototype]] ์ ‘๊ทผ์ž, ์ฆ‰ .__proto__๋ฅผ ํ†ตํ•ด ๋ถ€๋ชจ์˜ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด์— ์ง์ ‘ ์ ‘๊ทผํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.


ํ”„๋กœํ† ํƒ€์ž…์„ ํ†ตํ•œ ์ƒ์†

์‚ฌ์‹ค ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ํ”„๋กœํ† ํƒ€์ž…์„ ํ†ตํ•œ ์ƒ์†์„ ๊ฒฝํ—˜ํ–ˆ๋‹ค.

๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉฐ ์ดํ•ดํ•ด๋ณด์ž.

const person = {
  age : 4
};

// ์ •์˜ํ•˜์ง€ ์•Š์€ hasOwnProperty ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
person.hasOwnProperty('age') // true

age๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ–๋Š” ๊ฐ„๋‹จํ•œ ๊ฐ์ฒด person์„ ์ •์˜ํ–ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ ํ›„์— person ๊ฐ์ฒด์— ์ •์˜ํ•˜์ง€ ์•Š์€ hasOwnProperty ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ–ˆ๋Š”๋ฐ true๋ผ๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์–ด๋–ป๊ฒŒ ๋œ ์ผ์ผ๊นŒ? person ๊ฐ์ฒด๋ฅผ ์ž์„ธํžˆ ๋œฏ์–ด๋ณด์ž.

person ๊ฐ์ฒด๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ •์˜ํ•œ ์†์„ฑ age๋ผ๋Š” ์†์„ฑ ์™ธ์—๋„ .__proto__ ๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ–ˆ๋˜ hasOwnProperty ๋ฉ”์„œ๋“œ๋„ ์ด ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰ person ๊ฐ์ฒด๋Š” ๋ถ€๋ชจ์˜ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด์— ์žˆ๋Š” hasOwnProperty๋ฅผ ์‹คํ–‰ํ•œ ๊ฒƒ์ด๋‹ค!

๊ทผ๋ฐ...๋‚œ ์•„๋ฌด๊ฒƒ๋„ ์ƒ์†ํ•œ์ ์ด ์—†๋Š”๋ฐ?๐Ÿค”


I'm your father. I'm Object.

์˜๋ฌธ์„ ํ’€๊ธฐ์œ„ํ•ด MDN์—์„œ Object์— ๊ด€ํ•œ ๊ธ€ ์ผ๋ถ€๋ฅผ ๊ฐ€์ ธ์™”๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ชจ๋“  ๊ฐ์ฒด๋“ค์€ Object์˜ ์ž์†์ด๋‹ค. ๋ชจ๋“  ๊ฐ์ฒด๋Š” Object.prototype์œผ๋กœ๋ถ€ํ„ฐ ๋ฉ”์„œ๋“œ์™€ ์†์„ฑ์„ ์ƒ์†๋ฐ›๋Š”๋‹ค.

MDN ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ •์˜ํ•œ person์ด๋ผ๋Š” ๊ฐ์ฒด๋„ Object์˜ ์ž์‹์ด๊ณ , Object.prototype ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ๋ฉ”์„œ๋“œ์™€ ์†์„ฑ์„ ์ƒ์† ๋ฐ›์•˜์„ ๊ฒƒ์ด๋‹ค!

๊ทธ๋Ÿฌ๋ฉด person์˜ ๋ถ€๋ชจ๋Š” Object์ด๊ณ , person.__proto__์˜ ์ •์ฒด๋Š” Object์˜ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด์ธ Object.prototype์˜€๋˜ ๊ฒƒ์ผ๊นŒ?

๊ทธ๋ ‡๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ •์˜ํ•œ person ๊ฐ์ฒด๋Š” Object์˜ ์ž์†์ด๊ณ , ๊ทธ๋ž˜์„œ ์šฐ๋ฆฐ Object.prototype ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”์„œ๋“œ์ธ hasOwnProperty๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ์ด๋‹ค!

์ฆ‰, person๊ฐ์ฒด๋Š” Object ๊ฐ์ฒด๋ฅผ ์ƒ์† ๋ฐ›์•˜๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.


์ „์ฒด์ ์ธ ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : https://poiemaweb.com/js-prototype

์ •๋ฆฌ

  • Object๋Š” ๋ชจ๋“  ๊ฐ์ฒด์˜ ๋ถ€๋ชจ์ด๋‹ค. (๋ชจ๋“  ๊ฐ์ฒด๋Š” Object ๊ฐ์ฒด๋ฅผ ์ƒ์†ํ•œ๋‹ค.)
  • ๋”ฐ๋ผ์„œ Object.prototype ๊ฐ์ฒด๊ฐ€ ๊ฐ–๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ถ€๋ชจ๋Š” prototype ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๋ฉ”์„œ๋“œ๋ฅผ ๊ณต์œ ํ•˜๊ณ , ์ž์‹ ๊ฐ์ฒด๋Š” ๊ฐ์ฒด๋Š” .__proto__์„ ํ†ตํ•ด ๋ถ€๋ชจ์˜ prototype ๊ฐ์ฒด์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋‹ค์Œ ํŽธ์—๋Š” ํ”„๋กœํ† ํƒ€์ž…์„ ํ†ตํ•œ ์ƒ์†๋ฐฉ๋ฒ•๊ณผ, ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž!

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ