3. React
ํค์๋
React๋?
React ์ปดํฌ๋ํธ
React ๋ฆฌ๋ ๋๋ง
IoC(Inversion of Control)
Library vs Framework
๋ฆฌ์กํธ
์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
ํธ์คํธ ํธ๋ฆฌ
๋ฆฌ์กํธ๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ณํํ ์ ์๋ ํธ๋ฆฌ๋ฅผ ์ถ๋ ฅํจ
๊ทธ ํธ๋ฆฌ๋ DOM์ด๋ ios์ ๊ฐ์ด ์ธ๋ถ ํธ์คํธ ํ๊ฒฝ์ ์ผ๋ถ์ด๊ธฐ ๋๋ฌธ์ ํธ์คํธ ํธ๋ฆฌ๋ผ๊ณ ๋ถ๋ฆ
ํธ์คํธ๋ ์์ฒด์ ์ธ ๋ช ๋ นํ API๊ฐ ์์
React๋ ๋ณต์กํ ์ผ์ ํ๋ ํธ์คํธ ํธ๋ฆฌ๋ฅผ ์์ธกํ ์ ์๊ฒ ์กฐ์ํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋๋ฐ ์ ์ฉ
ํธ์คํธ ๊ฐ์ฒด
ํธ์คํธ ํธ๋ฆฌ๋ ๋ ธ๋(ํธ์คํธ ๊ฐ์ฒด)๋ก ๊ตฌ์ฑ๋จ
ํธ์คํธ ๊ฐ์ฒด๋ ๊ณ ์ ํ ์์ฑ์ ๊ฐ์ง๊ณ , ๋ค๋ฅธ ํธ์คํธ ๊ฐ์ฒด๋ฅผ ํฌํจํ ์ ์์
์ผ๋ฐ์ ์ผ๋ก ํธ์คํธ ๊ฐ์ฒด๋ฅผ ์กฐ์ํ๋ API๊ฐ ์๋๋ฐ, ์ด๊ฒ์ ์ง์ ํธ์ถํ์ง ์๊ณ React๊ฐ ์ฒ๋ฆฌํจ
ex)
DOM ํ๊ฒฝ์ DOM ๋ ธ๋
document.createElement('div')
domNode.className
๊ฐ์ ์์ฑ์ ๊ฐ์งappendChild
,removeChild
,setAttribute
๊ฐ์ DOM API๊ฐ ์ ๊ณต๋จ
๋ ๋๋ฌ
React๊ฐ ํน์ ํธ์คํธ ํ๊ฒฝ๊ณผ ํต์ ํ ์ ์๋๋ก ํ๊ณ , ํธ์คํธ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌ
ex) React DOM, React Native
๋ ๋๋ฌ์ ๋๊ฐ์ง ๋ชจ๋
๋ณ๊ฒฝ ๋ชจ๋ : ๋ ธ๋๋ฅผ ๋ง๋ค๊ณ ์์ฑ์ ์ค์ ํ ๋ค์, ๋ ธ๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์์ (DOM ์๋ ๋ฐฉ์)
์์ ๋ชจ๋ :
appendChild()
๊ฐ์ ๋ฉ์๋๋ฅผ ์ ๊ณตํ์ง ์๊ณ ๋ถ๋ชจํธ๋ฆฌ๋ฅผ ๋ณต์ ํ ๋ค ํญ์ ์ต์์ ํ์๋ฅผ ๋์ฒด
์๋ฆฌ๋จผํธ
๋ฆฌ์กํธ์ ๊ฐ์ฅ ์์ ๊ตฌ์ฑ ์์ (DOM Node ๊ฐ์ ํธ์คํธ ๊ฐ์ฒด)
๋ฆฌ์กํธ ์๋ฆฌ๋จผํธ๋ ํ๋ฉด์ ๋ฌด์์ ๊ทธ๋ฆฌ๊ณ ์ถ์์ง์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ฒจ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด
์๋ฆฌ๋จผํธ๋ ์์์ฑ์ ๊ฐ์ง์ง ์์(๋งค๋ฒ ์๋ก ๋ง๋ค์ด์ง๊ณ ๋ฒ๋ ค์ง)
์๋ฆฌ๋จผํธ๋ ๋ถ๋ณํจ(์๋ฆฌ๋จผํธ๋ฅผ ์์ ํ๊ณ ์ถ๋ค๋ฉด ์๋ก์ด ์๋ฆฌ๋จผํธ๋ฅผ ์์ฑ)
์ง์
์
ํธ์คํธ ๊ฐ์ฒด ๋ด๋ถ์ ํน์ React ์๋ฆฌ๋จผํธ ํธ๋ฆฌ๋ฅผ ๋ ๋๋ง ํ ์ ์๊ฒ ํด์ฃผ๋ API
ReactDOM.render(reactElement, domContainer)
๋ domContainer์ ํธ์คํธ ํธ๋ฆฌ๋ฅผ reactElement๋ก ๋ฐ๊ฟ์ค
ReactDom.render๋ฅผ ์ฌ์ฉํ๋ฉด ๋ด๋ถ์์ ์๋์ ๊ฐ์ด ์๋ฆฌ๋จผํธ๋ฅผ ์์ฑํ๊ณ ์์ฑ์ ์ค์ ํจ
์ปดํฌ๋ํธ
UI์ ๋น๋ฉ ๋ธ๋ญ
UI๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ํ๊ณ , ๋ชจ๋ UI๋ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋จ
๋งํฌ์ ์ ๋ฆฌํดํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์
ํจ์๋ช ์ ํญ์ ๋๋ฌธ์๋ก ์์
๋ฆฌ๋ ๋๋ง
๋ ๋๋ง : ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๊ณผ์
DOM : HTML์ ํตํด ์น์ฌ์ดํธ ํ๋ฉด์ ํ์๋๋ ๋ด์ฉ์ ํํํ๋ ๊ฒ
์๋ฐ์คํฌ๋ฆฝํธ๋ API๋ฅผ ํตํด DOM์ ์์ ํ ์ ์์
๋ฆฌ์กํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณ๊ฒฝ์ํ๋ฅผ VDOM(virtual dom)์ ๋จผ์ ์ ์ฉ
VDOM์ด ์ ๋ฐ์ดํธ๋๋ฉด ๋ฆฌ์กํธ๋ ์ด์ VDOM์ ์ค๋ ์ท๊ณผ ๋น๊ตํ์ฌ ํ์ํ ๋ถ๋ถ๋ง DOM๋ง ์ ๋ฐ์ดํธ
์ค์ DOM์ ๋ฐ์ดํธ๋ ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ์ ์ ๋ฒ์๋ง ์ ๋ฐ์ดํธ ํด์ผ ํจ์จ์
์ฌ์กฐ์
DOM์ ํจ์จ์ ์ผ๋ก ์ ๋ฐ์ดํธํ๊ธฐ ์ํ ๋ฐฉ๋ฒ
๋ฆฌ์กํธ๋ ํธ๋ฆฌ์ ๊ฐ์ ์์น์ ์๋ ์๋ฆฌ๋จผํธ ํ์ ์ด ์ด์ ๋ ๋๋ง๊ณผ ๋ค์ ๋ ๋๋ง ์ฌ์ด์ ์ผ์นํ๋ฉด, ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ๋ค์ ์ฌ์ฉ(์์ฑ๋ง ๋ณ๊ฒฝ)
๋ฆฌ์กํธ๋ ์ธ์ ๋ฆฌ๋ ๋๋ง ๋๋๊ฐ
์ปดํฌ๋ํธ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋
์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ปดํฌ๋ํธ์ renderํจ์๊ฐ ํธ์ถ๋๊ณ , props ๋ณ๊ฒฝ ์ฌ๋ถ์ ๊ด๊ณ์์ด ๋ชจ๋ ํ์ ์ปดํฌ๋ํธ๋ค์ด ๋ฆฌ๋ ๋๋ง ๋จ
์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ๋๋ก ๊ตฌ์กฐํ๋์ด ์์ง ์์ ๊ฒฝ์ฐ, ์์๋ ธ๋๋ฅผ ์ ๋ฐ์ดํธํ๋ฉด ๋ชจ๋ ์์๋ค์ renderํจ์๊ฐ ์คํ๋๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์ด ๋ฐ์ํ ์ ์์
์ ์ด์ ์ญ์ (IoC, Inversion of Control)
๊ฐ๋ฐ์๊ฐ ์์ฑํ ๊ฐ์ฒด๋ ๋ฉ์๋์ ์ ์ด๋ฅผ ๊ฐ๋ฐ์๊ฐ ์๋๋ผ ์ธ๋ถ์ ์์ํ๋ ์ค๊ณ ์์น
ํ๋ ์์ํฌ๋ ์ ์ด์ ์ญ์ ๊ฐ๋ ์ด ์ ์ฉ๋ ๋ํ ๊ธฐ์
Library vs Framework
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํ๋ก์ ํธ์ ์ผ๋ถ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ ์ฐ๋ฆฌ๊ฐ ์ง์ ์ ์ดํ๋ ๊ฒ
IoC๋ ์ฐ๋ฆฌ์ ์ฝ๋๊ฐ ํ๋ ์์ํฌ์ ์ผ๋ถ๊ฐ ๋์ด ํ๋ ์์ํฌ์ ์ํด ์ ์ด๋๋ ๊ฒ
์ดํ๋ฆฌ์ผ์ด์ ์ ์ ์ด ์ฑ ์์ด ํ๋ก๊ทธ๋๋จธ์์ ํ๋ ์์ํฌ๋ก ์์๋๋ฏ๋ก, ๊ฐ๋ฐ์๋ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๋ ์ง์คํ ์ ์์
๋ฆฌ์กํธ์์ ์ ์ด์ ์ญ์
๋ฆฌ์กํธ๋ ์ปดํฌ๋ํธ ํธ์ถ ์ ์ด๊ถ์ ๊ฐ์ง
์ฐ๋ฆฌ๊ฐ ์ปดํฌ๋ํธ ํจ์๋ฅผ ์ง์ ํธ์ถํ์ง ์๊ณ ๋ฆฌ์กํธ๋ฅผ ํตํด์ ํธ์ถํ๊ธฐ ๋๋ฌธ์ ๋ฆฌ์กํธ๊ฐ ์ฃผ๋ ์ฌ์กฐ์ ๋ฑ์ ์ด์ ์ ๋๋ฆด ์ ์์
Last updated