# ๋ฏน์ค์ธ๊ณผ ํ์ด ์ค๋ ์ปดํฌ๋ํธ ๋น๊ต ๋ถ์
# HOC vs Mixins
ํ์ด ์ค๋ ์ปดํฌ๋ํธ๋ ๋ฆฌ์กํธ ์ง์์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์ ๊ธฐ๋ฐํ ์ปดํฌ๋ํธ ๊ฐ๋ฐ ํจํด์ ๋๋ค. ์ปดํฌ๋ํธ์ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด๊ธฐ๋ ํ์ง๋ง ์บก์ํ(encapsulation)๊ณผ ์ปดํฌ๋ํธ ์ถ์ํ๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ด๊ธฐ๋ ํ๋ฐ์. ์ปดํฌ๋ํธ์ ๋ก์ง์ ํผ์ํ์ง ์๊ณ ์ฌ์ฌ์ฉ์ฑ์ ์ต๋ํ ๋์ด์ฌ๋ฆฌ๊ฒ ๋ค๋ ์ ๋ต์ด๊ธฐ๋ ํฉ๋๋ค. ์๋ฅผ ํ๋ฒ ๋ค์ด๋ณผ๊ฒ์.
# HOC๋ฅผ ์ด์ฉํ ์ ๊ทผ ๋ฐฉ์์ ์
์ผ๋ฐ์ ์ผ๋ก HOC๋ฅผ ์ด์ฉํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํ๊ฒ ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ปดํฌ๋ํธ ๊ด๊ณ์์ ์ธต์ด ํ๋ ๋ ์๊น๋๋ค.
- ์ผ๋ฐ : ์์ - ํ์
- HOC : ์์ - HOC - ํ์
์์ ๊ฐ์ด HOC๋ฅผ ์ด์ฉํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ๋ฐํด ๋๊ฐ๋ ๊ฒฝ์ฐ ์์์ ํ์์ ์ปดํฌ๋ํธ ๋ก์ง์ ๋ณ๊ฒฝํ์ง ์์ ์ฑ ๊ธฐ๋ฅ์ ํ์ฅํด ๋๊ฐ ์ ์์ต๋๋ค. ๊ฐ์ฅ ๊ฐ๋จํ ์๋ก๋ ์์ ์ปดํฌ๋ํธ์ ํน์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ฉํ๊ธฐ ์ํ url๋ง ์ฃผ์ ํ๊ณ , ํ์์์๋ ๊ทธ url์ ๋ฟ๋ฆฌ๊ธฐ๋ง ํ๋ฉด ๋๊ฒ ๋ค์. ์ถ๊ฐ์ ์ธ ๋ก์ง์ HOC์์ ํด๊ฒฐํ๋ฉด ๋๊ฒ ์ต๋๋ค.
# Mixins๋ฅผ ์ด์ฉํ ์ ๊ทผ ๋ฐฉ์
์์ ๊ฐ์ด HOC๋ฅผ ์ด์ฉํ ์ ๊ทผ ๋ฐฉ์์ ์ปดํฌ๋ํธ์ ๋ ์ด์ด๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ญ๋๋ค. ๋ฌ๋ฆฌ ๋งํด ์ปดํฌ๋ํธ์ props, event ๋ฑ์ ๋๊ฒจ์ผ ํ๋ ์ฝ๋๊ฐ ๋ง์์ง์ฃ . ์ด์ ๋นํด mixins๋ ๋ฌธ๋ฒ๋ ๊ฐ๋จํ๊ณ ์ ๋ฌธ์์๊ฒ ๋ฒ๊ฑฐ์ด HOC ์ฌ๊ณ ๋ฐฉ์์ ํ์ง ์์๋ ๋๋ ์ด์ ์ด ์์ต๋๋ค. ๋ฌผ๋ก ์ปดํฌ๋ํธ ๊ธฐ๋ฅ ํ ์คํธ ์ธก๋ฉด์์๋ HOC๊ฐ mixins๋ณด๋ค ์ ๋ฆฌํฉ๋๋ค. ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ(sepration of concerns)๋ผ๋ ์ธก๋ฉด์์๋ ์ปดํฌ๋ํธ์ ์ญํ ์ด ๊นจ๋์ด ๋ถ๋ฆฌ๊ฐ ๋๋ฉด์ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
# ๊ฒฐ๋ก
๋ฐ๋ผ์, ๊ฐ์ธ์ ์ ํธ๋ ์ฐจ์ด๊ฒ ์ง๋ง ๋ทฐ์์๋ mixins๋ scoped slot์ ์ต๋ํ ํ์ฉํ๊ณ ๊ทธ๋๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด๋ ์ปดํฌ๋ํธ ์ฌ์ฌ์ฉ์ฑ์ ๊ทน๋ํํ๊ณ ์ถ๋ค๋ฉด HOC๋ฅผ ํ์ฉํ์ฌ ์ปดํฌ๋ํธ ์ฝ๋๋ฅผ ์ฌํ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ถ์ฒํฉ๋๋ค.
โ Plugins jQuery to Vue โ