๐ฅ Hello React
React๋ UI๋ฅผ ๋ง๋ค๊ธฐ ์ํ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
React๋ ์ค์ค๋ก ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ์บก์ํ๋ ์ปดํฌ๋ํธ๋ฅผ ์กฐํฉํด ๋ณต์กํ UI๋ฅผ ๋ง๋ค ์ ์๋๋ก ์ง์ํ๋ฉฐ, ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋จ์ ๋ฐ๋ผ ์ ์ ํ ์ปดํฌ๋ํธ๋ง ํจ์จ์ ์ผ๋ก ๊ฐฑ์ ํ๊ณ ๋ ๋๋งํฉ๋๋ค.
๐ฅ React์ ์๋ฆฌ, ํน์ง์ด ๋ฌด์์ธ๊ฐ์?
React๋ ์ํ ๋ณํ์ ๋ฐ๋ฅธ UI ๋ณ๊ฒฝ์ ์ ๊ฒฐ์ ํ๊ธฐ ์ํด ์ฌ์กฐ์ (Reconciliation)์ด๋ผ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉฐ, ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด Virtual DOM์ด๋ผ๋ ํจํด์ ์ฌ์ฉํ์์ต๋๋ค.
๋ํ React 16๋ถํฐ React Fiber์์ง์ ์ฌ์ฉํ์ฌ, ๋ฆฌ์กํธ์ Reconciler๋ฅผ ์ ๋นํ์์ต๋๋ค.
React์ ํฐ ํน์ง์ผ๋ก๋ Virtual DOM ๊ฐ๋ ๊ณผ, ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ด ์์ต๋๋ค.
Virtual DOM์ Real DOM์ in-memory ํํ์ผ๋ก, UI ํํ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ฉฐ, Real DOM๊ณผ ๋๊ธฐํ๋ฉ๋๋ค.
๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๊ฐ๋จํ ์ค๋ช ํ๋ฉด, HTML์ ๋ฐ์ธ๋ฉํ ๋ฐ์ดํฐ๋ฅผ JS์์ ์์ ํ ๊ฒฝ์ฐ ํ๋ฉด์ ๋ฐ์๋์ง๋ง, ํ๋ฉด์์ ์ง์ ํด๋น ์๋ฆฌ๋จผํธ์ ๊ฐ์ ๋ฐ๊ฟจ์ ๋, JS์ ๋ฐ์ดํฐ๊ฐ ์์ ๋๋๋ก ๋ฐ์ธ๋ฉํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง ์๋ ๋ฐฉ๋ฒ์ ๋๋ค.
** ์ฌ์กฐ์ ์ด๋?
๋ฆฌ์กํธ๋ ์ปดํฌ๋ํธ์์ prop์ด๋ state๊ฐ ๋ณ๊ฒฝ๋ ๋, ์ง์ ์ ๋ ๋๋ง๋ ์์(element)์ ์๋ก ๋ฐํ๋ ์์๋ฅผ ๋น๊ตํ์ฌ ์ค์ DOM์ ์ ๋ฐ์ดํธ ํ ์ง ๋ง์ง ๊ฒฐ์ ํด์ผ ํฉ๋๋ค. ์ด๋ ๋ element๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด ๋ฆฌ์กํธ๋ ์๋ก์ด ์์๋ก DOM์ ์ ๋ฐ์ดํธ ํ๋๋ฐ, ์ด๋ฌํ ํ๋ก์ธ์ค๋ฅผ reconciliation์ด๋ผ๊ณ ํฉ๋๋ค.
๐ฅ Virtual DOM ์๋ ์๋ฆฌ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
Virtual DOM์ ๋ค์๋ ์ฌ์กฐ์ (Reconciliation) ์๊ณ ๋ฆฌ์ฆ์ด ์์ต๋๋ค.
React๋ ์ฌ์กฐ์ ๊ณผ ๋ ๋๋ง์ด ๋ณ๊ฐ์ ๋จ๊ณ๊ฐ ๋๋๋ก ์ค๊ณ๋์์ต๋๋ค.
Reconciler๋ ํธ๋ฆฌ์ ์ด๋ค ๋ถ๋ถ์ด ๋ณ๊ฒฝ๋์๋์ง ๊ณ์ฐํ๊ณ , ์ดํ Renderer๋ ๊ณ์ฐ๋ ์ ๋ณด๋ฅผ ์ฑ์ ์ค์ ๋ก ์ ๋ฐ์ดํธํ๋ ๋ฐ ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ , Fiber๋ฅผ ์ด์ฉํ์ฌ, ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ ํนํ๋๋๋ก stack์ ์ฌ๊ตฌ์ฑํ์์ต๋๋ค.
์ด๋ฅผ ํตํ์ฌ stack frame์ ๋ฉ๋ชจ๋ฆฌ์ ๋ณด๊ดํ๊ณ , ์ํ๋ ๊ฒฝ์ฐ ์ธ์ ๋ ์ง ์คํํ ์ ์๋๋ก ๋ง๋ค์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ์ค์ผ์ค๋ง ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ณ ์ ํ์์ต๋๋ค.
Fiber๋ฅผ ๋์ ํ๋ฉฐ ๋ชจ๋ ์ ๋ฐ์ดํธ๋ฅผ ์ฆ์ ์ ์ฉํ๋ ๊ฒ์ด ์๋, ๋ ์ฐ์ ์์๊ฐ ๋์ ์ ๋ฐ์ดํธ๋ฅผ ๋จผ์ ์๋ฃํ ์ ์๊ฒ ๋์์ต๋๋ค.
'Elice > Study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] SPA, ๋ผ์ฐํ (0) | 2024.03.15 |
---|---|
[JavaScript/React] ํ๋กํ ํ์ (0) | 2024.03.15 |
[JavaScript] ์ค์ฝํ (0) | 2024.03.14 |
[JavaScript] ๋น๋๊ธฐ (Promise, async, await, JSON) (0) | 2024.03.14 |
[JavaScript] class, iterable, ์ ๋๋ ์ดํฐ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ ์ฐจ์ด (0) | 2024.03.11 |