๐ ๋ฆฌ์กํธ ํ ์ ๋ํด์ ํ์ต์ ํ๋๋ฐ ์ฌ์ค ์์ ๊ณผ์ ์์ ๋ฆฌ์กํธ ํ ์ ๊ฐ์ธ์ ์ผ๋ก ์ฐพ์์ ํ์ตํ ๋ค ์ฌ์ฉ์ ํ๊ณ ์์๊ธฐ์ ์กฐ๊ธ๋ ์ ํํ ์ง๊ณ ๊ฐ๋ ๊ณ๊ธฐ๊ฐ ๋ ๊ฒ์ด๋ค.
๐ ์ค๋ ํ์ตํ ๋ด์ฉ
Virtual DOM
- ๊ฐ์์ DOM ๊ฐ์ฒด (์ถ์ํ๋ JavaScript ๊ฐ์ฒด์ ํํ)
- React๋ ์ค์ DOM ๊ฐ์ฒด์ ์ ๊ทผํ์ฌ ์กฐ์ํ๋ ๋์ ๊ฐ์์ DOM ๊ฐ์ฒด์ ์ ๊ทผํ์ฌ ๋ณํ ์ ๊ณผ ๋ณํ ํ๋ฅผ ๋น๊ตํ๊ณ ๋ฐ๋ ๋ถ๋ถ์ ์ ์ฉํ๋ค.
Real DOM (DOM, Document Object Model)
- ๋ธ๋ผ์ฐ์ ๊ฐ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋ง๋ ๊ฐ์ฒด ๋ชจ๋ธ
- ๋ธ๋ผ์ฐ์ ๊ฐ JavaScript์ ๊ฐ์ ์คํฌ๋ฆฝํ ์ธ์ด๋ก html ํ๊ทธ๋ค์ ์ ๊ทผํ๊ณ ์กฐ์ํ ์ ์๋๋ก ํ๊ทธ๋ค์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๊ฐ์ฒดํ ์ํจ ๊ฒ์ด๋ค.
DOM์ ์กฐ์ ์๋๊ฐ ๋๋ ค์ง๋ ์ด์
- DOM์ ์กฐ์์ผ๋ก ์ ๋ฐ์ดํธ ๋ ์์์ ๊ทธ์ ์์ ์์๋ค์ ์ํด DOM ํธ๋ฆฌ๋ฅด ์ฌ๊ตฌ์ถํจ์ผ๋ก์จ ์ฌ๋๋๋ง ๊ณผ์ ์ ๊ฑฐ์ณ UI๋ฅผ ์ ๋ฐ์ดํธ ํด์ผํ๋ค.
- ์ฌ์ฐ์ฐ์ ํด์ผํ๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋๋ ค์ง๋ค.
- ๊ฐ์ DOM์ ์ฌ์ฉํ๋ฉด ์ผ๋ฐ์ ์ธ DOM ์กฐ์๋ณด๋ค ์๋๊ฐ ๋น ๋ฅด๋ค.
React Diffing Algorithm
- ์์ ํ๋ํ๋๋ฅผ ๋ฐ๊พธ๋ค๋ณด๋ฉด ์์ญ๋ง๋ฒ์ ๋น๊ต๊ฐ ์ด๋ฃจ์ด์ ธ์ผํ๊ณ , ์ด ์์ ์ ์๋นํ ๋น์ธ๋ค. ๊ทธ๋์ ๋ฆฌ์กํธ์์๋ ๋ ๊ฐ์ ํธ๋ฆฌ๊ฐ ๋์จ๋ค๋ ์ ๊ณผ ๋ชจ๋ ๊ฐ๋ฐ์๋ค์ด key props๋ฅผ ํตํด ๋ฐ๋์๋ค๋ ๊ฒ์ ๋ช ์ํ ์ ์๋ค๋ ์ ์ผ๋ก ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด๋์จ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
React Diffing Algorithm ๋์ ์๋ฆฌ
- ๊ฐ๊ธฐ ์๋ก ๋ค๋ฅธ ๋ ์์๋ ๋ค๋ฅธ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ถํ ๊ฒ์ด๋ค.
- ๊ฐ๋ฐ์๋ ํค ์ํ์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ๋ ๋๋ง์์ ์ด๋ค ์์ ์์๊ฐ ์์ ์ ์ผ ์ ์๋ ํํธ๋ฅผ ์ค ์ ์์ต๋๋ค.
React๊ฐ DOM ํธ๋ฆฌ๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ
- ๊ธฐ์กด์ ๊ฐ์ DOM ํธ๋ฆฌ์ ์๋กญ๊ฒ ๋ณ๊ฒฝ๋ ๊ฐ์ DOM ํธ๋ฆฌ๋ฅผ ๋น๊ตํ ๋, ํธ๋ฆฌ์ ๋ ๋ฒจ ์์๋๋ก ์ํํ๋ ๋ฐฉ์์ผ๋ก ํ์ํฉ๋๋ค.
- ๋๋น ์ฐ์ ํ์(BFS)์ ์ผ์ข ์ด๋ค.
Class Component
- ๋ณต์กํด์ง์๋ก ์ดํดํ๊ธฐ ์ด๋ ค์์ง๊ณ , ์ปดํฌ๋ํธ ์ฌ์ด์์ ์ํ ๋ก์ง์ ์ฌ์ฌ์ฉํ๊ธฐ ์ด๋ ต๋ค๋ ๋จ์ ์ด์๋ค.
- React์ ํด๋์ค ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ JavaScript์ this ํค์๋๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋์ํ๋์ง ์์์ผํ๋ฉฐ, ๋ฌธ๋ฒ์ ์ ํํ ์์ง ๋ชปํ๋ฉด ๋์ ๋ฐฉ์ ์์ฒด๋ฅผ ์ ํํ ์ดํดํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค์์ต๋๋ค.
- ์์ ๊ฐ์ ๋ฌธ์ ์ ์ ๋ณด์ํ๊ธฐ ์ํด ํจ์ ์ปดํฌ๋ํธ๋ก ์ด๋ํ๊ธฐ ์์ํ์์ง๋ง ์ํ ๊ฐ์ ์ฌ์ฉํ๊ฑฐ๋ ์ต์ ํํ ์ ์๋ ๊ธฐ๋ฅ๋ค์ด ๋ฏธ์งํ ๋ถ๋ถ์ ๋ณด์ํ๊ธฐ ์ํด ๋์จ ๊ฒ์ด ๋ฐ๋ก Hook์ด๋ผ๋ ๊ฐ๋ ์ ๋๋ค.
Function Component
- ํด๋์คํ ์ปดํฌ๋ํธ์ ๋นํด ํจ์ฌ ๋ ์ง๊ด์ ์ด๊ณ , ๋ณด๊ธฐ ์ฝ๋ค๋ ํน์ง์ด ์๋ค.
- ํจ์ํ ์ปดํฌ๋ํธ๋ ๋ ๋๋ง์ด๋๋ฉด ํจ์๊ฐ ํธ์ถ๋๊ณ , ๋ชจ๋ ๋ด๋ถ ๋ณ์๊ฐ ์ด๊ธฐํ ๋๋ค.
Hook์ด๋?
- React 16.8์ ์๋ก ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ด๋ค.
- class๋ฅผ ์์ฑํ์ง ์๊ณ ๋ state์ ๋ค๋ฅธ React์ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค.
- ํจ์ํ ์ปดํฌ๋ํธ์์ ์ํ ๊ฐ ๋ฐ ๋ค๋ฅธ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํ๊ฒ ํด์ฃผ๋ ๋ฉ์๋๋ฅผ ์๋ฏธํ๋ค.
Hook ์ฌ์ฉ ๊ท์น
- ๋ฆฌ์กํธ ํจ์์ ์ต์์์์๋ง ํธ์ถํด์ผ ํ๋ค.
- ๋ฐ๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ, ์ค์ฒฉ๋ ํจ์ ๋ด์์ Hook์ ์คํํ๋ฉด ๋์ํ์ง ์์ ๊ฒฝ์ฐ๊ฐ ์๋ค.
- ์ค์ง ๋ฆฌ์กํธ ํจ์ ๋ด์์๋ง ์ฌ์ฉ๋์ด์ผ ํ๋ค.
- ํจ์ํ ์ปดํฌ๋ํธ๋ ์ปค์คํ Hook์ด ์๋ ๋ค๋ฅธ ์ผ๋ฐ JavaScript ํจ์ ์์์๋ ํธ์ถํด์๋ ์ ๋๋ค.
useMemo
- ํน์ ๊ฐ(value)๋ฅผ ์ฌ์ฌ์ฉํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ Hook
- ๋ณต์กํ ์ฐ์ฐ์ ์ค๋ณต์ ํผํ๊ณ React ์ฑ์ ์ฑ๋ฅ์ ์ต์ ํํ๋ค.
- ๋ ๋๋ง ํ ๋๋ง๋ค ๊ฐ์ด ๋ฐ๋๋ ๊ฒ์ด ์๋๋ผ๋ฉด ๊ฐ์ ์ด๋๊ฐ์ ์ ์ฅ ํด๋๋ค๊ฐ ๋ค์ ๊บผ๋ด์ ์ธ ์ ์๊ฒํ๋ค. (๋ฉ๋ชจ์ด์ ์ด์ )
- Memoization
- ์ํํ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ์ ํด๋๊ณ , ๋์ผํ ์ ๋ ฅ์ด ๋ค์ด์ค๋ฉด ์ฌํ์ฉํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ
- ๊ตฌ์กฐ
- ์ฒซ ๋ฒ์งธ ์ธ์ ์ฝ๋ฐฑ ํจ์: ์ฝ๋ฐฑํจ์๊ฐ return ํ๋ ๊ฐ์ด useMemo๊ฐ return ํ๋ ๊ฐ์ด๋ค.
- ๋๋ฒ์งธ ์ธ์ ๋ฐฐ์ด(์์กด์ฑ ๋ฐฐ์ด): ๋ฐฐ์ด์์ ์์์ ๊ฐ์ด ์
๋ฐ์ดํธ ๋ ๋๋ง ์ฝ๋ฐฑํจ์๊ฐ ์คํ๋๋ค.
๋น ๋ฐฐ์ด์ผ ๊ฒฝ์ฐ ์ต์ด ํ ๋ฒ๋ง ์คํ๋๋ค.
const value = useMemo(() => {
return calculate();
}, [item]);
useCallback
- ํจ์์ ์ฌ์ฌ์ฉ์ ์ํด ์ฌ์ฉํ๋ Hook
- ์์ ์ปดํฌ๋ํธ์ props๋ก ํจ์๋ฅผ ์ ๋ฌํด์ค ๋ ์ฌ์ฉํ๊ธฐ ์ข๋ค.
- ์ฐธ์กฐ ๋๋ฑ์ฑ์ ์์กดํ๋ค.
- ๋ฉ๋ชจ์ด์ ์ด์ ๊ธฐ๋ฒ์ ์ฌ์ฉํ Hook์ด๋ค.
- ์ธ์๋ก ์ ๋ฌ๋ฐ์ ํจ์ ๊ทธ ์์ฒด๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ํ๋ค.
const calculate = useCallback((num) => {
return num + 1;
}, [item])
๐ ์ถ๊ฐ๋ก ๊ณต๋ถํ ๋ด์ฉ
[udemy] React ์๋ฒฝ ๊ฐ์ด๋ ๊ฐ์ ๋ณด๊ธฐ (๋งค์ผ ์กฐ๊ธ์ฉ ์ด๋ผ๋ ๊พธ์คํ ๋ฃ๊ธฐ)
Study์๊ณผ ํจ๊ป ์งํ์ค์ธ ํ๋ก์ ํธ ๊ตฌํ
- Authentication
๐ ์ค์ํ ๋ด์ฉ
- ๊ฐ์ DOM
- React Diffing Algorithm
- ์ปดํฌ๋ํธ ์ต์ ํ
- useMemo
- useCallback
'Daily > Today I Learned' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
22.08.01_TIL (0) | 2022.08.01 |
---|---|
22.07.28_TIL (0) | 2022.07.28 |
22.07.26_TIL (0) | 2022.07.26 |
22.07.25_TIL (0) | 2022.07.25 |
22.07.22_TIL (0) | 2022.07.22 |