Notice
Recent Posts
Recent Comments
Link
ยซ   2025/05   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

eazyseon

16์žฅ ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋ณธ๋ฌธ

๐Ÿ“•์ฑ…/๋”ฅ๋‹ค์ด๋ธŒ

16์žฅ ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ

eazyseon 2023. 11. 24. 17:02
๋ฐ˜์‘ํ˜•

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

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

 

ECMAScript ์— ์ •์˜๋œ๋Œ€๋กœ ๊ตฌํ˜„์€ ๋˜์–ด์žˆ์œผ๋‚˜ ๊ณต๊ฐœ๋œ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋Š” ์•„๋‹ˆ์—ฌ์„œ
์ง์ ‘ ์ ‘๊ทผ๊ณผ ํ˜ธ์ถœ์€ ํ•  ์ˆ˜ ์—†๋‹ค.

 

๋‹จ, ์ผ๋ถ€ ๋‚ด๋ถ€ ์Šฌ๋กฏ๊ณผ ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ๋Š” ๊ฐ„์ ‘์  ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ชจ๋“  ๊ฐ์ฒด๋Š” [[prototype]]์ด๋ผ๋Š” ๋‚ด๋ถ€ ์Šฌ๋กฏ์€ ๊ฐ–๋Š”๋‹ค.
์ด ๋‚ด๋ถ€ ์Šฌ๋กฏ์€ .__proto__๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

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

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

ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’, ๊ฐ’์˜ ๊ฐฑ์‹  ๊ฐ€๋Šฅ ์—ฌ๋ถ€,์—ด๊ฑฐ ๊ฐ€๋Šฅ ์—ฌ๋ถ€,์žฌ์ •์˜ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ๋งํ•œ๋‹ค. 

 

ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ๊ด€๋ฆฌํ•˜๋Š” ๋‚ด๋ถ€์ƒํƒœ ๊ฐ’์ธ
๋‚ด๋ถ€ ์Šฌ๋กฏ [[value]][[writable]][[Enumerable]][[Configurable]]์ด๋‹ค.

const person = {
  name: 'Lee',
};

console.log(Object.getOwnPropertyDescriptor(person, 'name'));
// {value: "Lee", writable: true, enumerable: true, configurable: true}

 

๋”ฐ๋ผ์„œ ์ง์ ‘ ์ ‘๊ทผํ• ์ˆ˜ ์—†์ง€๋งŒ Object.getOwnPropertyDescriptor ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„์ ‘์ ์œผ๋กœ ํ™•์ธํ• ์ˆ˜ ์žˆ๋‹ค.

 

Object.getOwnPropertyDescriptor ๋ฉ”์„œ๋“œ๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•ด ํ”„๋กœํผํ‹ฐ ๋””์Šคํฌ๋ฆฝํ„ฐ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ
ES8์—์„œ ๋„์ž…๋œ Object.getOwnPropertyDescriptors ๋ฉ”์„œ๋“œ๋Š” ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ์˜ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœํผํ‹ฐ ๋””์Šคํฌ๋ฆฝํ„ฐ ๊ฐ์ฒด๋“ค์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

const person = { 
  name: "Lee"
};

person.age = 20;

console.log(Object.getOwnPropertyDescriptors(person));

//
{
  name : {value: "Lee", writable: true, enumerable: true, configurable; true},
age : {value: 20, writable: true, enumerable: true, configurable; true},
}

 

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

 

- ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ

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

 

- ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ

์ž์ฒด์ ์œผ๋กœ ๊ฐ’์„ ๊ฐ–์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์„ ์ฝ๊ฑฐ๋‚˜ ์ €์žฅํ•  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ์ ‘๊ทผ์ž ํ•จ์ˆ˜๋กœ ๊ตฌ์„ฑ๋œ ํ”„๋กœํผํ‹ฐ์ด๋‹ค.

[[get]] , [[set]] , [[Enumerable]] , [[Configurable]]

 

์ ‘๊ทผ์ž ํ•จ์ˆ˜๋Š” getter/setter ํ•จ์ˆ˜๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.
์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋Š” getter์™€ setter ํ•จ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ๊ณ  ํ•˜๋‚˜๋งŒ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

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

 

ํ”„๋กœํผํ‹ฐ ์ •์˜๋ž€ ์ƒˆ๋กœ์šด ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด์„œ ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ •์˜ํ•˜๊ฑฐ๋‚˜, ๊ธฐ์กด ํ”„๋กœํผํ‹ฐ์˜ ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

 

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

์ธ์ˆ˜๋กœ๋Š” ๊ฐ์ฒด์˜ ์ฐธ์กฐ์™€ ๋ฐ์ดํ„ฐ ํ”„๋กœํผํ‹ฐ์˜ ํ‚ค์ธ ๋ฌธ์ž์—ด, ํ”„๋กœํผํ‹ฐ ๋””์Šคํฌ๋ฆฝํ„ฐ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

 

const person = {};

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

 

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

 

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

๋ฐ˜์‘ํ˜•
Comments