๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ๋ฐœ/Javascript

Object.freeze ๊ฐ์ฒด ๋™๊ฒฐ / ๊ฐ์ฒด ์ฝ๊ธฐ ์†๋„

by 1mj 2022. 5. 12.

Object.freeze()

๊ฐ์ฒด์— ์ƒˆ๋กœ์šด ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๋กœ ๋ฐ”๊พธ์–ด immutableํ•œ Object๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

  • ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ๋™๊ฒฐํ•˜๋Š” ํ•จ์ˆ˜
  • ๋™๊ฒฐ๋œ ๊ฐ์ฒด๋Š” ์†์„ฑ์„ ์ถ”๊ฐ€, ์‚ญ์ œํ•˜๋Š” ๋“ฑ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€
  • ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋Š” ์‹œ๋„ ์‹œ TypeError ์˜ˆ์™ธ ๋ฐœ์ƒ
  • ๊ฐ์ฒด์˜ ๋ถˆ๋ณ€์„ฑ ์œ ์ง€
  • ์–•์€ ๋ณต์‚ฌ(1 depth๊นŒ์ง€๋งŒ)๋ฅผ ํ•˜๋ฏ€๋กœ ์ค‘์ฒฉ๋œ ๊ฐ์ฒด๋Š” ๋™๊ฒฐ๋˜์ง€ ์•Š์Œ
  • Object.isFrozen() ๋ฉ”์†Œ๋“œ๋กœ ๊ฐ์ฒด ๋™๊ฒฐ ์—ฌ๋ถ€ ํ™•์ธ ๊ฐ€๋Šฅ

 

const info = {
  name: 'Anna',
  age: 19
};

Object.freeze(info);

info.age = 20;  // ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ
info.email = 'hello@gmail.com';   // ์ถ”๊ฐ€๋˜์ง€ ์•Š์Œ

 

const vs. Object.freeze()

const ํ‚ค์›Œ๋“œ: ์žฌํ• ๋‹น X, ์†์„ฑ๋ณ€๊ฒฝ O

const info = {
  name: 'Anna',
  age: 19
};

info.age = 20;
info.email = 'hello@gmail.com';

 

Object.seal()

๊ฐ์ฒด์— ์ƒˆ๋กœ์šด ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ์†์„ฑ์„ ๋ณ€๊ฒฝ ๋˜๋Š” ์‚ญ์ œํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๋กœ ๋ฐ”๊พธ๋Š”๋ฐ, ์“ฐ๊ธฐ ๊ฐ€๋Šฅํ•œ ์†์„ฑ์€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ๊ฐ์ฒด์˜ ํ™•์žฅ์„ ๊ธˆ์ง€์‹œํ‚ค๋Š” ํ•จ์ˆ˜
  • ์†์„ฑ ์ถ”๊ฐ€, ์‚ญ์ œ, ๋ณ€๊ฒฝ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๊ฐ’ ์„ค์ •์€ ๊ฐ€๋Šฅ
  • Object.isSealed() ๋ฉ”์†Œ๋“œ๋กœ ๊ฐ์ฒด ๋ฐ€๋ด‰ ์—ฌ๋ถ€ ํ™•์ธ ๊ฐ€๋Šฅ

๋Œ“๊ธ€