3. React
1. React๋?
์ฌ์ฉ์ ์ธํฐํ์ด์ค(์น UI)๋ฅผ ๋ง๋ค๊ธฐ ์ํ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ปดํฌ๋ํธ๋ก ์ด๋ฃจ์ด์ง (์ปดํฌ๋ํธ : ํ ๊ฐ์ง ๊ธฐ๋ฅ์ ์ํํ๋ UI ๋จ์) ์ ์ธํ ํ๋ก๊ทธ๋๋ฐ
์ ์ธํ ํ๋ก๊ทธ๋๋ฐ โ ๋ฐ๋ก ๋ชฉ์ ์์ , ๋ชฉํ๋ฅผ ๋ช ์ โ ์์ธก ๊ฐ๋ฅํ๊ณ ๋๋ฒ๊น ์ฉ์ด Ex. React
๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ ์ ์ฐจ๋ฅผ ์ผ์ผ์ด ๋์ด, ์คํํ ์๊ณ ๋ฆฌ์ฆ์ ๋ช ์ Ex. jQuery, C, JAVA
์๋ ์ ๋ณด๊ฐ ์์ง ์ ๋ฐ์ดํธ ๋์ง ์์ ๋ด์ฉ๋ ์กด์ฌ
โจ ์์ฆ React ์ฌ์ฉ๋ฒ์ ๋ค๋ฃฌ ๋ฌธ์(๊ถ์ฅ)
๋ฒ ํ ๋ฒ์ /์์ฑ๋๊ฐ ๋ฎ์/ํ๊ตญ์ด ๋ฒ์ญ ์์
๐ ๋ฆฌ์กํธ์ ์ดํด๋ฅผ ๋๋ ๊ธ
2. React ์ปดํฌ๋ํธ
UI๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋
๋ฆฝ์ ์ธ ์ฌ๋ฌ ์กฐ๊ฐ์ผ๋ก ๋๋ ๊ฒ โ ์ ๋ ํ
์คํธ ํ๊ธฐ ์ข์
props
๋ฅผ ๋ฐ์, ํ๋ฉด์ ์ด๋ป๊ฒ ํ์๋๋์ง๋ฅผ ๊ธฐ์ ํ๋ React ์๋ฆฌ๋จผํธ๋ฅผ ๋ฐํ
์ปดํฌ๋ํธ๋ฅผ ์ ์ํ๋ ๋ฐฉ๋ฒ : ํจ์ ์ปดํฌ๋ํธ, ํด๋์ค ์ปดํฌ๋ํธ
Props
์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ
๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์์ ์ปดํฌ๋ํธ์ ์ ๋ฌ
๊ฐ์ ์ด๋ฆ์ ๋ถ์ฌ์ ์ ๋ฌ
properties์ ์ค์๋ง
์ ์ , ๋์ ๋ฐ์ดํฐ(state), ์ปดํฌ๋ํธ ์ ๋ฌ ๊ฐ๋ฅ
์์ ์ปดํฌ๋ํธ์ props๊ฐ ๋ฐ๋ ๋๋ง๋ค, ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ re-render ๋ ๋๋ง๋ค re-render๋จ
3. React ๋ฆฌ๋ ๋๋ง
state
์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ฐ์ง๋ state
์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฒ์์ด
์ฒดํฌ๋ฐ์ค์ ๊ฐ
๐ ์ด๋ค ๊ฒ์ด state๊ฐ ๋์ด์ผ ํ๋ ์ง ๊ฐ ๋ฐ์ดํฐ์ ์ธ ๊ฐ์ง ์ง๋ฌธ์ ํตํด ๊ฒฐ์ ํ ์ ์์
๋ถ๋ชจ๋ก๋ถํฐ props๋ฅผ ํตํด ์ ๋ฌ๋๋๊ฐ? ๊ทธ๋ฌ๋ฉด state๊ฐ ์๋๋ค.
์๊ฐ์ด ์ง๋๋ ๋ณํ์ง ์๋๊ฐ? ๊ทธ๋ฌ๋ฉด state๊ฐ ์๋๋ค.
์ปดํฌ๋ํธ ์์ ๋ค๋ฅธ state๋ props๋ฅผ ๊ฐ์ง๊ณ ๊ณ์ฐ ๊ฐ๋ฅํ๊ฐ? ๊ทธ๋ฌ๋ฉด state๊ฐ ์๋๋ค.
๋ฆฌ๋ ๋๋ง
state๊ฐ ๋ณ๊ฒฝ๋ ๋ ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ ๋ฆฌ๋ ๋๋ง์ ๋ชจ๋ ์ปดํฌ๋ํธ์ render๋ฅผ ํธ์ถํ๋ ๊ฒ์ด์ง, React๊ฐ ์ธ๋ง์ดํธ์ํค๊ณ ๋ค์ ๋ง์ดํธํ๋ ๊ฒ์ ์๋ ๋ฆฌ๋ ๋๋ง์ ์ํ๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ปดํฌ๋ํธ์ ํด๋น ์ปดํฌ๋ํธ์ ํ์ ์ปดํฌ๋ํธ์๋ง ์ํฅ์ ๋ฏธ์นจ
๐ Virtual DOM Tree (๊ฐ์ DOM ํธ๋ฆฌ) Virtual DOM์ ๋ธ๋ผ์ฐ์ API ์์ ์๋ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊ตฌํ๋๋ ๊ฐ๋ ์ด์ ์ DOM Tree์ ๋น๊ตํด์ ์ค์ง์ ์ผ๋ก ์ด๋ค ๋ถ๋ถ์ด ์ ๋ฐ์ดํธ ๋ผ์ผ ํ๋์ง ๊ณ์ฐํด์ ํ์ํ ๋ถ๋ถ๋ง DOM Tree์ ์ ๋ฐ์ดํธ ( = ์ฌ์กฐ์ ) ๋ ๋๋ง ์ ํ์ ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง์ ์ ์ฉ โ render ํจ์๊ฐ ๋ง์ด ํธ์ถ๋์ด๋ ์ฑ๋ฅ์ ํฌ๊ฒ ๊ฑฑ์ ํ์ง ์์๋ ๋๋ ์ด์
๋ฆฌ์กํธ ์ปดํฌ๋ํธ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์ ๋ณด๊ด
60fps๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณด์ฅ
๐ ์ฌ์กฐ์ (Reconciliation) React๋ ์ ์ธ์ API๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๊ฐฑ์ ์ด ๋ ๋๋ง๋ค ๋งค๋ฒ ๋ฌด์์ด ๋ฐ๋์๋์ง๋ฅผ ๊ฑฑ์ ํ ํ์๊ฐ ์์ React ๋ด๋ถ์์๋ ๋น๊ต (diffing) ์๊ณ ๋ฆฌ์ฆ์ ํตํด ๋ฌด์์ด ๋ณ๊ฒฝ๋์๋์ง ๊ณ์ฐ์ด ์ผ์ด๋จ โ ์ปดํฌ๋ํธ์ ๊ฐฑ์ ์ด ์์ธก ๊ฐ๋ฅํด์ง๊ณ , ๋น ๋ฅธ ์ฑ์ ๋ง๋ค ์ ์์
4. IoC(Inversion of Control)
"IoC containers์ ๋ถ์์ผ๋ก ์ธํด ์ฌ๋๋ค์ด IoC(์ ์ด์ ์ญ์ )์ ์๋ฏธ์ ํผ๋์ ๋๋๋ค. IoC(์ ์ด์ ์ญ์ )์ ์ผ๋ฐ์ ์ธ ์์น์, IoC containers๊ฐ ์ฌ์ฉํ๋ IoC(์ ์ด์ ์ญ์ )์ ํน์ ์คํ์ผ(์: ์์กด์ฑ ์ฃผ์ )๊ณผ ํผ๋ํ๋ค."
์ ์ด์ ์ญ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ฑํ ํ๋ก๊ทธ๋จ์ด ์ฌ์ฌ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ฆ ์ ์ด๋ฅผ ๋ฐ๊ฒ ๋๋ ๋์์ธ ํจํด
๊ธฐ์กด โ ์์ฑํ ํ๋ก๊ทธ๋จ์ด ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฝ๋๋ฅผ ํธ์ถํด ์ด์ฉ IoC์ด ์ ์ฉ๋ ๊ตฌ์กฐ โ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฝ๋๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ํธ์ถ
context API์์์ ์ ์ด์ ์ญ์
IoC์ ๋ชฉ์
์์ ์ ๊ตฌํํ๋ ๋ฐฉ์๊ณผ ์์ ์ํ ์์ฒด๋ฅผ ๋ถ๋ฆฌ
๋ชจ๋์ ์ ์ํ ๋, ๋ชจ๋๊ณผ ์ธ๋ถ ํ๋ก๊ทธ๋จ์ ๊ฒฐํฉ์ ๋ํด ๊ณ ๋ฏผํ ํ์ ์์ด ๋ชจ๋์ ๋ชฉ์ ์ ์ง์ค
๋ค๋ฅธ ์์คํ ์ด ์ด๋ป๊ฒ ๋์ํ ์ง์ ๋ํด ๊ณ ๋ฏผํ ํ์ ์์ด, ๋ฏธ๋ฆฌ ์ ํด์ง ํ์ฝ๋๋ก๋ง ๋์ํ๊ฒ ํ๋ฉด ๋จ
๋ชจ๋์ ๋ฐ๊พธ์ด๋ ๋ค๋ฅธ ์์คํ ์ ๋ถ์์ฉ์ ์ผ์ผํค์ง ์์
์์กด์ฑ ์ฃผ์
์์กด์ฑ ์ฃผ์ (dependency injection)์ ํ๋์ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ์์กด์ฑ์ ์ ๊ณตํ๋ ํ ํฌ๋ ๋ชจ๋ ๊ฐ ๊ฒฐํฉ์ ๋์จํ๊ฒ ๋ง๋ฆ
5. Library vs Framework
Q. React๋ ํ๋ ์์ํฌ์ธ๊ฐ์, ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ๊ฐ์?
๊ณต์ ๋ฌธ์์ ํํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ
IoC๋ Framework์ ์ ์ํ๋ ์ค์ํ ํน์ง React๋ IoC๋ฅผ ํตํด ์ํ์ ์ ๋ฐ์ดํธ๊ฐ ์ฝํ ๋ณต์กํ ์ํฉ์ ๊ฐ๋จํ ์ ์ธํ UI๋ก ๊ตฌ์ฑ (React์ ์ฒซ ๋ฒ์งธ ํน์ง) ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํผ๋์ด ๋ฐ์ํ ์ ์์
๐ก ์ผ๋ฐ์ ์ผ๋ก IoC๋ IoC ์ปจํ ์ด๋์ ์ฎ์ฌ์ DI(Dependency injection, ์์กด์ฑ ์ฃผ์ )์ ๋์์ด์ฒ๋ผ ์ฐ์ด๊ณ , Next.js, Remix ๋ฑ์ Framework์ด๋ผ๊ณ ๋ถ๋ฆ
Last updated