[๐Ÿฑ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ

dsfasdยท2023๋…„ 2์›” 15์ผ
0

** ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ DeepDive 16์žฅ์„ ์ฝ์œผ๋ฉฐ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ์ฒด ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๋‹ค๋ฃฌ๋‹ค. ์ด๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฐ์ฒด ์ƒ์„ฑ์‹œ ๊ฐ์ฒด๊ฐ€ ๊ฐ–๋Š” ๊ธฐ๋ณธ์ ์ธ ์ƒํƒœ ๋ฐ ์†์„ฑ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์— ๋Œ€ํ•ด์„œ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‚ด๋ถ€ ์Šฌ๋กฏ๊ณผ ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ๋จผ์ € ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ„๋‹จํžˆ ๋Œ€๋žต์ ์ธ ๊ฐœ๋…๋งŒ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋ฉด ๋œ๋‹ค.

16.1 ๋‚ด๋ถ€ ์Šฌ๋กฏ๊ณผ ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ


  • ๋‚ด๋ถ€ ์Šฌ๋กฏ๊ณผ ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ๋Š” js ์—”์ง„์˜ ๊ตฌํ˜„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ECMAScript ์‚ฌ์–‘์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์˜์‚ฌ ํ”„๋กœํผํ‹ฐ์™€ ์˜์‚ฌ ๋ฉ”์„œ๋“œ๋‹ค.
    ( ์‰ฝ๊ฒŒ ๋‚ด๋ถ€ ๋กœ์ง์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ž. )

  • ๋‚ด๋ถ€ ์Šฌ๋กฏ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์™ธ๋ถ€๋กœ ๊ณต๊ฐœ๋œ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋Š” ์•„๋‹ˆ๋ฉฐ, ์ผ๋ถ€ ๋‚ด๋ถ€ ์Šฌ๋กฏ๊ณผ ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ์„ ์ œ๊ณตํ•œ๋‹ค.
    - ex. [[prototype]] ๋‚ด๋ถ€ ์Šฌ๋กฏ์˜ ๊ฒฝ์šฐ __proto__ ๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. o.proto


16.2 ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์™€ ํ”„๋กœํผํ‹ฐ ๋””์Šคํฌ๋ฆฝํ„ฐ ๊ฐ์ฒด


  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ”„๋กœํผํ‹ฐ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๊ฐ–๋Š”๋‹ค.

  • ์ƒํƒœ์—๋Š” ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’(value), ๊ฐ’์˜ ๊ฐฑ์‹  ์—ฌ๋ถ€(writable), ์—ด๊ฑฐ ๊ฐ€๋Šฅ ์—ฌ๋ถ€(enumerable), ์žฌ์ •์˜ ๊ฐ€๋Šฅ ์—ฌ๋ถ€(configurable)๊ฐ€ ์žˆ๋‹ค.

  • ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์— ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์ง€๋งŒ Object.getOwnPropertyDescriptor ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„์ ‘์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    - ex. console.log(Object.getOwnPropertyDescriptor(๊ฐ์ฒด์˜ ์ฐธ์กฐ,โ€™ํ”„๋กœํผํ‹ฐ ํ‚คโ€™);

    • {value: โ€œLeeโ€, writable:true, enumerable:true, configurable:true}```
  • ๋ฐ˜ํ™˜ : ํ”„๋กœํผํ‹ฐ ๋””์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    (์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ”„๋กœํผํ‹ฐ๋‚˜ ์ƒ์†๋ฐ›์€ ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•œ ๋””์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋ฅผ ์š”๊ตฌ์‹œ undefined๋ฅผ ๋ฐ˜ํ™˜)


16.3 ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์™€ ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ


ํ”„๋กœํผํ‹ฐ๋Š” ๋‘ ๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์™€ ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ์ด๋‹ค.

  • ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ : ํ‚ค์™€ ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ผ๋ฐ˜์ ์ธ ํ”„๋กœํผํ‹ฐ์ด๋‹ค. (๋Œ€๋ถ€๋ถ„ ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์— ํ•ด๋‹นํ•œ๋‹ค. )
    ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์„ค๋ช…
    [[ Value ]]ํ”„๋กœํผํ‹ฐ ํ‚ค๋ฅผ ํ†ตํ•ด ํ”„๋กœํผํ‹ฐ ๊ฐ’์— ์ ‘๊ทผํ•˜๋ฉด ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’์ด๋‹ค. ๊ฐ’์„ ๋ณ€๊ฒฝ์‹œ [[ value]]์— ๊ฐ’์„ ์žฌํ• ๋‹นํ•œ๋‹ค. ํ”„๋กœํผํ‹ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋™์  ์ƒ์„ฑํ•˜๊ณ  ์ƒ์„ฑ๋œ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์„ [[ value ]]์— ์ €์žฅํ•œ๋‹ค.
    [[ Writable ]]ํ”„๋กœํผํ‹ฐ ๊ฐ’์˜ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค. ๊ฐ’์ด false์ธ ๊ฒฝ์šฐ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ์ฝ๊ธฐ์ „์šฉ ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋œ๋‹ค.
    [[ Enumerable ]]ํ”„๋กœํผํ‹ฐ์˜ ์—ด๊ฑฐ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค. ์—ด๊ฑฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์˜๋ฏธ๋Š” for-in ๋ฐ˜๋ณต๋ฌธ์ด๋‚˜ Object.keys() ๋“ฑ์˜ ๋ฐ˜๋ณต์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
    [[ Configurable ]]ํ”„๋กœํผํ‹ฐ์˜ ์žฌ์ •์˜ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ ๋ถˆ๋ฆฌ์–ธ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค. false์ธ ๊ฒฝ์šฐ ํ•ด๋‹น ํ”„๋กœํผํ‹ฐ์˜ ์‚ญ์ œ ๋ฐ ๊ฐ’์˜ ๋ณ€๊ฒฝ์ด ๊ธˆ์ง€๋œ๋‹ค.

ํ”„๋กœํผํ‹ฐ ์ƒ์„ฑ์‹œ [[ Value ]] ์˜ ๊ฐ’์€ ํ”„๋กœํผํ‹ฐ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”๋˜๋ฉฐ, ๋‚˜๋จธ์ง€ ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์˜ ๊ฐ’์€ true๋กœ ์ดˆ๊ธฐํ™”๋œ๋‹ค.

  • ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ : ์ž์ฒด์ ์œผ๋กœ๋Š” ๊ฐ’์„ ๊ฐ–์ง€ ์•Š๊ณ , ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์„ ์ฝ๊ฑฐ๋‚˜ ์ €์žฅํ•  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ์ ‘๊ทผ์ž ํ•จ์ˆ˜๋กœ ๊ตฌ์„ฑ๋œ ํ”„๋กœํผํ‹ฐ์ด๋‹ค.
    ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ์„ค๋ช…
    [[ Get ]]์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์„ ์ฝ์„ ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ์ ‘๊ทผ์ž ํ•จ์ˆ˜์ด๋‹ค. ์ฆ‰ [[ Get ]]์˜ ๊ฐ’ getter ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ํ”„๋กœํผํ‹ฐ ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค.
    [[ Set ]]์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์„ ์ €์žฅํ•  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ์ ‘๊ทผ์ž ํ•จ์ˆ˜๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ [[ Set ]]์˜ ๊ฐ’ setter ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ํ”„๋กœํผํ‹ฐ ๊ฐ’์œผ๋กœ ์ €์žฅ๋œ๋‹ค.
    [[ Enumerable ]]๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์˜ [[ Enumerable ]] ๊ณผ ๋™์ผ
    [[ Configurable ]]๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์˜ [[ Configurable ]] ๊ณผ ๋™์ผ
const person = {
// ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ 
	firstName:'Ungmo',
	lastName: 'Lee'
}

// fullName์€ ์ ‘๊ทผ์ž ํ•จ์ˆ˜๋กœ ๊ตฌ์„ฑ๋œ ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ์ด๋‹ค. 
// getter ํ•จ์ˆ˜
**get** fullName(){
	return `${this.firstName} ${this.lastName}`;
}, 
// setter ํ•จ์ˆ˜ 
**set** fullName(name){
	[this.firstName, this.lastName] = name.split('');	
}

// ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•œ ํ”„๋กœํผํ‹ฐ ๊ฐ’์˜ ์ฐธ์กฐ
console.log(person.firstName + ' '+ person.lastName);

// ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•œ ํ”„๋กœํผํ‹ฐ ๊ฐ’์˜ ์ €์žฅ
// ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ fullName์— ๊ฐ’์„ ์ €์žฅํ•˜๋ฉด setter ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. 
person.fullName = 'Heegun Lee';
console.log(person);

// ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋ฅผ ํ†ตํ•œ ํ”„๋กœํผํ‹ฐ ๊ฐ’์˜ ์ฑ€์กฐ 
// ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ fullName์— ์ ‘๊ทผํ•˜๋ฉด getter ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. 
console.log(person.fullName);

// firstName์€ ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ๋‹ค. 
let descriptor = Object.getOwnPropertyDescriptor(person, 'firstName')
console.log(descriptor);
// {value: 'Heegun', writable: true, enumerate:true, configurable:true

// fullName์€ ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ์ด๋‹ค. 
descriptor = Object.getOwnPropertyDescriptor(person, 'fullName');
console.log(descriptor);
//{get:f, set:f, enumerable: true, configurable: true}
  • ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ์™€ ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    - ์ผ๋ฐ˜ ๊ฐ์ฒด์˜ proto ๋Š” ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋‹ค.
        ```jsx
        Object.getOwnPropertyDescriptor(Object.prototype, '__proto__');
        //{get:f, set:f, enumerable: true, configurable: true}
        ```
        
    - ํ•จ์ˆ˜ ๊ฐ์ฒด์˜ prototype์€ ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์ด๋‹ค.
        
        ```jsx
        Object.getOwnPropertyDescriptor(function(){}, 'prototype')l
        // {value: '...', writable: true, enumerate:true, configurable:true
        ```

16.4 ํ”„๋กœํผํ‹ฐ ์ •์˜


  • Object.defineProperty ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ๊ฒƒ์ธ์ง€, ์—ด๊ฑฐ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•  ๊ฒƒ์ธ์ง€, ์žฌ์ •์˜ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•  ๊ฒƒ์ธ์ง€์˜ ์—ฌ๋ถ€๋ฅผ ๋ช…ํ™•ํžˆ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Object.defineProperty ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ˆ„๋ฝ์‹œํ‚ค๋ฉด( ๊ฐ์ฒด์˜ ํ‚ค, ๊ฐ’๋งŒ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ) undefined, false๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค.
  • Object.defineProperties ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
const person = {}

// ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ ์ •์˜ 
Object.defineProperty(person, 'firstName',{
	value:'Ungmo',
	writable:true, 
	enumeratable:true, 
	configurable:true	
})

16.5 ๊ฐ์ฒด ๋ณ€๊ฒฝ ๋ฐฉ์ง€


๊ฐ์ฒด๋Š” ๋ณ€๊ฒฝ๊ฐ€๋Šฅํ•œ ๊ฐ’์ด๋ฏ€๋กœ ์žฌํ• ๋‹น ์—†์ด ์ง์ ‘ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Object.defineProperty ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์žฌ์ •์˜ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐ์ฒด์˜ ๋ณ€๊ฒฝ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด๋“ค์€ ๊ฐ์ฒด์˜ ๋ณ€๊ฒฝ์„ ๊ธˆ์ง€ํ•˜๋Š” ๊ฐ•๋„๊ฐ€ ๋‹ค๋ฅด๋‹ค. ์•„๋ž˜๋กœ ๊ฐˆ์ˆ˜๋ก ๋ณ€๊ฒฝ ์ œํ•œ์ด ์—„๊ฒฉํ•˜๋‹ค.
    ๊ตฌ๋ถ„๋ฉ”์„œ๋“œํ”„๋กœํผํ‹ฐ ๊ฐ’ ์ฝ๊ธฐํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€ํ”„๋กœํผํ‹ฐ ์‚ญ์ œํ”„๋กœํผํ‹ฐ ๊ฐ’ ์“ฐ๊ธฐํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ์žฌ์ •์˜
    ๊ฐ์ฒด ํ™•์žฅ ๊ธˆ์ง€Object.preventExtensionsOXOOO
    ๊ฐ์ฒด ๋ฐ€๋ด‰Object.sealOXXOX
    ๊ฐ์ฒด ๋™๊ฒฐObject.freezeOXXXX
    • ๊ฐ์ฒด ํ™•์žฅ ๊ธˆ์ง€ : ํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€๊ฐ€ ๊ธˆ์ง€๋œ๋‹ค. ObjectExtensible ๋ฉ”์„œ๋“œ๋กœ ๊ฐ์ฒด ํ™•์žฅ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๊ฐ์ฒด ๋ฐ€๋ด‰ : ๋ฐ€๋ด‰๋œ ๊ฐ์ฒด๋Š” ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฐ€๋ด‰๋œ ๊ฐ์ฒด ์—ฌ๋ถ€๋Š” Object.isSealed ๋ฉ”์„œ๋“œ๋กœ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ๊ฐ์ฒด ๋™๊ฒฐ : ๋™๊ฒฐ๋œ ๊ฐ์ฒด๋Š” ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋™๊ฒฐ๋œ ๊ฐ์ฒด ์—ฌ๋ถ€๋Š” Object.isFrozen ๋ฉ”์„œ๋“œ๋กœ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

์™œ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ๊นŒ?


๊ฐ์ฒด ์ž๋ฃŒํ˜•์„ ์ž์ฃผ ์‚ฌ์šฉํ•จ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋Š” ํ”„๋กœ๊ทธ๋žจ ๋„์ค‘์— ์˜๋„์น˜ ์•Š๊ฒŒ ์ˆ˜์ •์ด๋‚˜ ๋ณ€๊ฒฝ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ ๊ฐ์ฒด์— ํ•จ๋ถ€๋กœ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ์ฒด์˜ ์ปจํŠธ๋กค์ด ํ•„์š”ํ•˜๋‹ค.

์ฆ‰, ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•์„ฑ ๋ฐ ๋ฌด๊ฒฐ์„ฑ์— ๋Œ€ํ•œ ๊ด€๋ฆฌ๋ฅผ ์†์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์•˜๋‹ค.

profile
๊ธฐ๋ก์„ ์ •๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„!

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