๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋…์„œ ๋ชฉ๋ก/๋ชจ๋”ฅ๋‹ค Modern JS Deep Dive

[๋ชจ๋”ฅ๋‹ค] 19์žฅ (2) ํ”„๋กœํ† ํƒ€์ž…

728x90

 

๐Ÿ’ 19.8 ์˜ค๋ฒ„๋ผ์ด๋”ฉ๊ณผ ํ”„๋กœํผํ‹ฐ ์„€๋„์ž‰

 

ํ”„๋กœํ† ํƒ€์ž… ํ”„๋กœํผํ‹ฐ์™€ ๊ฐ™์€ ์ด๋ฆ„์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ธ์Šคํ„ด์Šค์— ์ถ”๊ฐ€ํ•˜๋ฉด

-> ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.

์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๊ฐ€ ํ”„๋กœํ† ํƒ€์ž… ํ”„๋กœํผํ‹ฐ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ–ˆ๊ณ , 

ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๋Š” ๊ฐ€๋ ค์ง„๋‹ค.

=> ์ด๋ ‡๊ฒŒ ์ƒ์† ๊ด€๊ณ„์— ์˜ํ•ด ํ”„๋กœํผํ‹ฐ๊ฐ€ ๊ฐ€๋ ค์ง€๋Š” ํ˜„์ƒ :: ํ”„๋กœํผํ‹ฐ ์„€๋„์ž‰ 

 

๐Ÿ“Œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ

: ์ƒ์œ„ ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์žฌ์ •์˜ํ•˜๋ ค ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹

 

๐Ÿ“Œ ์˜ค๋ฒ„๋กœ๋”ฉ

: ํ•จ์ˆ˜์˜ ์ด๋ฆ„์€ ๋™์ผํ•˜์ง€๋งŒ, ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž… or ๊ฐœ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ , 

๋งค๊ฐœ๋ณ€์ˆ˜์— ์˜ํ•ด ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌ๋ณ„ํ•˜์—ฌ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹. 

JS ๋Š” ์˜ค๋ฒ„๋กœ๋”ฉ์€ ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ arguments ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜๋Š” ์žˆ๋‹ค.

 

 

ํ”„๋กœํ† ํƒ€์ž…์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ญ์ œํ•˜๋ ค๊ณ  ์‹œ๋„ -> ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๊ฐ€ ์‚ญ์ œ๋จ. 

:: ํ•˜์œ„ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ํ”„๋กœํ† ํƒ€์ž…์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณ€๊ฒฝ, ์‚ญ์ œ ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•จ. 

์ฆ‰, get ์•ก์„ธ์Šค๋Š” ํ—ˆ์šฉ๋˜๋‚˜ set ์•ก์„ธ์Šค๋Š” ํ—ˆ์šฉ ์•ˆ๋จ. 

 

ํ”„๋กœํ† ํƒ€์ž… ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณ€๊ฒฝ ๋˜๋Š” ์‚ญ์ œํ•˜๋ ค๋ฉด -> ํ”„๋กœํ† ํƒ€์ž…์— ์ง์ ‘ ์ ‘๊ทผํ•ด์•ผํ•จ. 

 

 

 

 

 

 

๐Ÿ’ 19.9 ํ”„๋กœํ† ํƒ€์ž…์˜ ๊ต์ฒด

 

ํ”„๋กœํ† ํƒ€์ž…์€ ์ž„์˜์˜ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Œ. = ๋ถ€๋ชจ ๊ฐ์ฒด์ธ ํ”„๋กœํ† ํƒ€์ž…์„ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ. 

=> ์ด๋Ÿฐ ํŠน์ง•์„ ํ™œ์šฉํ•ด ๊ฐ์ฒด๊ฐ„์˜ ์ƒ์† ๊ด€๊ณ„๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Œ. 

 

19.9.1 ์ƒ์„ฑ์ž ํ•จ์ˆ˜์— ์˜ํ•œ ํ”„๋กœํ† ํƒ€์ž…์˜ ๊ต์ฒด

 

ํ”„๋กœํ† ํƒ€์ž…์„ ๊ต์ฒดํ•˜๋ฉด -> construnctor ํ”„๋กœํผํ‹ฐ์™€ ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๊ฐ„์˜ ์—ฐ๊ฒฐ์ด ํŒŒ๊ดด๋œ๋‹ค.

constructor ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ๋˜์‚ด๋ฆด ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

19.9.2 ์ธ์Šคํ„ด์Šค์— ์˜ํ•œ ํ”„๋กœํ† ํƒ€์ž…์˜ ๊ต์ฒด

 

์ธ์Šคํ„ด์Šค์˜ __proto__ ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ ๋˜๋Š” Object.setPrototypeOf ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํ”„๋กœํ† ํƒ€์ž…์„ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ prototype ํ”„๋กœํผํ‹ฐ์— ๋‹ค๋ฅธ ์ž„์˜์˜ ๊ฐ์ฒด๋ฅผ ๋ฐ”์ธ๋”ฉ ํ•œ๊ฐ€๋Š” ๊ฒƒ์€ ๋ฏธ๋ž˜์— ์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํ† ํƒ€์ž…์„ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์ž„. 

 

 

๐Ÿ“Œ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์— ์˜ํ•œ ํ”„๋กœํ† ํƒ€์ž… ๊ต์ฒด VS ์ธ์Šคํ„ด์Šค์— ์˜ํ•œ ํ”„๋กœํ† ํƒ€์ž… ๊ต์ฒด

์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ prototype ํ”„๋กœํผํ‹ฐ๊ฐ€ ๊ต์ฒด๋œ ํ”„๋กœํ† ํƒ€์ž…์„ ๊ฐ€๋ฆฌํ‚ด โญ• : ์ƒ์„ฑ์ž ํ•จ์ˆ˜

์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ prototype ํ”„๋กœํผํ‹ฐ๊ฐ€ ๊ต์ฒด๋œ ํ”„๋กœํ† ํƒ€์ž…์„ ๊ฐ€๋ฆฌํ‚ค์ง€ โŒ : ์ธ์Šคํ„ด์Šค

 

ํ”„๋กœํ† ํƒ€์ž… ๊ต์ฒด๋ฅผ ํ†ตํ•ด ์ƒ์† ๊ด€๊ณ„๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š”๊ฑด ๊ฝค๋‚˜ ๋ฒˆ๊ฑฐ๋กœ์šฐ๋‹ˆ, ์ง์ ‘ ๊ต์ฒดํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

 

 

 

 

 

๐Ÿ’ 19.10 instanceof ์—ฐ์‚ฐ์ž

 

๊ฐ์ฒด instanceof ์ƒ์„ฑ์žํ•จ์ˆ˜

 

์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ prototype ์— ๋ฐ”์ธ๋”ฉ ๋œ ๊ฐ์ฒด๊ฐ€, ๊ฐ์ฒด์˜ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ ์ƒ์— ์กด์žฌํ•˜๋ฉด -> โญ• true

์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ prototype ์— ๋ฐ”์ธ๋”ฉ ๋œ ๊ฐ์ฒด๊ฐ€, ๊ฐ์ฒด์˜ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ ์ƒ์— ์—†์œผ๋ฉด -> โŒ false

 

(๊ฑ ๊ฐ์ฒด๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ instance ์ธ๊ฐ€ ๋ผ๋Š” ์—ฐ์‚ฐ์ž ์•„๋‹Œ๊ฐ€?)

 

์•„ ์ธ์Šคํ„ด์Šค ๋งž์•„๋„ false ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Œ. 

์—ฐ๊ฒฐ ํŒŒ๊ดด๋์„ ์ˆ˜๋„ ์žˆ์Œ.

 

 

 

 

๐Ÿ’ 19.11 ์ง์ ‘ ์ƒ์†

 

19.11.1 Object.create ์— ์˜ํ•œ ์ง์ ‘ ์ƒ์†

๋ช…์‹œ์ ์œผ๋กœ ํ”„๋กœํ† ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•จ. 

 

Object.create(์ƒ์„ฑํ•  ๊ฐ์ฒด์˜ ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ์ง€์ •ํ•  ๊ฐ์ฒด, Option ์ƒ์„ฑํ•  ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ํ‚ค์™€ ํ”„๋กœํ„ฐํ”ผ ๋””์ŠคํŠธ๋ฆฝํ„ฐ ๊ฐ์ฒด๋กœ ์ด๋ฃจ์–ด์ง„ ๊ฐ์ฒด)

 

๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด์„œ ์ง์ ‘์ ์œผ๋กœ ์ƒ์†์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ. 

 

์žฅ์ 

- new ์—ฐ์‚ฐ์ž๊ฐ€ ์—†์–ด๋„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

- ํ”„๋กœํ† ํƒ€์ž…์„ ์ง€์ •ํ•˜๋ฉด์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

- ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋„ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

 

19.11.2 ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ๋‚ด๋ถ€์—์„œ __proto__์— ์˜ํ•œ ์ง์ ‘ ์ƒ์†

 

create ๋ฐฉ๋ฒ•์€ ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ๋‘๋ฒˆ์žฌ ์ธ์ž๋กœ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ •์˜ํ•˜๋Š”๊ฒŒ ๋ฒˆ๊ฑฐ์˜ต๋‹ค.

 

ES6 ์—์„œ๋Š” ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ๋‚ด๋ถ€์—์„œ __proto__ ์ ‘๊ทผ์ž ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง์ ‘ ์ƒ์†์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

const myProto =  {x: 10}


const obj ={
	y: 20, 
    __proto__ : myProto
}

 

 

 

 

 

๐Ÿ’ 19.12 ์ •์  ํ”„๋กœํผํ‹ฐ/๋ฉ”์„œ๋“œ

 

์ •์  ํ”„๋กœํผํ‹ฐ/๋ฉ”์„œ๋“œ : ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ์ฐธ์กฐ/ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ/๋ฉ”์„œ๋“œ.

-> ์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑํ•œ ์ธ์Šคํ„ด์Šค๋กœ ์ฐธ์กฐ/ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค.

 

.strictProp

.stricMethod

 

Object.prototype.~ : ๋ชจ๋“  ์ฒด์ธ์˜ ์ข…์ ์˜ ๋ฉ”์„œ๋“œ์ด๋ฏ€๋กœ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
Object.~ : ์ธ์Šคํ„ด์Šค๊ฐ€ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์Œ

 

 

 

 

 

๐Ÿ’ 19.13 ํ”„๋กœํผํ‹ฐ ์กด์žฌ ํ™•์ธ

 

19.13.1 in ์—ฐ์‚ฐ์ž

๊ฐ์ฒด ๋‚ด ํŠน์ • ํ”„๋กœํผํ‹ฐ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ

key in object

 

 

19.13.2  Object.prototype.hasOwnProperty ๋ฉ”์„œ๋“œ

 

๊ฐ์ฒด์— ํŠน์ • ํ”„๋กœํผํ‹ฐ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ.

 

 

 

 

๐Ÿ’ 19.14 ํ”„๋กœํผํ‹ฐ ์—ด๊ฑฐ

 

19.14.1 for...in ๋ฌธ

๊ฐ์ฒด์˜ ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ์—ด๊ฑฐ

 

const person = {
    name: "Lee",
    address: "Seoul",
}

for (const key in person) {
    console.log(key, person[key])
}

//name Lee
//address Seoul

 

=> ๊ฐ์ฒด์˜ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ ์ƒ์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ํ”„๋กœํ† ํƒ€์ž…์˜ ํ”„๋กœํผํ‹ฐ ์ค‘์—์„œ 

ํ”„๋กœํผํ‹ฐ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ [[Enumerable]] ์ด true ์ธ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ์—ด๊ฑฐํ•œ๋‹ค.

 

(ํ‚ค๊ฐ€ ์‹ฌ๋ฒŒ์ธ ํ”„๋กœํผํ‹ฐ๋Š” ์—ด๊ฑฐํ•˜์ง€ ์•Š์Œ)

 

์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง„ ์•Š์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์˜ ๋ชจ๋˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ˆœ์„œ ๋ณด์žฅ, ์ˆซ์ž์— ๋Œ€ํ•ด์„  ์ •๋ ฌ

 

 

๋ฐฐ์—ด์—” for...of ์‚ฌ์šฉํ•˜๊ธฐ. 

 

 

19.14.2 Object.keys/values/entries

 

๊ฐ์ฒด ์ž์‹ ์˜ ๊ณ ์œ  ํ”„๋กœํผํ‹ฐ๋งŒ ์—ด๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด์„  for...in ๋ณด๋‹จ Object.keys/values/entries ์‚ฌ์šฉ ๊ถŒ์žฅ.

keys : ๊ฐ€์ง„ ํ‚ค๋“ค์„ ์—ด๊ฑฐ-> ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜

values : ๊ฐ€์ง„ ๊ฐ’๋“ค์„ ์—ด๊ฑฐ-> ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ 

entries : ๊ฐ€์ง„ ํ‚ค,๊ฐ’ ๋“ค์„ ์Œ์œผ๋กœ ์—ด๊ฑฐ-> ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ 

 

 

 

 

 

 

ํ”„๋กœํผํ‹ฐ ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ณ  ์–ด๋ ต๋‹ค.

์–ด๋””์— ์‚ฌ์šฉํ•˜๋Š”์ง€๋„ ์˜๋ฌธ์ธ๋ฐ, ์ด๊ฑด ๊ฐ•์˜๋กœ ํ•œ๋ฒˆ ๋” ๋“ฃ๊ณ  

๊ณ„์† ์ต์ˆ™ํ•ด์ง€๋Š” ์ˆ˜ ๋ฐ–์— ์—†์„ ๋“ฏ ํ•˜๋‹ค.

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•