-
Notifications
You must be signed in to change notification settings - Fork 0
javascript_jquery_basic_5_1
์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์์ ํจ์๋ก ๋๋ ์์ฑํ๋ฉฐ ์ด ํจ์๋ค์ ์ํ๋ ์์์ ๋ง๊ฒ ์์ฑํ๋ ๋ฐฉ์์ ๋งํ๋ค. ์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ์ฅ ํฐ ํน์ง์ ์ฒ๋ฆฌ ๋ถ๋ถ์ธ ํจ์๋ค์์ ์ ์ญ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํด์ ์ฌ์ฉํ๋ค๋ ์ ์ด๋ค. ๋ฐ์ดํฐ๋ ์ผ๋ฐ์ ์ผ๋ก ์ ์ญ ๋ฐ์ดํฐ๋ก ๋ง๋ค์ด์ง๋ฉฐ ํจ์ ํธ์ถ์ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ๋งค๊ฐ๋ณ์ ๊ฐ์ผ๋ก ๋๊ธฐ๋ ๊ตฌ์กฐ๋ก ๋์ด์๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด ๋จ์๋ก ๋๋ ์์ ํ๋ ๋ฐฉ์์ ๋งํ๋ค. ์ด ๋ฐฉ์์ ์ค๋๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๋ํ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ด๋ค. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ์ฅ ํฐ ํน์ง์ ํด๋์ค๋ฅผ ์ด์ฉํด ์ฐ๊ด ์๋ ์ฒ๋ฆฌ๋ถ๋ถ(ํจ์)๊ณผ ๋ฐ์ดํฐ ๋ถ๋ถ(๋ณ์)๋ฅผ ํ๋๋ก ๋ฌถ์ด ๊ฐ์ฒด(์ธ์คํด์ค)๋ฅผ ์์ฑํด ์ฌ์ฉํ๋ค๋ ์ ์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์๋๋ค. ๊ทธ๋ฌ๋ ES6 ๋ถํฐ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฏ๋ก์จ ๊ฐ์ฒด์งํฅ ์ธ์ด๋ก ๋ณํํด๊ฐ๊ณ ์๋ค.
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ ์ผ์ข ์ ๋ ผ๋ฌธ๊ณผ๋ ๊ฐ์ ์ฐ๊ตฌ ๊ฒฐ๊ณผ์ ์ฐ๋ฌผ์ด๋ค. ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ณ ๋์ ๋์ง ์๋ ๋ฉ์ง ์ฝ๋๋ฅผ ๋ง๋ค ์ ์์๊น ์์์ด ๋ ธ๋ ฅํ ๋์ ์์ฑํ ์ต์์ ๊ฒฐ๊ณผ๋ฌผ์ด๋ค. ๊ฐ์ฒด์งํฅ ์ธ์ด๋ ์๋ ๋ค ๊ฐ์ง ํน์ง์ ๊ตฌํํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ผ ํ๋ค.
- ์ถ์ํ
- ์บก์ํ
- ์์
- ๋คํ์ฑ
์ถ์ํ๋ ์ค๊ณํ๋ ์์ ์์ฒด๋ฅผ ๋ํ๋ธ๋ค. ์ถ์ํ์ ๊ฐ์ฅ ํฐ ํน์ง์ ํ๋กํผํฐ์ ๋ฉ์๋์ ์ด๋ฆ์ ์์ฑํ๋ ์ ์ธ ๋ถ๋ถ๋ง ๋ง๋ค ๋ฟ ๊ตฌํ ์์ค๋ฅผ ๊ตฌํํ์ง ์๋๋ค๋ ์ ์ด๋ค.
์์ : ES5 ๊ธฐ๋ฐ ์ถ์ํด๋์ค์ ์ถ์๋ฉ์๋ ๊ตฌํ
์ถ์ํ ์์ ๋ด์ฉ์ค ์ด๋ค ํ๋กํผํฐ์ ๋ฉ์๋๋ ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ๊ณ ๋ ์ด๋ค ํ๋กํผํฐ์ ๋ฉ์๋๋ ์ธ๋ถ์์ ์ ๊ทผํ์ง ๋ชปํ๊ฒ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด ์์ ์ ์บก์ํ๋ผ๊ณ ํ๋ค.
์์ : ES5 ๊ธฐ๋ฐ ์ ๊ทผ์ง์ ์ ๊ตฌํ
์์์ ํน์ ํด๋์ค(๋ถ๋ชจ ํด๋์ค)์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ํ์(์์) ํด๋์ค๊ฐ ๋ฌผ๋ ค๋ฐ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์์ : ES5 ๊ธฐ๋ฐ ์์ ๊ตฌํ
์์ : ES6 ๊ธฐ๋ฐ ์์ ๊ตฌํ
๋คํ์ฑ์ ํน์ ๊ธฐ๋ฅ์ ์ ์ธ(์ค๊ณ)๋ถ๋ถ๊ณผ ๊ตฌํ(๋์)๋ถ๋ถ์ผ๋ก ๋ถ๋ฆฌํ ํ ๊ตฌํ๋ถ๋ถ์ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋ง๋ค์ด ์ ํํด์ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ๊ธฐ๋ฅ์ด๋ค. ์ฌ๊ธฐ์ ์ ์ธ ๋ถ๋ถ์ ์ธํฐํ์ด์ค๋ผ๊ณ ๋ ํ๋ค.
์์ : this๋ฅผ ์ด์ฉํ ๋คํ์ฑ ๊ตฌํ
์์ : ์์์ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋๋ฅผ ์ด์ฉํ ๋คํ์ฑ ๊ตฌํ
๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋๋ ์์ ํด๋์ค์์ ๋ถ๋ชจ ํด๋์ค์ ๊ธฐ๋ฅ์ ์ฌ์ ์ํ ๋ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ด๋ค.
๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ์ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง ์ฌ๋ฌ ๊ฐ์ ๋ฉ์๋๋ฅผ ๋ง๋ ํ ๋งค๊ฐ๋ณ์ ํ์ ๊ณผ ๊ฐ์์ ๋ง๋ ๋ฉ์๋๊ฐ ์๋์ผ๋ก ํธ์ถ๋๋ ๊ธฐ๋ฅ์ ๋ปํ๋ค.
ํด๋์ค๋ฅผ ๋ง๋ค๋ฉด ์๋์ผ๋ก prototype์ constructor๋ผ๋ ํ๋กํผํฐ๊ฐ ๋ง๋ค์ด์ง๋ค.
์ด ํ๋กํผํฐ์๋ ํด๋น ํด๋์ค์ ์์ฑ์ ์ ๋ณด๊ฐ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ด๊ธฐ๊ฒ ๋๋ค. constructor ํ๋กํผํฐ๋ฅผ ์ด์ฉํด ์ฌ์ฉํ๋ ๊ฐ์ฒด(์ธ์คํด์ค)๊ฐ ์ด๋ค ํด๋์ค์ ์ธ์คํด์ค์ธ์ง ์์๋ผ ์ ์๋ค. ํ์ง๋ง ์์๊ด๊ณ๋ฅผ ๋งบ๋ ๊ฒฝ์ฐ ์์ ํด๋์ค์ constructor ํ๋กํผํฐ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ชจํด๋์ค์ ์์ฑ์๊ฐ ๋ด๊ธฐ๊ฒ ๋์ด constructor ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๊ณ ๋ ํด๋น ๊ฐ์ฒด์ ํด๋์ค๋ฅผ ์์๋ผ ์๊ฐ ์๋ค.
์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ constructor ํ๋กํผํฐ์ ํด๋น ์์ฑ์๋ฅผ ์ค์ ํด์ฃผ๋ฉด ๋๋ค.
MyChild.prototype.constructor = MyChild;- ์ฝ๋ ์ฌ์ฌ์ฉ๋ง์ ์ํด ํด๋์ค ์์์ ์ฌ์ฉํ๋ฉด ์๋๋ค
- ์ค๋ณต ์ฝ๋ ์ ๊ฑฐ๋ง์ ์ํด ํด๋์ค ์์์ ์ฌ์ฉํด์๋ ์๋๋ค.
- ํด๋์ค ์์์ ํจ๋ฐ๋ฆฌ ๊ด๊ณ(IS A)๋ฅผ ์ ์งํ๋ฉด์ ๊ธฐ๋ฅ์ ํ์ฅํ ๋๋ง ์ฌ์ฉํด์ผ ํ๋ค.
ํฉ์ฑ(Composition)์ด๋ ํ์ํ ๊ธฐ๋ฅ์ ์ง์ ๊ตฌํํ๋ ๊ฒ์ด ์๋๋ผ ํ์ํ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ์๋ ๊ฐ์ฒด์ ์ฐ๊ฒฐํด์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ์๋ ๊ฐ์ฒด์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฐ์ฒด ๊ฐ์ ๊ด๊ณ๋ฅผ ํฉ์ฑ๊ด๊ณ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์๋์ ๊ฐ์ ๋ฌธ์ฅ์ ๋ง๋ค์ด๋ณด๋ฉด ํด๋์ค ๊ฐ์ ๊ด๊ณ๊ฐ ๋ณด๋ค ๋ช ํํด์ง๋ค.
- ์์๊ด๊ณ :
~์ ~์ด๋ค(is-a) - ํฌํจ๊ด๊ณ :
~์ ~์ ๊ฐ์ง๊ณ ์๋ค(has-a)
์์ )
- SportsCar๋ Car์ด๋ค (์์ ๊ด๊ณ)
- Deck์ Card๋ฅผ ๊ฐ์ง๊ณ ์๋ค (ํฌํจ ๊ด๊ณ)
- SimpleCallery๋ HAlignable(๊ฐ๋ก์ ๋ ฌ)์ ๊ฐ์ง๊ณ ์๋ค. (ํฌํจ ๊ด๊ณ)
์ด์ฒ๋ผ ํฌํจ ๊ด๊ณ๊ฐ ์ฑ๋ฆฝํ๋ ๊ฒฝ์ฐ ํฉ์ฑ์ ์ฌ์ฉํด ํด๋์ค์ ๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ๋ฉด ๋๋ค.