๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

JavaScript ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ํ”Œ๋ž˜๊ทธ

ยท ์•ฝ 4๋ถ„

ํ”„๋กœํผํ‹ฐ ํ”Œ๋ž˜๊ทธ#

๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ๋Š” ๊ฐ’(value) ์™€ ํ•จ๊ป˜ ํ”Œ๋ž˜๊ทธ(flag) ๋ผ ๋ถˆ๋ฆฌ๋Š” ํŠน๋ณ„ํ•œ ์†์„ฑ ์„ธ๊ฐ€์ง€๋ฅผ ๊ฐ–๋Š”๋‹ค.

  • writable : true ์ด๋ฉด ๊ฐ’์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • enumerable : true ์ด๋ฉด for ... in ๋ฃจํ”„์—์„œ ์—ด๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด์—ด๊ฑฐํ•  ์ˆ˜ ์—†๋‹ค.
  • configurable : true ์ด๋ฉด ํ”„๋กœํผํ‹ฐ ์‚ญ์ œ๋‚˜ ํ”Œ๋ž˜๊ทธ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ ‡์ง€์•Š์œผ๋ฉด ํ”„๋กœํผํ‹ฐ ์‚ญ์ œ์™€ ํ”Œ๋ž˜๊ทธ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

enumerable ํ”Œ๋ž˜๊ทธ#

์—ด๊ฑฐ ๊ฐ€๋Šฅ(enumerable) ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

๋ฐ˜๋ณต ๊ฐ€๋Šฅ(iterable)์€๋น„์Šทํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์˜๋ฏธ์ด๋‹ค.

configurable ํ”Œ๋ž˜๊ทธ#

configurable ํ”Œ๋ž˜๊ทธ๋ฅผ false ๋กœ ์„ค์ •ํ•˜๋ฉด ๋Œ์ดํ‚ฌ ๋ฐฉ๋ฒ•์ด ์—†๋‹ค.

defineProperty ๋ฅผ ์จ๋„ ๊ฐ’์„ true ๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์—†๋‹ค.

configurable: false ๊ฐ€ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ตฌ์ฒด์ ์ธ ์ œ์•ฝ์‚ฌํ•ญ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • configurable ํ”Œ๋ž˜๊ทธ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Œ
  • enumerable ํ”Œ๋ž˜๊ทธ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Œ.
  • writable: false ์˜ ๊ฐ’์„ true ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†์Œ(true ๋ฅผ false ๋กœ ๋ณ€๊ฒฝํ•˜๋Š”๊ฒƒ์€ ๊ฐ€๋Šฅํ•จ).
  • getter / setter ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Œ(์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•จ).

์ด๋Ÿฐ ํŠน์ง•์„ ์ด์šฉํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด โ€œ์˜์›ํžˆ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š”โ€ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๊ด€๋ จ Object ๋ฉ”์†Œ๋“œ#

  • Object.defineProperty : ๊ฐ์ฒด์— ์ƒˆ๋กœ์šด ์†์„ฑ์„ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๊ณ  ๊ทธ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • Object.defineProperties : ๊ฐ์ฒด์— ํ•˜๋‚˜ ๋˜๋Š” ๊ทธ ์ด์ƒ์˜ ์ƒˆ๋กœ์šด ์†์„ฑ์„ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๊ณ  ๊ทธ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • Object.getOwnPropertyDescriptor : ์ฃผ์–ด์ง„ ๊ฐ์ฒด ์ž์‹ ์˜ ์†์„ฑ์— ๋Œ€ํ•œ ์†์„ฑ ์„ค๋ช…์ž(descriptor)๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • Object.getOwnPropertyDescriptors : ์ฃผ์–ด์ง„ ๊ฐ์ฒด ์ž์‹ ์˜ ๋ชจ๋“  ์†์„ฑ๋“ค์˜ ์„ค๋ช…์ž(descriptor)๋“ค์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • Object.preventExtensions(obj) : ๊ฐ์ฒด์— ์ƒˆ๋กœ์šด ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๊ฒŒ ํ•œ๋‹ค.

  • Object.seal(obj) : ์ƒˆ๋กœ์šด ํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€๋‚˜ ๊ธฐ์กด ํ”„๋กœํผํ‹ฐ ์‚ญ์ œ๋ฅผ ๋ง‰์•„์ค€๋‹ค. ํ”„๋กœํผํ‹ฐ ์ „์ฒด์— configurable: false๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ํšจ๊ณผ์ด๋‹ค.

  • Object.freeze(obj) : ์ƒˆ๋กœ์šด ํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€๋‚˜ ๊ธฐ์กด ํ”„๋กœํผํ‹ฐ ์‚ญ์ œ, ์ˆ˜์ •์„ ๋ง‰์•„์ค€๋‹ค. ํ”„๋กœํผํ‹ฐ ์ „์ฒด์— configurable: false, writable: false๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ํšจ๊ณผ์ด๋‹ค.

  • Object.isExtensible(obj) : ์ƒˆ๋กœ์šด ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒŒ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ false๋ฅผ, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ true๋ฅผ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • Object.isSealed(obj) : ํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€, ์‚ญ์ œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ๊ฐ€ configurable: false์ด๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • Object.isFrozen(obj) : ํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€, ์‚ญ์ œ, ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ๊ฐ€ configurable: false, writable: false์ด๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ#