front-end/JavaScript

[JavaScript] 17. ํ”„๋กœํ† ํƒ€์ž…(2)

gaan 2023. 5. 2. 00:49

๐Ÿ“– ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ต์žฌ) 19์žฅ. ํ”„๋กœํ† ํƒ€์ž…

 

07. ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ

๐Ÿ’ก ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์ด๋ž€?

๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ(๋ฉ”์„œ๋“œ ํฌํ•จ)์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ํ•ด๋‹น ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๋ ค๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ์—†๋‹ค๋ฉด

์ž์‹ ์˜ ๋ถ€๋ชจ ์—ญํ• ์„ ํ•˜๋Š” ํ”„๋กœํ† ํƒ€์ž…์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

 

๊ทธ๋ ‡๊ฒŒ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ณ„์† ๊ฒ€์ƒ‰ํ•˜๋‹ค๋ณด๋ฉด .. ๊ฒฐ๊ตญ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์˜ ์ข…์ ์— ๋‹ค๋‹ค๋ฅด๊ฒŒ ๋œ๋‹ค.

๊ทธ๋•Œ์˜ ํ”„๋กœํ† ํƒ€์ž…์€ Object.prototype์ด๋‹ค.

 

๐Ÿ’ก ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ๊ณผ ์Šค์ฝ”ํ”„ ์ฒด์ธ์€ ์„œ๋กœ ํ˜‘๋ ฅํ•˜์—ฌ ํ”„๋กœํผํ‹ฐ์™€ ์‹๋ณ„์ž๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ : ์ƒ์†๊ณผ ํ”„๋กœํผํ‹ฐ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜

์Šค์ฝ”ํ”„ ์ฒด์ธ : ์‹๋ณ„์ž ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜


08. ์˜ค๋ฒ„๋ผ์ด๋”ฉ๊ณผ ํ”„๋กœํผํ‹ฐ ์„€๋„์ž‰

์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด๋ž€?

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

 

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

โžก๏ธ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์„ ๋”ฐ๋ผ ํ”„๋กœํ† ํƒ€์ž… ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฒ€์ƒ‰ -> ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ฎ์–ด์”€ X

โžก๏ธ ์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋กœ ์ถ”๊ฐ€ O

 

โžก๏ธ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๋Š” ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜๊ณ , ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ๋Š” ์ƒ์† ๊ด€๊ณ„์— ์˜ํ•ด ๊ฐ€๋ ค์ง„๋‹ค.(ํ”„๋กœํผํ‹ฐ ์„€๋„์ž‰)

 

๐Ÿ’ก ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ณ€๊ฒฝ/์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณด์ž.

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

โžก๏ธ ํ”„๋กœํ† ํƒ€์ž…์— ์ง์ ‘ ์ ‘๊ทผํ•ด์•ผํ•œ๋‹ค.

 

๐Ÿ’ก ์ •๋ฆฌ ๐Ÿ’ก

ํ•˜์œ„ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ํ”„๋กœํ† ํƒ€์ž…์—

get ์•ก์„ธ์Šค(ํ”„๋กœํผํ‹ฐ ์ถ”๊ฐ€)๋Š” ํ—ˆ์šฉ O

set ์•ก์„ธ์Šค(ํ”„๋กœํผํ‹ฐ ๋ณ€๊ฒฝ/์‚ญ์ œ)๋Š” ํ—ˆ์šฉ X


09. ํ”„๋กœํ† ํƒ€์ž…์˜ ๊ต์ฒด

๊ฒฐ๋ก ์€ .. ํ”„๋กœํ† ํƒ€์ž…์€ ์ง์ ‘ ๊ต์ฒดํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค!

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

 

๊ทธ ๋ฒˆ๊ฑฐ๋กœ์šด ๊ณผ์ •์„ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด์ž.

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

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

โžก๏ธ ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ๊ต์ฒดํ•œ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์— constructor ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํ”„๋กœํ† ํƒ€์ž…์˜ constructor ํ”„๋กœํผํ‹ฐ๋ฅผ ๋˜์‚ด๋ฆฐ๋‹ค.

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

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

์ด ๋˜ํ•œ, constructor ํ”„๋กœํผํ‹ฐ์™€ ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๊ฐ„์˜ ์—ฐ๊ฒฐ์ด ํŒŒ๊ดด๋œ๋‹ค.

โžก๏ธ ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ๊ต์ฒดํ•œ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์— constructor ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ prototype ํ”„๋กœํผํ‹ฐ๋ฅผ ์žฌ์„ค์ •ํ•˜์—ฌ ํŒŒ๊ดด๋œ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์™€ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ๋˜์‚ด๋ฆฐ๋‹ค.


10. instanceof ์—ฐ์‚ฐ์ž

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

ํ”ผ์—ฐ์‚ฐ์ž

์ขŒ๋ณ€ : ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹๋ณ„์ž

์šฐ๋ณ€ : ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹๋ณ„์ž

 

instaceof ์—ฐ์‚ฐ์ž๋Š” true/false๋กœ ํ‰๊ฐ€๋œ๋‹ค.

true : ์šฐ๋ณ€์˜ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ prototype์— ๋ฐ”์ธ๋”ฉ๋œ ๊ฐ์ฒด๊ฐ€ -> ์ขŒ๋ณ€์˜ ๊ฐ์ฒด์˜ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ ์ƒ์— ์กด์žฌ O

false : ์กด์žฌ X

 

๐Ÿ’ก ํ”„๋กœํ† ํƒ€์ž…์˜ constructor ํ”„๋กœํผํ‹ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์ฐพ๋Š” ๊ฒƒ X

๐Ÿ’ก ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ prototype์— ๋ฐ”์ธ๋”ฉ๋œ ๊ฐ์ฒด๊ฐ€ ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ ์ƒ์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ O

 

โ“ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์— ์˜ํ•ด ํ”„๋กœํ† ํƒ€์ž…์ด ๊ต์ฒด๋˜๋Š” ๊ฒฝ์šฐ

construct ํ”„๋กœํผํ‹ฐ์™€ ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๊ฐ„์˜ ์—ฐ๊ฒฐ ํŒŒ๊ดด O

but ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ prototype ํ”„๋กœํผํ‹ฐ์™€ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ„์˜ ์—ฐ๊ฒฐ์€ ํŒŒ๊ดด X

โžก๏ธ instanceof ๋Š” ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ X


11. ์ง์ ‘ ์ƒ์†

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

๐Ÿ’ก Object.create ๋ฉ”์„œ๋“œ๋Š” ๋ช…์‹œ์ ์œผ๋กœ ํ”„๋กœํ† ํƒ€์ž…์„ ์ง€์ •ํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

 

๐Ÿ’ก ์œ„ ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜

์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜ : ์ƒ์„ฑํ•  ๊ฐ์ฒด์˜ ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ์ง€์ •ํ•  ๊ฐ์ฒด ์ „๋‹ฌ

๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜ : ์ƒ์„ฑํ•  ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ํ‚ค์™€ ํ”„๋กœํผํ‹ฐ ๋””์Šคํฌ๋ฆฝํ„ฐ ๊ฐ์ฒด๋กœ ์ด๋ค„์ง„ ๊ฐ์ฒด ์ „๋‹ฌ(์ƒ๋žต ๊ฐ€๋Šฅ)

 

๐Ÿ’ก Object.create ๋ฉ”์„œ๋“œ๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด์„œ ์ง์ ‘์ ์œผ๋กœ ์ƒ์†์„ ๊ตฌํ˜„ํ•œ๋‹ค.

์ด๋กœ ์ธํ•œ ์žฅ์  3๊ฐ€์ง€

1. new ์—ฐ์‚ฐ์ž ์—†์ด ๊ฐ์ฒด ์ƒ์„ฑ

2. ํ”„๋กœํ† ํƒ€์ž…์„ ์ง€์ •ํ•˜๋ฉด๊ฑฐ ๊ฐ์ฒด ์ƒ์„ฑ

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

 

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

Object.create ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•œ ์ง์ ‘ ์ƒ์†์ด ๋ฒˆ๊ฑฐ๋กญ๋‹ค๋Š” ๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ..

๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

๐Ÿ“– ์ฐธ๊ณ ์ž๋ฃŒ

https://www.inflearn.com/course/%EB%AA%A8%EB%8D%98-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%94%A5%EB%8B%A4%EC%9D%B4%EB%B8%8C/dashboard