๐Ÿธ [JavaScript] property attribute

hnyoojinยท2024๋…„ 9์›” 8์ผ

๐Ÿธ JS ๋งˆ์Šคํ„ฐ ๋˜๊ธฐ

๋ชฉ๋ก ๋ณด๊ธฐ
15/19
post-thumbnail

๋‹ค์‹œ property๋กœ ๋Œ์•„๊ฐ€์ž.

JavaScript ์—”์ง„์€, property attribute ๋ฅผ ์ž๋™ ์ •์˜ํ•œ๋‹ค.
(property arrtibute : property์˜ ์ƒํƒœ)

property attribute๋Š” JavaScript ์—”์ง„์ด ๊ด€๋ฆฌํ•˜๋Š” internal slot์ด๋‹ค.

internal slot & internal method ๋‚ด๋ถ€ ์Šฌ๋กฏ๊ณผ ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ

internal slot๊ณผ internal method๋Š”, JavaScript์˜ ๊ตฌํ˜„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค.
์ง์ ‘์ ์ธ ์ ‘๊ทผ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, Object.getOwnPropertyDescriptor ๋ฉ”์„œ๋“œ๋กœ ์ผ๋ถ€ ๊ฐ„์ ‘ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด,
์ฒซ ๋งค๊ฐœ๋ณ€์ˆ˜์—๋Š” ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ ,
๋‘๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜์—๋Š” property key๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ „๋‹ฌํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฉ”์„œ๋“œ๋Š”, property arribute ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” Property Descriptor ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ด property ๋ผ๋Š” ๊ฑด, ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„์–ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

data property & accessor property ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์™€ ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ

์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” property๋Š”,
์ฆ‰ key์™€ value๋กœ ๊ตฌ์„ฑ๋˜๋Š” property๋Š”, data property ์— ํ•ด๋‹นํ•œ๋‹ค.

[[Value]] [[Writable]] [[Enumerable]] [[Configurable]] ์ด data property arribute์ด๋‹ค.


๋ฐ˜๋ฉด, ์ž์ฒด์ ์ธ ๊ฐ’์„ ๊ฐ–์ง€ ์•Š๊ณ ,
๋‹ค๋ฅธ data property์˜ ๊ฐ’์„ ์ฝ๊ฑฐ๋‚˜ ์ €์žฅํ•  ๋•Œ์— ํ˜ธ์ถœ๋˜๋Š” accessor function์œผ๋กœ ๊ตฌ์„ฑ๋œ property๋ฅผ accessor property ๋ผ๊ณ  ํ•œ๋‹ค.
์ด ํ•จ์ˆ˜๋Š” getter/setter ํ•จ์ˆ˜๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.

[[Get]] [[Set]] [[Enumerable]] [[Configurable]] ์ด accessor property attribute์ด๋‹ค.


์ด ๋‘˜์€ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

data property vs. accessor property

accessor property์˜ ๊ฒฝ์šฐ ~~๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , data property์˜ ๊ฒฝ์šฐ ~~๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.


// ํ•จ์ˆ˜ ๊ฐ์ฒด์˜ prototpye์€ data property์ด๋‹ค.
Object.getOwnPropertyDescriptor(function() {}, 'prototype');
//-> {value: {...}, writable: true, enumerable: false, configurable: false}


// ์ผ๋ฐ˜ ๊ฐ์ฒด์˜ __proto__๋Š” accessor property์ด๋‹ค.
Object.getOwnPropertyDescriptor(Object.prototpye, '__proto__');

//-> {get: f, set: f, enumerable: false, configurable: true}

ํ”„๋กœํผํ‹ฐ ์ •์˜

์ƒˆ property๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ,
property attribute๋ฅผ ์ƒˆ๋กœ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด์˜ property attribute๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค!


๊ฐ์ฒด ๋ณ€๊ฒฝ ๋ฐฉ์ง€

๊ฐ์ฒด๋Š” ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•œ ๊ฐ’์ด๋ผ๊ณ  ํ–ˆ๋‹ค. (์žฌํ• ๋‹น์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค)
property ์ถ”๊ฐ€, ์‚ญ์ œ, ๊ฐ’ ๊ฐฑ์‹ , attribute ์žฌ์ •์˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

Object.preventExtensions ๊ฐ์ฒด ํ™•์žฅ ๊ธˆ์ง€

๊ฐ์ฒด ํ™•์žฅ์„ ๊ธˆ์ง€ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

property์˜ ์ถ”๊ฐ€๋ฅผ ๊ธˆ์ง€ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

property๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š”
Object.defineProperty ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•
๋˜๋Š” Property ๋™์ ์ถ”๊ฐ€๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ, ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘๋ฅผ ๊ธˆ์ง€ํ•œ๋‹ค.

Object.isExtensible ๋กœ ํ™•์žฅ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Object.seal ๊ฐ์ฒด ๋ฐ€๋ด‰

๊ฐ์ฒด๋ฅผ ๋ฐ€๋ด‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.
property๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œ, attribute๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

Object.isSealed ๋กœ ๋ฐ€๋ด‰ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Object.freeze ๊ฐ์ฒด ๋™๊ฒฐ

๊ฐ์ฒด๋ฅผ ๋™๊ฒฐํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

property ์ถ”๊ฐ€, ์‚ญ์ œ, ๊ฐ’ ๊ฐฑ์‹ , attribute ์žฌ์ •์˜๊ฐ€ ๊ธˆ์ง€๋œ๋‹ค.

์˜ค์ง ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค.

Object.isFrozen ์œผ๋กœ ๋™๊ฒฐ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ถˆ๋ณ€ ๊ฐ์ฒด

์—ฌ๊ธฐ๊นŒ์ง€์˜ ๋ฉ”์„œ๋“œ๋“ค์€, ์–•์€ ๋ณ€๊ฒฝ๋งŒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฉ”์„œ๋“œ์˜€๋‹ค.
๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ง์† property๋งŒ ๋ณ€๊ฒฝ์„ ๋ฐฉ์ง€ํ•˜๋ฉฐ, ์ค‘์ฒฉ๋œ ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ๋ชปํ•œ๋‹ค.

์ค‘์ฒฉ๊ฐ์ฒด๊นŒ์ง€ ๋™๊ฒฐํ•ด์„œ, ์™„์ „ํžˆ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€ํ•œ ์ฝ๊ธฐ ์ „์šฉ์˜ ๋ถˆ๋ณ€๊ฐ์ฒด๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ?

๋ชจ๋“  property์— ์žฌ๊ท€์ ์œผ๋กœ Object.freeze ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์ฃผ๋ฉด ๋œ๋‹ค.


๋ณ€์ˆ˜์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๊นŒ์ง€ ์žฌ๋ฐŒ๊ฒŒ ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ๊ฐ‘์ž๊ธฐ property..?๋กœ ํ๋ฆ„์ด ๋ฐ”๋€Œ์–ด์„œ ํฅ๋ฏธ๊ฐ€ ์‚ด์ง ๋–จ์–ด์ง„ ์ƒํƒœ์ด๋‹ค.

๊ทธ๋ž˜๋„ '๊ทธ๋ž˜ ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•˜๋ฉด ํ๋ฆ„์„ ๊นจ๊ณ  ๊ฐœ๋…์„ ๋„ฃ์—ˆ๊ฒ ์–ด'ํ•˜๋Š” ์ƒ๊ฐ์— ๋‚˜๋ฆ„ ์ดํ•ดํ•œ ํ๋ฆ„์œผ๋กœ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด์•˜๋‹ค.

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