Module, State Management ์์์ผ ํ๋ ์ด์
์๋ฐ์คํฌ๋ฆฝํธ์ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ ์ถ๋ค๋ฉด
์๋ฐ์คํฌ๋ฆฝํธ๋ก Module๋ก ๊ตฌ๋ถํ์ ๋ ๋ฐ์ดํฐ์ ์ํ๊ด๋ฆฌ๋ฅผ ์ผ๊ด๋๊ฒ ํ๊ณ ์ถ๋ค๋ฉด
์ด ๋ฌธ์๋ฅผ ๋ณด๊ณ ๋๋ฉด
์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ดํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค ๋ ๋ชจ๋ ๋จ์๋ก ๋ถ๋ฆฌํ ์ ์๋ค.
์ํ๊ด๋ฆฌ๋ฅผ ์ํด ๊ฐ์ฅ ์ค์ํ ๊ฐ๋
์ธ ์ผ๊ด์ฑ๊ณผ ์ํ์ ๊ทผ ๋ฒ์์ ๋ํด ์ด์ผ๊ธฐํด๋ณผ ์ ์๋ค.
Module
์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฝ๋๋ฅผ ๋ก๋ํ ๋ "๋ชจ๋ ๊ฒ์ ๊ณต์ ํ๋" ๋ฐฉ์์ ๊ฐ์ฅ ์๋ฌ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ด ๋ถ๋ถ์ด๊ณ ์ธ์ด์ ์ผ๋ก๋ ํผ๋์ค๋ฌ์ด ๋ถ๋ถ์
๋๋ค. ๋ค๋ฅธ ์ธ์ด๋ค์ ์ฝ๋์ ์ค์ฝํ๋ฅผ ์ ์ํ๊ธฐ ์ํด ํจํค์ง ๊ฐ์ ๊ฐ๋
์ ๊ฐ๊ณ ์์ง๋ง, ES6 ์ด์ ๊น์ง ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ชจ๋ ๋ถ๋ถ์ ํ๋์ ์ ์ญ ์ค์ฝํ๋ฅผ ๊ณต์ ํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์น ์ ํ๋ฆฌ์ผ์ด์
์ด ๋ณต์กํด์ง์๋ก ๋ ๋ง์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ฒ ๋์๊ณ , ์ด๋ฌํ ๋ฐฉ์์ ์ด๋ฆ ์ถฉ๋์ด๋, ๋ณด์์ ์ฐ๋ ค๋๋ ๋ฌธ์ ๋ค์ ์ผ์ผ์ผฐ์ต๋๋ค. ES6์ ๋ชฉํ ์ค ํ๋๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ด์๊ณ Module์ด ๋ฑ์ฅํ์ต๋๋ค.
๋ชจ๋์ ํน์ ๊ธฐ๋ฅ์ ํ๋ ํ๋์ ์ฝ๋ ๋ฌถ์ ๋จ์์
๋๋ค. ๋ชจ๋์ด ๋ชจ์ฌ ํ๋์ ํฐ ํ๋ก๊ทธ๋จ์ด ๋๋ฉฐ, ๋ชจ๋์ ๋ ๋ค๋ฅธ ๋ชจ๋์ ์ผ๋ถ๋ก์ ๊ธฐ๋ฅ์ ํ ์ ์์ต๋๋ค. ์ด๋ฐ ๋ชจ๋์ ํต์ฌ์ "์บก์ํ" ์
๋๋ค. ๋ชจ๋ ์์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ชจ๋ ์์์ ๋์ํ๋ฉฐ, ๋ชจ๋ ๋ฐ์์๋ ์ ๊ทผ์ด ํ์ฉ๋ ์์ฑ์ด๋ ๋ฉ์๋๋ง ์ฌ์ฉํ ์ ์๋๋ก ํ์ฉ๋ฉ๋๋ค. ES5๊น์ง๋ ๋ชจ๋์ ๋ํ ์ง์์ด ๋์ง ์์๊ธฐ ๋๋ฌธ์, ๋ชจ๋๊ณผ ๋น์ทํ ๊ตฌ์กฐ๋ฅผ ์ฆ์ ์คํ ํจ์๋ฅผ ์ด์ฉํด ๊ตฌํํ์ต๋๋ค.
const module = (function() {
const _str = "๋ชจ๋ ๋ณ์"
return {
myfunc: function() {
return _str
}
}
})()
console.log(module.myfunc())
// ๋ชจ๋ ๋ณ์
JavaScript
๋ณต์ฌ
๋ฐํ ๋ฐ์ ๊ฐ์ฒด๋ myfunc ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๊ณ , ํด๋ก์ ์ด๊ธฐ ๋๋ฌธ์ _str ๋ณ์์ ์ ๊ทผํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ module.myfunc()๋ฅผ ์คํํ๋ฉด "๋ชจ๋ ๋ณ์" ๋ฌธ์์ด์ ๋ฐํ ๋ฐ๊ฒ ๋ฉ๋๋ค. ๋ชจ๋ ์ธ๋ถ์์๋ _str ๋ณ์์ ์ ๊ทผํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ฉฐ ๋ชจ๋ ํํ์ ๋ํ ๋์ฆ๊ฐ ์๋ค ๋ณด๋, ๊ฒฐ๊ตญ ES6์์๋ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ชจ๋์ ์ง์ํ๊ฒ ๋์์ต๋๋ค. (ES6์ ๋ชจ๋์ด ๋์ค๊ธฐ๊น์ง ํ์ค์ ์ํ ์์ง์์ ์์ธํ ์์๋ณด๊ณ ์ถ๋ค๋ฉด ๋งํฌ๋ฅผ ํ์ธํด์ฃผ์ธ์!) ๊ตฌํ ๋ฐฉ๋ฒ์ด ์ฌํํ๊ณ ๋ช
ํํ๋ฏ๋ก ๊ฐ๋ฅํ๋ฉด ์์ ๊ฐ์ ๋ฐฉ์๋ณด๋ค๋ ES6์ ์๋ก์ด ๋ชจ๋ ์์ฑ ๋ฐฉ๋ฒ์ ์ถ์ฒํ๋๋ฐ์. ES6์์ ์๋กญ๊ฒ ์ง์ํ๋ ๋ชจ๋ ์์คํ
์ ๋ค์์ ๊ท์น์ ๋ฐ๋ผ ์์ฑํฉ๋๋ค.
๋ชจ๋์ ํ์ผ ๋จ์๋ก ๊ตฌ์ฑํ๋ ๊ฑธ ๊ธฐ๋ณธ์ผ๋ก ํ๋ค. ํ์ง๋ง ๊ฐ๋จํ ๋ฉ์๋ ํํ์ธ ๋ชจ๋๋ค์ธ ๊ฒฝ์ฐ ํ ๊ฐ์ ํ์ผ์์ ๊ด๋ฆฌํ๊ธฐ๋ ํ๋ค.
๋ชจ๋์ ๋ณ์, ํจ์, ํด๋์ค ๋ฑ์ export ํค์๋๋ก ๋
ธ์ถํ๊ณ import๋ก ๋ค๋ฅธ ๋ชจ๋, ํ์ด์ง์์ ๊ฐ์ ธ์์ ์ฌ์ฉํ๋ค.
๋ชจ๋์ ์ํ ์ฐธ์กฐ๋ฅผ ํ ์ ์๋ค. ๋ชจ๋ ์์คํ
์ ํญ์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋งจ ์์ ์ฒ์ ์คํ๋๋ ๋ฃจํธ ํ์ด์ง/๋ชจ๋์ด ์์ผ๋ฉฐ ํ ๋ฐฉํฅ์ผ๋ก๋ง ์ฐธ์กฐํ ์ ์๋ค.
๋ชจ๋์ ์ด๋ฆ์ ์ค๋ณต๋ ์ ์๋ค. ๋ฐ๋ผ์ ๊ฐ์ ธ์ค๋(import) ์์ ์ ์ด๋ฆ์ ์ฌ์ ์ํด ์ถฉ๋์ ํผํ ์ ์๋ค.
์ํ๋
ํ๋ก ํธ์๋ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ฉด์ ์ํ(state)๊ด๋ฆฌ๋ผ๋ ์ฉ์ด๋ฅผ ๋ง์ด ์ฐ๋๋ฐ์. ์ํ๋ ์ฝ๊ฒ ๋งํ๋ฉด '๋ฐ์ดํฐ' ๋ผ๊ณ ์๊ฐํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ์ด ์ํ ๊ด๋ฆฌ๋ ์ดํ๋ฆฌ์ผ์ด์
์ด ๋ณต์กํด์ง์๋ก ์ ์ ์ด๋ ค์์ง๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋จ์ํ ๊ตฌ์กฐ์ผ๋๋ถํฐ ์ด ์ํ๋ฅผ ์ด๋ป๊ฒ ๊ด๋ฆฌํ๋ฉด ์ข์์ง์ ๋ํ ๊ณ ๋ฏผ์ ์ถฉ๋ถํ ํด๋ณด๋ ๊ฒ์ ๋ ํฐ ์ดํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค๊ธฐ ์ํ ๊ณผ์ ์์ ์ค์ํฉ๋๋ค.
๋จผ์ ์ํ๋ ๋ฌด์์ผ๊น์? ์ํ๊ฐ ์๊ณ , ์ํ๊ฐ ์๋ ๊ฒ์ด ์์ํ
๋ฐ์. ๋์ ์ด๋ค ์ฐจ์ด๊ฐ ์์๊น์? ์ํ์์ ์ค์ํ ๋ถ๋ถ์ ๋ฐ๋ก ๊ฐ์ด ๋ณํ๋ค๋ ๊ฒ์
๋๋ค. ์ด ๊ฐ์ด ๋ณํ๋๋ฐ ์์ธก๋ ๊ฐ์ผ๋ก ๋ณํด์ผ ์๋ํ๋๋ก ๋์์ ์ํํ ์ ์์ผ๋, ์์ธก ๋ฒ์ ์์์ ๋ณํ๊ฒ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๊ทธ๋์ ๊ทธ ์์ธก๋ ๋ฒ์๋ฅผ ๋ง๋ค๊ธฐ ์ํด์, ์ฌ๋ฌ๊ฐ์ง ์ ์ฝ์กฐ๊ฑด์ด๋ ๊ตฌ์กฐ์ ์ธ ์ค๊ณ๋ฅผ ๊ณ ๋ฏผํ ์ ์์ต๋๋ค.
์ด ์์ธก ๋ฒ์๋ฅผ ์ต์ํ ํ๊ธฐ ์ํด์๋
์ํ์ ๋ํด
์ผ๊ด๋๊ฒ READํ๋ ๋ก์ง๊ณผ,
์ต์ํํ Writeํ๋ ๋ก์ง์ ๋ง๋ค ๋ ๊ฐ๋ฅํด์ง๋๋ค.
๋ฒ์๋ฅผ ์ต์ํํ๋๊ฑฐ๋ ๋ชจ๋ ๋จ์, ์ค์ฝํ ๋จ์์ ๋ํ ๊ณ ๋ฏผ์ผ๋ก ํ์ฅ๋ ์ ์์ต๋๋ค.
์ํ์ ๋ํ ์ผ๊ด์ฑ์ ์ํ๋ฅผ ์ฌ๋ฌ ๊ณณ์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก READํ๋ ๋ฐฉ์์ ๊ณ ๋ฏผํด๋ณผ ์ ์์ต๋๋ค.
์ํ๋ฅผ ์ฌ๋ฌ ๊ณณ์์ ์ง์ ์ ์ผ๋ก ์์ ํ๋ค๋ฉด, ์ํ๋ฅผ ์์ธกํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์ฐ๋ ์์ ํ๋ ๋ถ๋ถ์ ์ ํํ๊ณ , ๊ทธ ์ฑ
์์ ๊ฐ์ง๊ณ ์๋ ๋์์ด ๋ถ๋ช
ํ๊ฒ ์ญํ ์ ๊ฐ์ง๋ค๋ฉด ์ต์ํํ write๊ฐ ๊ฐ๋ฅํด์ง ์ ์์ต๋๋ค.
์์ ๋ฅผ ํตํด์ ํ๋ก ํธ์๋์ ์ํ ๊ด๋ฆฌ์ ๋ํด ์์๋ณผํ
๋ฐ์. ์์ฃผ ๊ฐ๋จํ ํฌ๋๋ฆฌ์คํธ๋ฅผ ํตํด ์ํ ๊ด๋ฆฌ์ ๋ํด ๋ค๋ค๋ณผ ์์ ์
๋๋ค.
์ TodoList ์ฑ์ TodoItems๋ผ๋ ๋ฐ์ดํฐ ๊ฐ์ ๊ฐ์ง๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ๊ตฐ๋ฐ์์ ๊ด๋ฆฌํ๋ค๋ฉด ํ ๊ณณ์ ๋ณํ๊ฐ ์์ ๋๋ง๋ค, ๋ชจ๋ ๋ณํ๋ฅผ ๊ฐ์งํ๊ณ ๋ฐ์ํ๋ ค๋ฉด ์ค๋ณต ์ฝ๋๋ ๋ง์์ง๊ณ ๋ถํ์ํ dom ์ ๊ทผ ๋ํ ๋ง์์ง ์ ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ, ์ด๋์ ๊ด๋ฆฌํ๋ฉด ์ข์๊น์?
์ฐ์ ๋ฐ์ดํฐ์ ๊ด๋ จ๋ ๋ถ๋ถ๋ค์ ์ฒดํฌํ๊ธฐ ์ํด ์์ ๋ฌธ์์์ ๋ณด์๋ ๊ฒ์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ๊ฐฑ์ ๋์ผ ํ๋ ๊ธฐ์ค์ผ๋ก UI๋ฅผ ๋ถ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
๋ ์ธ๋ถ์ ์ผ๋ก ๋ถ๋ฆฌํ ์ ๋ ์์ง๋ง, ์ฐ์ ์ ์ด 4๊ฐ์ง๋ก ๋ถ๋ฆฌํด๋ณผ๊ฑด๋ฐ์. ์์ฒ๋ผ ๊ตฌ๋ถํ๊ณ ๋๋ฉด, TodoApp์ด๋ผ๋ ์ปดํฌ๋ํธ ์์ TodoInput, TodoList, TodoCount UI๋ค์ด ํฌํจ๋์ด ์์ต๋๋ค.
์ด๋ฌํ ๊ตฌ์กฐ์์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด์๋ ๊ณ ๋ คํด์ผํ ๊ฒ์ ๋ฌด์์ด ์์๊น์? ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ธฐ ์ํ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ๋ฌด์์ผ๊น์? ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ฐฉ๋ฒ๋ค์ ๊ฒ์ํด๋ณด์
๋ ์ข๊ณ , ์ค์ค๋ก ๊ณ ๋ฏผํ ๋ฐฉ๋ฒ์ ์ง์ ๊ตฌํํด๋ด๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ์ฒ์๋ถํฐ ์ ๋ง๋ค์ด์ง ํจํด๋ค์ ๋ฐ๋ก ์ฌ์ฉํ๊ธฐ ๋ณด๋ค๋ ์ง์ ๊ณ ๋ฏผํด๋ณด๊ณ , ๊ตฌํํด๋ณด๋ ๊ณผ์ ์ด ์๋ค๋ฉด ์๋ก์ด ๊ธฐ์ ๊ณผ ๋๊ตฌ๋ค์ ๋ง๋ฌ์ ๋ ๊ทธ ์๋ฏธ๋ฅผ ๋์ฑ ์ ์ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ถ๋ถ์ ๊ณ ๋ คํด์ ๋ก๋ ๋ฏธ์
์ ๋ฐ์ํด์ฃผ์ธ์.
์ ์์ ๋ก ์ฐ์ตํด๋ณด๊ณ ์ถ๋ค๋ฉด!
๋งํฌ์์ fork๋ฐ์ ์ ์์ค์์๋ถํฐ ์ถ์ํ์์ผ๋๊ฐ๋ฉฐ ์ํ๊ด๋ฆฌ๋ฅผ ์ฐ์ตํด๋ณผ ์ ์์ต๋๋ค. ๋ง์ฝ ์์ฑํ๊ณ ๋ ๋ค์์๋ PR์ ๋ณด๋ด๋ณด์ธ์! ๋๊ตฐ๊ฐ๊ฐ ์ฌ๋ฌ๋ถ์ PR์ ๋ฆฌ๋ทฐ๋ฅผ ๋จ๊ฒจ์ค๊บผ์์!
์ ๋ฆฌ
์๋ฐ์คํฌ๋ฆฝํธ์ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํด ์ผ๊ด๋๊ฒ, ์ํ์ ๋ํด ์ ๊ทผํ ์ ์๋ ๋ฒ์๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค.
๋ฐ๋ก ์ ์ ๋ฆฌ๋ ๋์์ธ ํจํด์ด๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐธ๊ณ ํ ์๋ ์์ง๋ง ์ค์ค๋ก ๊ณ ๋ฏผํด๋ณด๊ณ ์ฐพ์๋ณธ๋ค๋ฉด ๊ทธ๋ฌํ ๋๊ตฌ๋ค์ ์ฒ ํ์ ๋ ์ ์ดํดํ ์ ์๊ณ , ๊ธฐ์ ์ ํ์ฉ๋๋ ๋ ๋์์ง ์ ์๋ค.