๐Ÿ“’ ๊ฐ์ฒด ๋ณ€๊ฒฝ ๊ธˆ์ง€ ๋ฉ”์„œ๋“œ

zooyahoยท2022๋…„ 7์›” 22์ผ
0
post-thumbnail
post-custom-banner

๊ฐ์ฒด ๋ณ€๊ฒฝ ๊ธˆ์ง€

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€ ๊ธˆ์ง€๋ฅผ ์˜๋ฏธ
  • ๋™์  ์ถ”๊ฐ€์™€ Object.defineProperty๋กœ ์ถ”๊ฐ€ ๋ฐฉ๋ฒ•์ด ๊ธˆ์ง€๋œ๋‹ค.
๊ตฌ๋ถ„๋ฉ”์„œ๋“œํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€ํ”„๋กœํผํ‹ฐ ์‚ญ์ œํ”„๋กœํผํ‹ฐ ๊ฐ’ ์ฝ๊ธฐํ”„๋กœํผํ‹ฐ ๊ฐ’ ์“ฐ๊ธฐํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ์žฌ์ •์˜
๊ฐ์ฒด ํ™•์žฅ ๊ธˆ์ง€Object.preventExtensionsXOOOO
๊ฐ์ฒด ๋ฐ€๋ด‰Object.preventExtensionsXXOOX
๊ฐ์ฒด ๋™๊ฒฐObject.preventExtensionsXXOXX

๐Ÿ“Ž ์˜ˆ์ œ

const obj = { a: "default" };

Object.seal(obj);

obj.b = "add";
console.log(obj); // { a: 'default' }

obj.a = "seal";
console.log(obj); // { a: 'seal' }

delete obj.a;
console.log(obj); // { a: 'seal' }

Object.freeze(obj);

obj.b = "add";
console.log(obj); // { a: 'seal' }

obj.a = "freeze";
console.log(obj); // { a: 'seal' }

delete obj.a;
console.log(obj); // { a: 'seal' }

/* change */
Object.seal(obj); // { a: 'seal' }

obj.a = "change seal";
console.log(obj);

๐Ÿ‘‰๐Ÿป seal()์€ ํ™•์žฅ์ด ๋ถˆ๊ฐ€ํ•˜๊ณ  ์ˆ˜์ •์€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์‚ญ์ œํ•  ์ˆ˜ ์—†์Œ.
๐Ÿ‘‰๐Ÿป freeze()์€ ํ™•์žฅ์ด ๋ถˆ๊ฐ€ํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์‚ญ์ œํ•  ์ˆ˜ ์—†์Œ.

๐Ÿ’ก [๊ฒฐ๋ก ] ์ด ๋‘ ๋ฉ”์„œ๋“œ์˜ ๊ณตํ†ต์ 

  1. ์ „๋‹ฌ๋œ ๊ฐ์ฒด๋“ค์€ ํ™•์žฅํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜์–ด ์ƒˆ๋กœ์šด ์†์„ฑ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค.
  2. ์ „๋‹ฌ๋œ ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ๋ชจ๋“  ์š”์†Œ๋“ค์€ ๊ตฌ์„ฑ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜์–ด ์‚ญ์ œํ•  ์ˆ˜ ์—†๋‹ค.
  3. ์ŠคํŠธ๋ฆญํŠธ ๋ชจ๋“œ์—์„œ ๋‘ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฐ์ฒด ๋ชจ๋‘ obj.a = 500 ๊ฐ™์€ ์—ฐ์‚ฐ์„ ์‹คํ–‰ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๐Ÿ”ฅ ๋†’์€๋‹จ๊ณ„๋กœ ๋ด‰์ธ์€ ๊ฐ€๋Šฅํ•ด๋„, ๋‚ฎ์€๋‹จ๊ณ„๋กœ ํ•ด์ œ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•จ!!

freeze -> seal -> preventExtensions ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜์—ฌ freeze๋กœ ๊ณ ์ •๋ฉ๋‹ˆ๋‹ค!!!

์ฐธ๊ณ  ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive

profile
์ฆ๊ฒ๊ฒŒ ๊ฐœ๋ฐœํ•˜์ž ์ฅฌ์•ผํ˜ธ๐Ÿ‘ป
post-custom-banner

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