๋ด๋ถ ์ฌ๋กฏ๊ณผ ๋ด๋ถ ๋ฉ์๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ตฌํ ์๊ณ ๋ฆฌ์ฆ์ ์ค๋ช ํ๊ธฐ ์ํด ECMAScript ์ฌ์์์ ์ฌ์ฉํ๋ ์์ฌ ํ๋กํผํฐ์ ์์ฌ ๋ฉ์๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํ๋กํผํฐ๋ฅผ ์์ฑํ ๋ ํ๋กํผํฐ์ ์ํ๋ฅผ ๋ํ๋ด๋ ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์๋ ์ ์ํ๋ค.
๋ฐ์ดํฐ ํ๋กํผํฐ๋ ๋ค์๊ณผ ๊ฐ์ ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ๊ฐ๋๋ค. ์ด ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ํ๋กํผํฐ๋ฅผ ์์ฑํ ๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์๋ ์ ์๋๋ค.
์ ๊ทผ์ ํ๋กํผํฐ๋ ์์ฒด์ ์ผ๋ก๋ ๊ฐ์ ๊ฐ์ง ์๊ณ ๋ค๋ฅธ ๋ฐ์ดํฐ ํ๋กํผํฐ์ ๊ฐ์ ์ฝ๊ฑฐ๋ ์ ์ฅํ ๋ ์ฌ์ฉํ๋ ์ ๊ทผ์ ํจ์๋ก ๊ตฌ์ฑ๋ ํ๋กํผํฐ๋ค.
์ ๊ทผ์ ํจ์๋ getter/setter ํจ์๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
โก๏ธํ๋กํ ํ์
ํ๋กํ ํ์ ์ ์ด๋ค ๊ฐ์ฒด์ ์์(๋ถ๋ชจ) ๊ฐ์ฒด์ ์ญํ ์ ํ๋ ๊ฐ์ฒด๋ค. ํ๋กํ ํ์ ์ ํ์(์์) ๊ฐ์ฒด์๊ฒ ์์ ์ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์์ํ๋ค. ํ๋กํ ํ์ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ ๋ฉ์๋๋ฅผ ์์๋ฐ์ ํ์ ๊ฐ์ฒด๋ ์์ ์ ํ๋กํผํฐ ๋๋ ๋ฉ์๋์ธ ๊ฒ์ฒ๋ผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
์ ๊ทผ์ ํ๋กํผํฐ์ ๋ฐ์ดํฐ ํ๋กํผํฐ๋ฅผ ๊ตฌ๋ณํ๋ ๋ฐฉ๋ฒ
// ์ผ๋ฐ ๊ฐ์ฒด์ __proto__์ ์ ๊ทผ์ ํ๋กํผํฐ๋ค
Object.getOwnPropertyDescriptor(Object.prototype, `__proto__`)
// ํจ๊ตฌ ๊ฐ์ฒด์ prototype์ ๋ฐ์ดํฐ ํ๋กํผํฐ๋ค
Object.getOwnPropertyDescriptor(function() {}, `prototype`)
์๋ก์ด ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ๋ฉด์ ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ๋ช ์์ ์ผ๋ก ์ ์ํ๊ฑฐ๋, ๊ธฐ์กด ํ๋กํผํฐ์ ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ฌ์ ์ํ๋ ๊ฒ์ ๋งํ๋ค.
Object.defineProperty๋ฉ์๋๋ฅผ ์ฌ์ฉํด ํ๋กํผํฐ์ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ ์ํ ์ ์๋ค. ์ธ์๋ก๋ ๊ฐ์ฒด์ ์ฐธ์กฐ์ ๋ฐ์ดํฐ ํ๋กํผํฐ์ ํค์ธ ๋ฌธ์์ด, ํ๋กํผํฐ ๋์คํฌ๋ฆฝํฐ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ค.
๊ฐ์ฒด๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฐ์ด๋ฏ๋ก ์ฌํ ๋น ์์ด ์ง์ ๋ณ๊ฒฝํ ์ ์๋ค. ์ฆ ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ์ ์๊ณ , ํ๋กํผํฐ ๊ฐ์ ๊ฐฑ์ ํ ์ ์์ผ๋ฉฐ, Object.defineProperty ๋๋ Object.defineProperties ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ฌ์ ์ํ ์๋ ์๋ค.
Object.preventExtensions ๋ฉ์๋๋ ๊ฐ์ฒด์ ํ์ฅ์ ๊ธ์งํ๋ค. ํ์ฅ์ด ๊ธ์ง๋ ๊ฐ์ฒด๋ ํ๋กํผํฐ ์ถ๊ฐ๊ฐ ๊ธ์ง๋๋ค.
Object.seal ๋ฉ์๋๋ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ดํ๋ค. ๋ฐ๋ด๋ ๊ฐ์ฒด๋ ์ฝ๊ธฐ์ ์ฐ๊ธฐ๋ง ๊ฐ๋ฅํ๋ค.
object.freeze ๋ฉ์๋๋ ๊ฐ์ฒด๋ฅผ ๋๊ฒฐํ๋ค. ๋๊ฒฐ๋ ๊ฐ์ฒด๋ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ๋ค.
์์์ ์ดํด๋ณธ ๋ณ๊ฒฝ ๋ฐฉ์ง ๋ฉ์๋๋ค์ ์์ ๋ณ๊ฒฝ ๋ฐฉ์ง๋ก ์ง์ ํ๋กํผํฐ๋ง ๋ณ๊ฒฝ์ด ๋ฐฉ์ง๋๊ณ ์ค์ฒฉ ๊ฐ์ฒด๊น์ง๋ ์ํฅ์ ์ฃผ์ง๋ ๋ชปํ๋ค.
๋ฐ๋ผ์ ๊ฐ์ฒด์ ์ค์ฒฉ ๊ฐ์ฒด๊น์ง ๋๊ฒฐํ์ฌ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ ์ฝ๊ธฐ ์ ์ฉ์ ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๊ตฌํํ๋ ค๋ฉด ๊ฐ์ฒด๋ฅผ ๊ฐ์ผ๋ก ๊ฐ๋ ๋ชจ๋ ํ๋กํผํฐ์ ๋ํด ์ฌ๊ท์ ์ผ๋ก Object.freeze ๋ฉ์๋๋ฅผ ํธ์ถํด์ผ ํ๋ค.