# ๐ณ๏ธ Object
# ๐ง๐ผโ๐ Object์ ์์์ผ ํ๋ ์ด์
โ์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ฐ์ฒด๋ฅผ ์ค์ํ๊ฒ ์ฌ์ฉํ๋ ์ด์ ๋ฅผ ๋ชจ๋ฅธ๋ค๋ฉด
# ๐๐ปโโ๏ธ ์ด ๋ฌธ์๋ฅผ ๋ณด๊ณ ๋๋ฉด
- ์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ฐ์ฒด๊ฐ ๊ฐ์ง๋ ํน์ง์ ๋ณต์ตํ๊ณ , ๋ชจ๋ฅด๋ ๋ถ๋ถ์ ์ฐพ์๋์ค ์ ์๋ค.
# Object
๊ฐ์ฒด๋ผ๋ ๋ง์ ํ๋ก๊ทธ๋๋ฐํ๋ฉด์ ๋ง์ด ๋ค์ด๋ณด๊ณ ๊ตฌํ ๋ฐ ์ฌ์ฉ ๋ํ ํด๋ดค์ ํ ๋ฐ์. ๊ฐ์ฒด๋ ๊ณผ์ฐ ๋ฌด์์ผ๊น์? ๊ฐ์ฒด๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์กด์ฌํ๊ฑฐ๋ ์ถ์์ ์ผ๋ก ์๊ฐํ ์ ์๋ ๊ฒ ์ค์์ ์์ ์ ์์ฑ์ ๊ฐ์ง๊ณ ์๊ณ ๋ค๋ฅธ ๊ฒ๊ณผ ์๋ณ ๊ฐ๋ฅํ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ฐ์ฒด๋ ์์ฑ๊ณผ ๋์(๋ฉ์๋)์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ์ํํธ์จ์ด์์ ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค๋ ๊ฒ์ ๋ฌผ๋ฆฌ์ ์กด์ฌ๋, ์ถ์์ ์๊ฐ์ ๊ตฌํ๋ฌผ๋ค์ ์์ฑ๊ณผ ๋ฉ์๋๋ก ์ ์ํ๋ ๊ณผ์ ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
# ์๋ฐ์คํฌ๋ฆฝํธ์์์ Object
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ฐ์ดํฐ ์ ์ฅ์ ์ํด ์์ ์๋ฃํ๊ณผ ๊ฐ์ฒด ์ด 2๊ฐ์ง ์ข ๋ฅ์ ์๋ฃํ์ ์ฌ์ฉํฉ๋๋ค. ์ซ์๋ ๋ฌธ์์ด ๊ฐ์ ๋จ์ผํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์์ ์๋ฃํ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์์ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ ํํ์ ๋๋ค. ํ์ง๋ง ์ค์ ์ฐ๋ฆฌ๊ฐ ์ด์๊ฐ๋ ์ธ์์ ๋ฐ์ดํฐ๋ค์ ์ด๋ฐ ์์ ์๋ฃํ์ผ๋ก๋ ๋ค ๋ด์ ์๊ฐ ์์ต๋๋ค. ๋ถ๊ฐ๋ฅํ ๊ฒ์ ์๋์ง๋ง, ์ ๋ฐฑ๊ฐ์ ๋ณ์๋ฅผ ์ ์ธํด์ผ ํ๋ ๋ฑ ๋งค์ฐ ๋นํจ์จ์ ์ผ ์ ์์ฃ .
๊ทธ๋ฆฌ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ฃผ ๋ฌด๋๋ก ํ๋ํ๋ ์น์์๋ ๋ค์ํ ๋ฐ์ดํฐ๋ค์ด JSON ๋๋ XML ๋ฑ์ ํํ๋ก ํํ๋์ด ์ ์ก๋๋ฉฐ, ์ฌ๋ฌ ํ์ ์ ๋ฐ์ดํฐ๊ฐ ๋์ด์ต๋๋ค. ์ด๋ฐ ๋ฐ์ดํฐ๋ฅผ ์ผ์ผ์ด ๊ตฌ๋ถํด ์ ์ฅํ๋ค๋ฉด ๋ง์ ์ฒ๋ฆฌ ์ง์ฐ์๊ฐ์ ๋ฐ์์ํค๊ณ , ๋นํจ์จ์ ์ธ ์ฐ์ฐ ์์ฉ์ด ๋ง์ด ํ์ํฉ๋๋ค. ์ด๋ฐ ๋ณต์ก์ฑ์ ์๋น์ค ์ฌ์ฉ์์๊ฒ ๋๊ธฐ์๊ฐ์ ๋ฐ์์ํค๊ณ ์ดํ์ ์ผ๊ธฐํ ์๋ ์์ฃ . ๊ฐ์ฒด๋ ์ด๋ฌํ ๋ฐ์ดํฐ๋ค์ ํ๋์ ์ปจํ ์ด๋์ ๋ด์ ์ ์ฅํ๊ณ , ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๊ฒ ๋์์ค๋๋ค.
์๋๋ ๊ฐ์ฒด์ ๋ํด ์ดํดํ๊ณ ์๋์ง ์ฒดํฌํด๋ณผ ์ ์๋ ๋ด์ฉ์ธ๋ฐ์. ์๋์ ๋ด์ฉ ์ค ์๊ณ ์๋ ๊ฒ๊ณผ ๋ชจ๋ฅด๋ ๋ถ๋ถ์ ์ฒดํฌํด๋ณด๊ณ , ํ์ตํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์์!
# โ ์ ํ ์ฒดํฌ๋ฆฌ์คํธ
# 1) ๊ฐ์ฒด์ ์ ์
- ๊ฐ์ฒด๋ ๊ฐ์ ์ ์ฅํ๋, ์ด๋ฆ์ด ๋ถ์ ์์ฑ์ผ๋ก ๊ตฌ์ฑ๋๋ค..
- ์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ฑฐ์ ๋ชจ๋ ๊ฒ๋ค์ ๊ฐ์ฒด์ ๊ฐ์ด ๋์ํ๋ค. ๋ณตํฉ ๊ฐ์ฒด๋ ๋ฌผ๋ก , ๊ฐ์ฒด์ ์์๊ฐ ์ญ์ ๊ฐ์ฒด์ฒ๋ผ ์ทจ๊ธํ ์ ์๋ค. ์ด ๋๋ฌธ์ ์ผ๋ถ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ชจ๋ ๊ฒ์ด ๊ฐ์ฒด๋ผ๊ณ ๋ ํ๋ค.
- ๊ฐ์ฒด๋ new ํค์๋์ ํจ๊ป ์์ฑ์ ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ง๋ค ์ ์๋ค. ๋๋ literal ์ด๋ผ๋ ์ฝ์ ํํ์ ์ฌ์ฉํด์ ๋ง๋ค ์๋ ์๋ค.
# 2) ๊ฐ์ฒด์ ์์ ๊ฐ
- null, undefined, "string", 10, true, false๋ ๋ชจ๋ ๊ฐ์ฒด์ฒ๋ผ ๋ค๋ฃจ์ง ์์ผ๋ฉด ๊ฐ์ฒด์ ํน์ฑ์ ๊ฐ์ง ์๋ ์์๊ฐ์ด๋ค.
- ์์๊ฐ์ ๊ฐ์ผ๋ก ์ ์ฅ๋๊ณ , ์์๊ฐ์ ๋ณต์ฌํ๋ฉด ๊ทธ๋๋ก ๋ณต์ฌ๊ฐ ๋๋ค. ๋ฐ๋ฉด ๊ฐ์ฒด๋ ์ฐธ์กฐ๊ฐ ์ ์ฅ๋๋ฏ๋ก ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ๋ฉด ์ฐธ์กฐ๋ง ๋ณต์ฌ๋๋ค.
- ์์๊ฐ์ ๋ค๋ฅธ ์์๊ฐ๊ณผ ๋น๊ตํ ๋ ๊ฐ์ด ๊ฐ์์ง ๋น๊ตํ๋ค. ๋ฐ๋ฉด ๊ฐ์ฒด๋ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋น๊ตํ ๋ ์๋ก ๋๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์๋์ง ํ์ธํ๋ค. ์ฆ ๊ฐ์ฒด๋ ์๋ก ๋์ผํ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์์ ๋๋ง ๊ฐ์ ๊ฒ์ผ๋ก ๋ณธ๋ค.
# 3) ๊ฐ์ฒด์ Prototype
- ๊ฐ์ฒด์ ์์ฑ์ ์ฐธ์กฐํ๋ฉด ๋จผ์ ํด๋น ๊ฐ์ฒด์ ์์ฑ์ด ์ฐธ์กฐ๋์ด ์๋์ง ํ์ธํ๊ณ , ์ฐธ์กฐ๋์ด์์ง ์์ผ๋ฉด ์์ฑ์ ํจ์์ prototype ์์ฑ์์ ์ฐพ๋๋ค. ์ฌ๊ธฐ์๋ ์ฐพ์ ์ ์์ผ๋ฉด prototype์ ๊ฐ์ฒด์ด๊ณ , ๊ฐ์ฒด๋ Object() ์์ฑ์๋ก๋ถํฐ ๋ง๋ค์ด์ง๋ฏ๋ก Object() ์์ฑ์์ prototype ์์ฑ(Object.prototype)์์ ์์ฑ์ ์ฐพ๋๋ค. ์ฌ๊ธฐ์๋ ์์ฑ์ ์ฐพ์ ์ ์์ผ๋ฉด ์ด ์์ฑ์ ์ ์๋์ง ์์๋ค(undefined)๊ณ ํ๋จํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ํ๋กํ ํ์ ์ฒด์ธ ๊ฒ์์ ์ฌ์ฉํด ์์์ ๊ตฌํํ๋ค(์ด๋ฅผ ํ๋กํ ํ์ ์์์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค,)
- prototype ์์ฑ์ Object() ๊ฐ์ฒด๋ผ๋ ์ฌ์ค๊ณผ ๊ฐ์ฒด ์์ฑ ๊ฒ์ ์ฒด์ธ(=ํ๋กํ ํ์ ์์) ๋๋ถ์ ๋ชจ๋ ๊ฐ์ฒด๋ Object()๋ฅผ ์์๋ฐ๋๋ค.
# 4) ํจ์์ ๊ฐ์ฒด์์์ ์ค์ฝํ
- ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ 1๊ธ ๊ฐ์ฒด๋ค. ํจ์๋ ์์ฑ๊ณผ ๊ฐ์ ์ง๋ ๊ฐ์ฒด๋ค.
- ํจ์ ์์์ ์ฌ์ฉํ๋ this ํค์๋๋ ํจ์๋ฅผ ํฌํจํ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค.
- this์ ๊ฐ์ ํจ์๊ฐ ํธ์ถ๋๋ ์ปจํ ์คํธ์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๊ณ ์ ํ ์ค์ฝํ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
- ํจ์๋ ์ค์ฝํ ์ฒด์ธ์ ํตํด ๋ณ์๋ฅผ ์ฐพ๋๋ค.
- ์ค์ฝํ ์ฒด์ธ์ ์ฝ๋๊ฐ ์์ฑ๋ ์์น์ ๋ฐ๋ผ ๋ง๋ค์ด์ง๋ฏ๋ก ํจ์๊ฐ ํธ์ถ๋ ์ปจํ ์คํธ์๋ ์ํฅ์ ๋ฐ์ง ์๋๋ค. ์ด ๋๋ถ์ ํ ๋ฒ ์์ฑ๋ ํจ์๋ ๋ค๋ฅธ ์ปจํ ์คํธ ์์ ์คํ๋๋๋ผ๋ ์๋์ ์ค์ฝํ์ ์ ๊ทผํ ์ ์๋ค. ์ด๋ฐ ํน์ฑ์ผ๋ก ์ธํด ํด๋ก์ ๊ฐ ๋ง๋ค์ด์ง๋ค.
# ์๋ฐ์คํฌ๋ฆฝํธ์์์ OOP(Object Oriented Programming)
OOP์ ๊ธฐ๋ณธ ์ปจ์ ์ ํ๋ก๊ทธ๋จ ๋ด์์ ํํํ๊ณ ์ ํ๋ ์ค ์ธ๊ณ(real world)์ ์ผ๋ค์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ ๋ชจ๋ธ๋งํ๊ณ , ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋ถ๊ฐ๋ฅ ํน์ ์์ฃผ ์ด๋ ค์ ์ ์ผ๋ค์ ์ฝ๊ฒ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค๋ ๊ฒ์ ๋๋ค. -MDN-
์๋ฐ์คํฌ๋ฆฝํธ์๋ Object, Function, Array ๋ฑ๊ณผ ๊ฐ์ด ๋ค์ํ ๊ธฐ๋ณธ ๊ฐ์ฒด๋ค์ด ์๊ณ , ๋ชจ๋ ๊ฐ์ฒด๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ธฐ๋ณธ ๊ฐ์ฒด์ธ Object๋ฅผ ํ์ฅํ๊ณ ์์ต๋๋ค. ํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ๋ ํด๋์ค ๊ธฐ๋ฐ์ด ์๋๋ผ ํ๋กํ ํ์ ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๊ฐ์ฒด ๊ธฐ๋ฐ์ ์ธ์ด์ ๋๋ค. ์ด๋ ๊ฒ ๊ธฐ๋ฐ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ง๋ค๊ณ ์์ํ๋ ๋ฐฉ๋ฒ์ ๋ช ํํ์ง ์์ ์ ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ํจ์ ๊ธฐ๋ฐ ์ธ์ด์ธ Scheme์ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ๋ค ์๋ฐ์์ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ ๋ค์ ๊ฐ์ ธ์๋๋ฐ์. ๋ฐ๋ผ์ ๊ฐ์ฒด์งํฅ ์ธ์ด๋ ์๋์ง๋ง ๊ฐ์ฒด์งํฅ๊ณผ ๋น์ทํ ํน์ง๋ค์ ์ง์ํฉ๋๋ค. ์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ฐ๋ ์ด ๋ฐ๋ก ํ๋กํ ํ์ (prototype) ์ ๋๋ค.
์ฌ์ค OOP์ ๊ฐ์ฒด์งํฅ์ ํด๋์ค๋ผ๋ ์ฃผ์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํต์ฌ์ ๊ดํตํ๋ ๋ด์ฉ์ด๋ผ๊ณ ๋ณด๊ธฐ๋ ์ด๋ ต์ต๋๋ค. ํ์ง๋ง ํ๋ก๊ทธ๋๋ฐ ์ธ๊ณ๋ฅผ ์ดํดํ๋๋ฐ ์์ด ์ค์ํ ๊ฐ๋ ์ด๊ณ , ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฐ์ดํฐํ์ , ์คํ ์ปจํ ์คํธ, this, ํด๋ก์ , ํ๋กํ ํ์ ๋ฑ์ ์ดํดํ๋ ๋ฐ ํฐ ๋์์ด ๋ฉ๋๋ค.
# ๐ ์ฐธ๊ณ ๋งํฌ
โ ๐ EVENT ๐๏ธ Prototype & Mixin โ