๐ ๋ค์ด๊ฐ๊ธฐ
์ธํด์ผ๋ก ์ ์ฌํ์ง ์ด๋๋ง 2๋ฌ์ด ์ง๋ฌ๋ค.
๊ฐ๋ฐ์ ๋ํด ๋ฌด์์ ๋ฐฐ์ ๋๊ฐ...?
์ค๋ ฅ์ ์ผ๋ง๋ ์ฑ์ฅํ๋๊ฐ...?
๋ํ ๋ฌผ์์ ๋ต์ ํ์๋ฉด, ์ค์ค๋ก์๊ฒ ์์ฌ์ด ๋ง์์ด ๋ค์๋ค.
๋จ์ํ ๊ธฐ๋ฅ ๊ตฌํ์ด ์๋, ์๋ฆฌ์ ์ฒด๊ณ๋ฅผ ๊ฐ์ถ ์ฝ๋๋ก ๋ง๋ค์ด๋ด๊ณ ์ถ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด ์ฑ ์ด ์ถ๊ฐ๋์๋ง์ ์ค๋ ๋ ๋ง์์ ๊ฐ์ถ ์ ์์๋ค.
๊ผผ๊ผผํ๊ฒ ์ฑํฐ๋ค์ ์ดํด๋ณด๋ฉฐ, ๋ฆฌ์กํธ์ ๋ํ ์ง์์ ๊ตฌ๋ฉ๋ค์ ๋ง์๋ณด๋ ค๊ณ ํ๋ค.
โ ๋ฆฌ์กํธ์์์ ๋ ๋๋ง
์ฌ๊ธฐ์ ๋งํ๊ณ ์๋ ๋ ๋๋ง์ ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง๊ณผ์ ๊ฐ๋ ๊ณผ๋ ๋ค๋ฅด๋ค.
๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ํธ๋ฆฌ ์์ ์๋ ๋ชจ๋ ์ปดํฌ๋ํธ๋ค์ด
ํ์ฌ ์์ ๋ค์ด ๊ฐ์ง๊ณ ์๋ props์ state์ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก
์ด๋ป๊ฒ UI๋ฅผ ๊ตฌ์ฑํ๊ณ , ์ด๋ค DOM ๊ฒฐ๊ณผ๋ฅผ
๋ธ๋ผ์ฐ์ ์ ์ ๊ณตํ ๊ฒ์ธ์ง ๊ณ์ฐํ๋ ๊ณผ์
- ์ต์ด ๋ ๋๋ง
- ๋ฆฌ๋ ๋๋ง ๐ ์ต์ด ๋ ๋๋ง ์ดํ ๋ฐ์ํ๋ ๋ชจ๋ ๋ ๋๋ง์ ์๋ฏธ
- class component
- setState
- forceUpdate ๐ ๊ฐ์ ๋ฆฌ๋ ๋๋ง์ ๊ฐ์งํด shouldCompoentUpdate๋ ๋ฌด์
- function component
- useState์ setter
- useReducer์ dispatch
- key props ๐ current ํธ๋ฆฌ์ workInProgress ํธ๋ฆฌ ์ฌ์ด์์ ๊ฐ์ ์ปดํฌ๋ํธ์ธ์ง๋ฅผ ๊ตฌ๋ณํ๋ ๊ฐ
๋ง์ฝ, ์ด๊ฒ ์๋ค๋ฉด ๋จ์ํ ํ์ด๋ฒ ๋ด๋ถ์ sibling ์ธ๋ฑ์ค๋ง์ ๊ธฐ์ค์ผ๋ก ํ๋จ.
- class component
๋ ๋๋ง ํ๋ก์ธ์ค๊ฐ ์์๋๋ฉด
์ปดํฌ๋ํธ์ ๋ฃจํธ์์๋ถํฐ ์๋์ชฝ์ผ๋ก ๋ด๋ ค๊ฐ๋ฉด์ ์ ๋ฐ์ดํธ๊ฐ ํ์ํ๋ค๊ณ ์ง์ ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฐพ๊ฒ ๋๋ค.
ํด๋์คํ์ ๊ฒฝ์ฐ์๋ render( )๋ฅผ, ํจ์ํ์ ๊ฒฝ์ฐ์๋ FunctionComponent( )๋ฅผ ํธ์ถํ ํ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด๋ค.
์ฌ์ค ๋ฆฌ์กํธ์์์ ๋ ๋๋ง ๋จ๊ณ๋ 2๋จ๊ณ์ด๋ค.
๐ Render Phase (๋ ๋ ๋จ๊ณ)
์ปดํฌ๋ํธ๋ฅผ render( ) / return ํ ๊ฒฐ๊ณผ์ ์ด์ ๊ฐ์ DOM์ ๋น๊ตํด ๋ณ๊ฒฝ์ด ํ์ํ ์ปดํฌ๋ํธ๋ฅผ ๊ฒ์ฌํ๋ ๋จ๊ณ์ด๋ค.
- type
- props
- key
์ 3๊ฐ์ง ์ค ํ๋๋ผ๋ ๋ณ๊ฒฝ๋ ๊ฒ์ด ์์ผ๋ฉด ๋ณ๊ฒฝ์ด ํ์ํ ์ปดํฌ๋ํธ๋ก ์ฒดํฌํ๋ค.
๐ Commit Phase (์ปค๋ฐ ๋จ๊ณ)
๊ทธ ๋ค์์ผ๋ก ์คํ๋๋ ๊ฒ์ด ๋ฐ๋ก ์ปค๋ฐ ๋จ๊ณ์ด๋ค.
๋ ๋ ๋จ๊ณ์ ๋ณ๊ฒฝ ์ฌํญ์ ์ค์ DOM์ ์ ์ฉํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋ ๊ณผ์ ์ด๋ค.
์ฆ, ๋ฆฌ์กํธ๊ฐ ๋จผ์ DOM์ ์ปค๋ฐ ๋จ๊ณ์์ ์ ๋ฐ์ดํธํ๋ค๋ฉด, ์ฌ๊ธฐ์ ๋ง๋ค์ด์ง ๋ชจ๋ DOM ๋ ธ๋์ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ๋ฆฌ์กํธ ๋ด๋ถ ์ฐธ์กฐ๋ฅผ ์ ๋ฐ์ดํธ ํ๋ค.
์ดํ, ํด๋์คํ์ ๊ฒฝ์ฐ componentDidMount, componentDidUpdate๋ฅผ, ํจ์ํ์ ๊ฒฝ์ฐ useLayoutEffect ํ ์ ํธ์ถํ๋ค.
โ๏ธ์ฌ๊ธฐ์ โ๏ธ
๋ฆฌ์กํธ์ ๋ ๋๋ง์ด ์ผ์ด๋๋ค๊ณ ํด์ ๋ฐ๋์ DOM ์ ๋ฐ์ดํธ๊ฐ ์ผ์ด๋๋ ๊ฒ์ ์๋๋ค.
๋ ๋์ ๊ณผ์ ์ ๊ฑฐ์ณค์ง๋ง ๋ณ๊ฒฝ์ฌํญ์ด ์๋ค๋ฉด ์ปค๋ฐ ๋จ๊ณ๋ฅผ ๊ฑฐ์น์ง ์๋๋ค.
์ด๋ฅผ ํตํด ๋ฆฌ์กํธ์ ๋ ๋๋ง์ ๊ผญ ๊ฐ์์ ์ธ ๋ณ๊ฒฝ์ด ์ผ์ด๋์ง ์์๋ ๋ฐ์ํ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
๋ ๋๋ง์ ํญ์ ๋๊ธฐ์์ผ๋ก ์๋ํ๊ธฐ์ ๋ ๋๋ง ์๊ฐ์ด ๊ธธ์ด์ง๋ฉด ๊ธธ์ด์ง์๋ก ์ฑ๋ฅ ์ ํ๋ฅผ ์ผ๊ธฐํ๊ณ
๋ธ๋ผ์ฐ์ ์ ๋ค๋ฅธ ์์
๊น์ง๋ ์ง์ฐ์ํฌ ๊ฐ๋ฅ์ฑ์ ๋์ธ๋ค.
๋ค๋ง, ์๋์ ์ผ๋ก ๊ฐ๋ฒผ์ด ์ปดํฌ๋ํธ๋ฅผ ๋จผ์ ๋ ๋๋งํ๋๋ก ๋น๋๊ธฐ ๋ ๋๋ง ์์ ์ ์ํํ ์ ์๋ค.
ํน์ ๋ ๋๋ง์ ์ฐ์ ์์๋ฅผ ๋ฏ์ถ๊ฑฐ๋, ์ค๋จํ๊ฑฐ๋ ์ฌ์์, ํฌ๊ธฐ๊น์ง ๊ฐ๋ฅํ๋ค.
โ Memoization
useMemo, useCallback ํ ๊ณผ ๊ณ ์ฐจ ์ปดํฌ๋ํธ์ธ memo๋ ๋ฆฌ์กํธ์์ ๋ฐ์ํ๋ ๋ ๋๋ง์ ์ต์ํํ๊ธฐ ์ํด ์ ๊ณต๋๊ณ ์๋ฐ.
๋ ์ญ์๋ ๊ทธ๋ฌ์ง๋ง, ์ด๋ฌํ ์ต์ ํ ๊ธฐ๋ฒ์ ์ธ์ . ์ด๋์. ์ด๋ป๊ฒ ์ ํํ๊ฒ ์ฌ์ฉํ๋์ง์ ๋ํด์๋ ํ์คํ๊ฒ ๋ต๋ณํ ์ ์์๋ค.
์ด ์ฑ ์์๋ 2๊ฐ์ง ์ฃผ์ฅ์ ์ ์ํ๊ณ ์๋ค.
1๏ธโฃ ์ฃ๋ถ๋ฅธ ์ต์ ํ๋ ๋ ์ด๋ค. ๊ผญ ํ์ํ ๊ณณ์์๋ง memoization์ ์ฌ์ฉํ์.
์ฃ๋ถ๋ฅธ ์ต์ ํ๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ง๋ก premature optimization , premature memoization ์ด๋ผ๋ ์ฉ์ด๊ฐ ์กด์ฌํ๋ฏ์ด ์ํฉ์ ๋ฐ๋ผ memoization์ ๋น์ฉ์ด ๋ฌ๋ผ์ง๊ธฐ์ ๊ฒฝ๊ณํด์ผ ํ๋ค๊ณ ๋งํ๊ณ ์๋ค.
๋ง์ฝ, memo์ ์์ ์ด ๋ฐ๋์ ์ต์ ํ์ ๋์์ด ๋์์๋ค๋ฉด ๊ฐ๋ฐ์์๊ฒ ์ ํ๊ถ์ ์ฃผ์ง ์์์ ๊ฒ์ด๋ค.
๋ ๋๋ง๋ ๋น์ฉ์ด์ง๋ง, ๋ฉ๋ชจ ์์ฒด๋ ๋น์ฉ์ด๋ผ๋ ๊ฒ์ ์์ง ๋ง์์ผ ํ๋ค.
๋ฆฌ์กํธ ๊ณต์๋ฌธ์์๋ ์๋์ ๊ฐ์ ๋ด์ฉ์ด ๋์์๋ค.
useMemo๋ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ์ฌ์ฉํ ์๋ ์์ง๋ง, ์๋ฏธ์์ผ๋ก ๊ทธ๊ฒ์ด๋ณด์ฅ๋๋ค๊ณ ์๊ฐํ์ง๋ ๋ง์ธ์.
๊ฐ๊น์ด ๋ฏธ๋์ React์์๋, ์ด์ ๋ฉ๋ชจ์ด์ ์ด์ ๋ ๊ฐ๋ค์ ์ผ๋ถ๋ฅผ “์์ด๋ฒ๋ฆฌ๊ณ ” ๋ค์ ๋ ๋๋ง ์์ ๊ทธ๊ฒ๋ค์ ์ฌ๊ณ์ฐํ๋ ๋ฐฉํฅ์ ํํ ์ง๋ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์๋ฅผ ๋ค๋ฉด, ์คํ์คํฌ๋ฆฐ ์ปดํฌ๋ํธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ๋ฑ์ด ์์ ์ ์์ต๋๋ค.
useMemo ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ๋์ํ ์ ์๋๋ก ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๊ทธ๊ฒ์ ์ถ๊ฐํ์ฌ ์ฑ๋ฅ์ ์ต์ ํํ์ธ์.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ๋ ๋๋ง์ด ์์ฃผ ์ผ์ด๋๋ ๊ณณ์ ์์ธกํด์ memo๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋,
์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ดํ์ useEffect๋ ๊ฐ๋ฐ์ ๋๊ตฌ๋ก ์ด๋์ ์ผ๋ง๋ ๋ ๋๋ง์ด ์ผ์ด๋๊ณ ์๋์ง ๋ถ์ํ์ฌ ์ ์ฉํ๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅด๋ค.
2๏ธโฃ ๋ ๋๋ง ๊ณผ์ ๋น์ฉ์ ๋น์ธ๋ค. ๋ชจ์กฐ๋ฆฌ memoization์ ์ฌ์ฉํ์.
1๋ฒ๊ณผ 2๋ฒ์ ์ฃผ์ฅ์ ๊ณตํต ์ ์ ๋ ์ผ๋ถ ์ปดํฌ๋ํธ์์๋ memoization์ ํ๋ ๊ฒ์ด ์ฑ๋ฅ์ ๋์์ด ๋๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ์๊ฒ ์ฃผ์ด์ง ์ ํ๊ถ์ 2๊ฐ์ง์ธ ๊ฒ์ด๋ค.
์ผ๋ถ์๋ง ์ ์ฉํ๊ธฐ vs ๋ชจ๋ ๋ค ์ ์ฉํ๊ธฐ
memo๊ฐ ์ด์ ์ด ์๋ ๊ฒ์ ๋ง์ง๋ง, ์๋ชป ์ ์ฉํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
- props์ ๋ํ ์์ ๋น๊ต ๋ฐ์
๋ฌผ๋ก ํด๋น ์ํฉ์ด ์ผ๋ง๋ ํฐ ์ํฅ์ ์ค๊น? ์ ๋ํด ์ธ๊ธํ๋ค๋ฉด,
props๊ฐ ํฌ๊ณ ๋ณต์กํด์ง๋ค๋ฉด ๋น์ฐํ 1๊ฐ์ ๋น์ฉ์ด๋ผ๋ ๊ฑฐ๋ํด ์ง ์ ๋ฐ์ ์๋ค.
๋ฐ๋ฉด, memo๋ฅผ ํ์ง ์๋๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
- ๋ ๋๋ง์ผ๋ก ๋ฐ์ํ๋ ๋น์ฉ
- ์ปดํฌ๋ํธ ๋ด๋ถ์ ๋ณต์กํ ๋ก์ง์ ์ฌ์คํ
- ์์ ๋ ๊ฐ์ง ์ํฉ์ด ๋ชจ๋ ์์ ์ปดํฌ๋ํธ์์ ๋ฐ๋ณตํด์ ๋ฐ์
- old ๐ new tree ์ ๋น๊ต
ํด๋น ์ํฉ๋ค์ด ๋ฐ์ํ๊ฒ ๋๋ค.
๊ทธ๋์ ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ ๋, memoization๊ณผ ๊ฐ์ ๋ณ๋์ ์กฐ์น๊ฐ ์ด๋ฃจ์ด์ง์ง ์๋๋ค๋ฉด ๊ฐ์ฒด๋ ์๋ก ์์ฑ๋๊ณ ์ฐธ์กฐ๊ฐ์ ๋ฌ๋ผ์ง๊ฒ ๋๋ค.
โ๏ธ์ฌ๊ธฐ์, ๋ณํ๋ ์ฐธ์กฐ ๊ฐ์ด ์์กด์ฑ ๋ฐฐ์ด์ ๋ค์ด๊ฐ ์๋ค๋ฉด..? โ๏ธ
๊ฐ ์์ฒด๋ ๋๊ฐ์ผ๋ ์ฐธ์กฐ ๊ฐ์ด ๋ฌ๋ผ์ง๋ฏ๋ก ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
๐ ์ ๋ฆฌํ๊ธฐ
๋ฆฌ์กํธ์์์ ๋ ๋๋ง, ๊ทธ๋ฆฌ๊ณ ๋ฆฌ๋ ๋๋ง์์ ์ฑ๋ฅ์ ์ต์ ํ ํ ๋ ์ฐ๋ฆฌ๊ฐ ์๊ฐํด๋ด์ผ ํ ๋ถ๋ถ๋ค.
๋ ๋ ๋จ๊ณ์ ์ปค๋ฐ ๋จ๊ณ๋ฅผ ์ดํด๋ณด๋ฉด์ ๋ ๋๋ง๊ณผ DOM์ ๊ด๊ณ๋ฅผ ์ ํํ๊ฒ ์ดํด๋ณด์๋ค.
๊ฐ๋ฐ์ ์งํํ๋ฉฐ, ์์๋ก ์ปดํฌ๋ํธ์ ๋ ๋๋ง ์ํ๋ค์ ๋ถ์ํ๋ ๊ณผ์ .
์ด๋ฅผ ํตํด memoization์ด ํ์ํ ๊ณณ์ด ์ด๋์ธ์ง ์ค๋ฌด์์ ์ค์ค๋ก ์ฐพ์๊ฐ๋ ๋ฅ๋ ฅ์ ๊ธธ๋ฌ๋ด๋ ๊ฒ์ด ํ์ํด๋ณด์ธ๋ค.
๐ ์ฐธ๊ณ ์๋ฃ
'WEB > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ React ] useQuery ์ useMuataion๋ฅผ ํ์ฉํ ๊ธฐ๋ฅ๊ฐ์ (0) | 2023.11.30 |
---|---|
[ ๋ชจ๋ ๋ฆฌ์กํธ : Deep Dive ] - ๋ฆฌ์กํธ ๊ฐ๋ฐ์์ ๋ฐ๋์ ์์์ผํ๋ JS (0) | 2023.11.28 |
PWA + Safari (0) | 2023.07.03 |
Intersection Observer API ๋ฅผ ํ์ฉํ ๋ฌดํ์คํฌ๋กค ๊ตฌํ (0) | 2023.07.03 |
Recoil (0) | 2022.07.03 |