ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ
๋ด๋ถ์ฌ๋กฏ๊ณผ ๋ด๋ถ ๋ฉ์๋
- ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๊ตฌํ ์๊ณ ๋ฆฌ์ฆ์ ์ค๋ช
ํ๊ธฐ์ํด ECMAScript ์ฌ์์์ ์ฌ์ฉํ๋ ์์ฌ ํ๋กํผํฐ
pseudo property
์ ์์ฌ ๋ฉ์๋pseudo method
- ECMAScript ์ฌ์์์ ์ด์ค๋๊ดํธ (
[[ ... ]]
)๋ก ๊ฐ์ผ์ด๋ฆ๋ค์ด ๋ด๋ถ ์ฌ๋กฏ๊ณผ ๋ด๋ถ ๋ฉ์๋ - ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ๊ทผํ ์ ์๋ ๊ณต๊ฐ๋ ํ๋กํผํฐ๋ ์๋
- ์ผ๋ถ์ ํํ์ฌ ๊ฐ์ ์ ์ผ๋ก ์ ๊ทผํ ์ ์๋ ์๋จ์ด ์ ๊ณต๋จ
ex) ๋ชจ๋ ๊ฐ์ฒด๋ [[Prototype]]์ด๋ผ๋ ๋ด๋ถ ์ฌ๋กฏ์ ๊ฐ์ต๋๋ค. [[Prototype]]์ ๊ฒฝ์ฐ, proto๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก ์ ๊ทผ ํ ์ ์์ต๋๋ค.
ํ๋กํผํฐ ์ดํฐ๋ฆฌ๋ทฐํธ, ํ๋กํผํฐ ๋์คํฌ๋ฆฝํฐ ๊ฐ์ฒด
- ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ํ๋กํผํฐ๋ฅผ ์์ฑํ ๋ ํ๋กํผํฐ์ ์ํ๋ฅผ ๋ํ๋ด๋ ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์๋ ์ ์ ํ๋ค.
Object.getOwnPropertyDescriptor ๋ฉ์๋ ์ฌ์ฉํ์ฌ ๊ฐ์ ์ ์ผ๋ก ํ์ธ ๊ฐ๋ฅ
์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์์ ๊ฐ์ฒด์ ์ฐธ์กฐ๋ฅผ ์ ๋ฌํ๊ณ ๋๋ฒ์งธ ๋งค๊ฐ๋ณ์์๋ ํ๋กํผํฐ ํค๋ฅผ ๋ฌธ์์ด๋ก ์ ๋ฌ
Object.getOwnPropertyDescriptor ๋ฉ์๋๋ ํ๋กํผํฐ ๋์คํฌ๋ฆฝํฐ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
๋ฐ์ดํฐ ํ๋กํผํฐ์ ์ ๊ทผ์ ํ๋กํผํฐ
- ๋ฐ์ดํฐ ํ๋กํผํฐ (
data property
) : ํค์ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋ ์ผ๋ฐ์ ์ธproperty
- ์ ๊ทผ์ ํ๋กํผํฐ (
accessor property
) : ์์ฒด์ ์ผ๋ก๋ ๊ฐ์ ๊ฐ๊ณ ์์ง ์๊ณ ๋ค๋ฅธ ๋ฐ์ดํฐ ํ๋กํผํฐ์ ๊ฐ์ ์ฝ๊ฑฐ๋ ์ ์ฅํ ๋ ํธ์ถ๋๋ ์ ๊ทผ์ ํจ์๋ก ๊ตฌ์ฑ๋ ํ๋กํผํฐ
๋ฐ์ดํฐ ํ๋กํผํฐ
- ์ข
๋ฅ (
property attribute
)- [[ Value ]] : ํ๋กํผํฐ ํค์ ํ ๋น๋ ํ๋กํผํฐ ๊ฐ
- [[ Writable ]] : ํ๋กํผํฐ ๊ฐ์ ๋ณ๊ฒฝ ๊ฐ๋ฅ ์ฌ๋ถ
- [[ Enumerable ]] : ์ด๊ฑฐ ๊ฐ๋ฅ ์ฌ๋ถ
- [[ Configurable ]] : ์ฌ์ ์ ๊ฐ๋ฅ ์ฌ๋ถ
์ ๊ทผ์ ํ๋กํผํฐ
- ์ ๊ทผ์ ํ๋กํผํฐ(
accessor property
)๋ ์์ฒด์ ์ผ๋ก ๊ฐ์ ๊ฐ์ง ์๊ณ ๋ค๋ฅธ ๋ฐ์ดํฐ ํ๋กํผํฐ์ ๊ฐ์ ์ฝ๊ฑฐ๋ ์ ์ฅํ ๋ ์ฌ์ฉํ๋ ์ ๊ทผ์ํจ์ ๊ตฌ์ฑ๋ ํ๋กํผํฐ - ์ข
๋ฅ
- [[ Get ]] : ๋ฐ์ดํฐ ํ๋กํผํฐ์ ๊ฐ์ ์ฝ์ ๋ ํธ์ถ ๋๋ ์ ๊ทผ์ ํจ์
- [[ Set ]] : ๋ฐ์ดํฐ ํ๋กํผํฐ์ ๊ฐ์ ์ ์ฅํ ๋ ํธ์ถ๋๋ ์ ๊ทผ์ ํจ์
- [[ Enumerable ]] : ์ด๊ฑฐ ๊ฐ๋ฅ ์ฌ๋ถ
- [[ Configurable ]] : ์ฌ์ ์ ๊ฐ๋ฅ ์ฌ๋ถ
- ๋ฉ์๋ ์์
get
/set
์ ๋ถ์ด๋ฉด ์ ๊ทผ์ ํ๋กํผํฐ๋ก ๋์ํจ ์ด๋ฅผgetter
/setter
ํจ์๋ผ๊ณ ํ๋ค.
ํ๋กํผํฐ ์ ์
Object.definedProperty
๋ฉ์๋ ์ฌ์ฉํด์ ํ๋กํผํฐ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ๋ช ์์ ์ผ๋ก ์ ์ ๊ฐ๋ฅ- ์ ์ ์ ํ๋กํผํฐ ์๋ต์ ๊ธฐ๋ณธ๊ฐ
- value, get, set :
undefined
- writable, enumerable, configurable :
false
- value, get, set :
๊ฐ์ฒด ๋ณ๊ฒฝ ๋ฐฉ์ง
- ๊ฐ์ฒด๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฐ์ด๋ฏ๋ก ์ฌํ ๋น ์์ด ๊ฐ์ ๋ณ๊ฒฝ๊ฐ๋ฅ ํฉ๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฐ์ฒด์ ๋ณ๊ฒฝ์ ๋ฐฉ์งํ๋ ๋ค์ํ ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
๊ฐ์ฒด ํ์ฅ ๊ธ์ง
Object.preventExtensions
๋ฉ์๋- ๊ฐ์ฒด์ ์ถ๊ฐ๋ฅผ ๊ธ์งํ๋ ๋ฉ์๋ ์ ๋๋ค.
- ๊ฐ์ฒด ์ญ์ ๋ ๊ฐ๋ฅํฉ๋๋ค.
๊ฐ์ฒด๋ฐ๋ด
Object.seal
๋ฉ์๋- ๋ฐ๋ด๋ ๊ฐ์ฒด๋ ์ฝ๊ธฐ์์ฐ๊ธฐ๋ง ๊ฐ๋ฅํฉ๋๋ค.
- ๊ฐ์ฒด์ ์ญ์ ์ ์ดํธ๋ฆฌ๋ทฐํธ ์ฌ์ ์๋ ๊ธ์ง๋ฉ๋๋ค.
๊ฐ์ฒด๋๊ฒฐ
Object.freeze
- ๋๊ฒฐ๋ ๊ฐ์ฒด๋ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํฉ๋๋ค.
๋ถ๋ณ๊ฐ์ฒด
- ํ์ฅ๊ธ์ง, ๊ฐ์ฒด๋ฐ๋ด, ๊ฐ์ฒด๋๊ฒฐ์ ์์ ๋ณ๊ฒฝ ๋ฐฉ์ง( ์ค์ฒฉ๋ ๊ฐ์ฒด ๊น์ง ๋ณ๊ฒฝ ๋ฐฉ์ง ํ์ง ๋ชปํจ )
- ์ค์ฒฉ๊ฐ์ฒด ๊น์ง ๋๊ฒฐํ์ฌ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๊ตฌํํ๋ ค๋ฉด ๊ฐ์ฒด๋ฅผ ๊ฐ์ผ๋ก ๊ฐ๋ ๋ชจ๋ ํ๋กํผํฐ์ ๋ํด ์ฌ๊ท์ ์ผ๋ก
Object.freeze
๋ฉ์๋๋ฅผ ํธ์ถํด์ผํ๋ค.
'javascript > ๐ study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[3์ฃผ์ฐจ ์คํฐ๋]18์ฅ-ํจ์์ ์ผ๊ธ๊ฐ์ฒด (0) | 2022.02.14 |
---|---|
[3์ฃผ์ฐจ ์คํฐ๋] 17์ฅ-์์ฑ์ ํจ์ (0) | 2022.02.14 |
[2์ฃผ์ฐจ ์คํฐ๋]15์ฅ-let const ๋ธ๋ก ์ค์ฝํ (0) | 2022.02.06 |
[2์ฃผ์ฐจ ์คํฐ๋]14์ฅ-์ ์ญ๋ณ์ ๋ฌธ์ ์ (0) | 2022.02.06 |
[2์ฃผ์ฐจ ์คํฐ๋]13์ฅ- ์ค์ฝํ (0) | 2022.02.06 |
๋๊ธ