2023. 1. 9. 08:48ใJAVA/Effective JAVA
item02. ์์ฑ์์ ๋งค๊ฐ๋ณ์๊ฐ ๋ง๋ค๋ฉด ๋น๋๋ฅผ ๊ณ ๋ คํ๋ผ.
" p17. ๊ฐ์ฒด ์ผ๋ฆฌ๊ธฐ freezing"
๊ฐ์ฒด ์ผ๋ฆฌ๊ธฐ(freezing) ์ด๋?
๊ฐ์ฒด ์ผ๋ฆฌ๊ธฐ freezing์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉํ๋ ๊ธฐ์ ์ด๋ค.
Objects.freeze() ๋ผ๋ ๋ฉ์๋๋ก ๊ฐ์ฒด๋ฅผ ์ผ๋ฆฌ๋ ๊ฒ์ธ๋ฐ, ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์๋ฐ์ ๋ฌ๋ฆฌ ๋ฐํ์์๋ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ๊ณ ์ญ์ ํ ์ ์๋ค.
var hyejin = {
'name' : 'Hyejin',
'age' : 26
}
hyejin.hobby = ['๋
์']
hyejin.hobby.push('์ด๋')
console.log(hyejin.hobby);
์ด๋ฐ์์ผ๋ก ์ถ๊ฐํ๋ฉด ์ทจ๋ฏธ๊ฐ ์ถ๊ฐ๋๋ค.
๊ทธ๋ฐ๋ฐ Object.freeze() ๋ก ๊ฐ์ฒด๋ฅผ ์ผ๋ฆฌ๋ฉด ์ด ๊ฐ์ฒด๋ ๋ ์ด์ ๋ณ๊ฒฝ๋ ์ ์๋ ์ํ๊ฐ ๋๋ค.
์ฆ, ๊ฐ์ฒด ์ผ๋ฆฌ๊ธฐ freezing์ ํ๋ฉด ์ด ๊ฐ์ฒด์๋ ์๋ก์ด ์์ฑ์ ์ถ๊ฐํ๊ฑฐ๋ ์์ฑ์ ์ ๊ฑฐํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ฉฐ, ์กด์ฌํ๋ ์์ฑ์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ ๊ฒ๋ ์ญ์ ๋ฐฉ์งํ๋ค.
'use strict'; // ์ด๊ฑฐ ์ ์ธํด์ค์ผ freeze ํ ์ ์์
var hyejin = {
'name' : 'Hyejin',
'age' : 26
}
Object.freeze(hyejin); // ํ๋กํผํฐ๋ฅผ ๋์ด์ ์์ ํ๊ฑฐ๋ ์ญ์ ํ๊ฑฐ๋ ํ ์ ์์
hyejin.hobby = ['๋
์'] // ํ๋ฆฌ์ง์ ํ๋ฉด ์ฌ๊ธฐ์ ์๋ฌ๊ฐ ๋ ๊ฒ: Cannot add property hobby, object is not extensible
hyejin.hobby.push('์ด๋')
console.log(hyejin.hobby);
Object.freeze() ์ ์ ๋ฌํ hyejin ๊ฐ์ฒด๋ ๊ทธ ๋ค๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
๋ณ๊ฒฝํ ์ ์๋ ๋ฒ์
- ์ ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ์ง ๋ชปํจ
- ๊ธฐ์กด ํ๋กํผํฐ๋ฅผ ์ ๊ฑฐํ์ง ๋ชปํจ
- ๊ธฐ์กด ํ๋กํผํฐ ๊ฐ์ ๋ณ๊ฒฝํ์ง ๋ชปํจ
- ํ๋กํ ํ์ ์ ๋ณ๊ฒฝํ์ง ๋ชปํจ
๊ฐ์ฒด ์ผ๋ฆฌ๊ธฐ๋ strict ๋ชจ๋์์๋ง ๋์ํ๊ณ , ๋น์ทํ ๋ฅ๋ก๋ Object.seal() : ๊ฐ์ฒด ๋ฐ๋ด, ๊ทธ ๊ฐ์ฒด์๋ ์๋ก์ด ์์ฑ์ ์ถ๊ฐํ ์ ์๊ณ , ํ์ฌ ์กด์ฌํ๋ ๋ชจ๋ ์์ฑ์ ์ค์ ๋ถ๊ฐ๋ฅ ์ํ๋ก ๋ง๋ฆ ๊ณผ Object.preverntExtensions() : ์๋ก์ด ์์ฑ์ด ์ด์ ๊น์ง ๊ฐ์ฒด์ ์ถ๊ฐ๋๋ ๊ฒ์ ๋ฐฉ์ง๊ฐ ์๋ค.
๐ค ๊ทผ๋ฐ ์ด ๊ฐ์ฒด ์ผ๋ฆฌ๊ธฐ๋ ์ดํํฐ๋ธ ์๋ฐ ์ฑ ์์๋ ๊ทธ๋ ๊ณ ์๋ฐ์์ ๊ตฌํํ๊ธฐ์๋ ์๋นํ ์ด๋ ต๊ณ , ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ญ์ ์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ผ๋ก ์๊ณ ์๋ค.
์๋ฐ์์ ๊ฐ์ฒด๋ฅผ ์ผ๋ฆฌ๊ธฐ ์ํด์๋ ๊ฐ์ ์ฒดํฌํด์ฃผ๋ ๋ฉ์๋?๊ฐ ํ์ํ๊ณ , ๊ฐ์ฒด ์ผ๋ฆฌ๊ธฐ๋ฅผ ๊ตฌํํ๋ค ํด๋ ๊ทธ ๊ตฌํ ํ ์ฌ์ด๋ ์ดํํธ๊ฐ ๋ฐ์ํ ์ ์๋ ์ํ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฌ๋๋ ํ๋ฒ๋ ์ด ์ฝ๋๋ฅผ ๋ณธ์ ์ ์๋ค๊ณ ํ๋ค.
๊ทธ์ ์ฑ ์ ๊ฐ์ฒด ์ผ๋ฆฌ๊ธฐ ๋ผ๋ ๊ธฐ๋ฅ์ ๋ํด์ ์๊ธฐํ๋๊น ๊ฐ๋ ์ ๋ ์ ๋ฆฌํ๋ผ๊ณ ์ค๋ช ํด์ฃผ๋๊ฒ ๊ฐ๋ค~_~