[JavaScript] 17. ํ๋กํ ํ์ (2)
๐ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ต์ฌ) 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 ๋ฉ์๋๋ฅผ ํตํ ์ง์ ์์์ด ๋ฒ๊ฑฐ๋กญ๋ค๋ ๊ฒ์ ํด๊ฒฐํ๊ธฐ ์ํ ..
๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๐ ์ฐธ๊ณ ์๋ฃ