69. useMemo, useEffect, useCallback ๊ตฌ๋ถ ์ฌ์ฉ๋ฒ
์ธ์ ์ด๋์์ useMemo, useEffect, useCallback ์ ์ฌ์ฉํ๋๊ฐ์ ๊ดํ์ฌ
์์ฑ์ผ
5/3/2025์์ฑ
ํํ์์ ์ผ
5/2/2025๐ง useMemo
, useEffect
, useCallback
์์ ์ ๋ฆฌ: ๊ฐ๋
+ ์ธ์ ์จ์ผ ํ๋๊ฐ?
๐ฌ 1. useEffect
: ์ฌ์ด๋ ์ดํํธ๋ฅผ ๊ด๋ฆฌํ๋ค
์ธ์ ? ๋ ๋๋ง ํ์ โ๋ฌด์ธ๊ฐ๋ฅผ ํด์ผ ํ ๋โ ์ฌ์ฉํ๋ค.
useEffect(() => {
// API ํธ์ถ, DOM ์ ๊ทผ, ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ฑ๋ก ๋ฑ
}, [dependency]);
๐ช ์ฐ์ ์์
- API ํธ์ถ (๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ)
- ๊ตฌ๋ (subscribe) ์์ / ํด์
- ํ์ด๋จธ ์์/์ข ๋ฃ
- ๋ธ๋ผ์ฐ์ Title ๋ณ๊ฒฝ
- ๋ก๊ทธ ์ถ๋ ฅ, ์๋ฌ ํธ๋ค๋ง
๐ฏ ๊ธฐ์ตํ ํฌ์ธํธ
- ๋ ๋๋ง "์ดํ"์ ์คํ๋จ
- ์์กด์ฑ ๋ฐฐ์ด์ ์๋ ๊ฐ์ด ๋ณํ ๋๋ง ์ฌ์คํ
- ํด๋ฆฐ์
ํจ์๋ก
return () => {}
์ฌ์ฉ ๊ฐ๋ฅ
๐ง 2. useMemo
: ๊ณ์ฐ๋ ๊ฐ์ ๋ฉ๋ชจ์ด์ ์ด์
์ธ์ ? ๋ฆฌ๋ ๋๋ง๋ ๋๋ง๋ค ๋ฐ๋ณต ๊ณ์ฐ์ด ๋น์ฉ์ด ํด ๊ฒฝ์ฐ, ๊ฐ์ โ์บ์ฑโํ๋ค.
const result = useMemo(() => heavyComputation(a, b), [a, b]);
๐ช ์ฐ์ ์์
- ์ ๋ ฌ๋ ๋ฆฌ์คํธ, ํํฐ๋ง๋ ๋ฆฌ์คํธ ๋ฐํ
- ์ํ ๊ณ์ฐ ๊ฒฐ๊ณผ
- ์คํ์ผ ๊ฐ์ฒด (CSS-in-JS)
- Google Maps
options
,center
๊ฐ์ฒด (๋ถํ์ํ ๋ฆฌ๋ ๋๋ง ๋ฐฉ์ง)
๐ฏ ๊ธฐ์ตํ ํฌ์ธํธ
- ๊ฐ(value)์ ์บ์ฑ
- ๋ฆฌ๋ ๋๋ง ๋ฐฉ์ง ์๋! โ ๊ฐ์ ์ฌ๊ณ์ฐ ๋ฐฉ์ง
- ์์กด์ฑ์ด ๋ณํ์ง ์์ผ๋ฉด ์ด์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ
๐งท 3. useCallback
: ํจ์๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์
์ธ์ ? ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ ๋๋ง๋ง๋ค ์๋ก ๋ง๋ค๊ณ ์ถ์ง ์์ ๋ ์ฌ์ฉ. ํนํ ํ์ ์ปดํฌ๋ํธ์ ๋๊ธธ ๋ ์ค์!
const handleClick = useCallback(() => {
console.log("clicked");
}, [dependency]);
๐ช ์ฐ์ ์์
- ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ ํธ๋ค๋ฌ
- input onChange ํธ๋ค๋ฌ
- ํ์ ์ปดํฌ๋ํธ์ prop์ผ๋ก ์ ๋ฌํ ์ฝ๋ฐฑ
- React.memo, useEffect ์์์ ํจ์๋ฅผ ์์กด์ฑ์ผ๋ก ์ธ ๋
๐ฏ ๊ธฐ์ตํ ํฌ์ธํธ
- ํจ์(fn)๋ฅผ ์บ์ฑ
- ๋ ๋๋ง๋ง๋ค ํจ์ ์ฐธ์กฐ ๋ณ๊ฒฝ ๋ฐฉ์ง
- ์ปดํฌ๋ํธ ์ต์ ํ์ ์ฌ์ฉ
๐ ๋น๊ต ์ ๋ฆฌ ํ ์ปท์ผ๋ก ์์ฝ
Hook | ๋ชฉ์ | ๋ฌด์์ ๋ฉ๋ชจ์ด์ง? | ์ธ์ ์ฌ์ฉ? |
---|---|---|---|
useEffect |
๋ถ์ ํจ๊ณผ ๊ด๋ฆฌ | ์์ | API ํธ์ถ, ์ด๋ฒคํธ ๋ฑ๋ก, ํ์ด๋จธ ์ค์ ๋ฑ |
useMemo |
๊ฐ ์บ์ฑ (๊ณ์ฐ ๊ฒฐ๊ณผ ์ ์ฅ) | ๊ฐ | ๋ฌด๊ฑฐ์ด ์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ณ ์ฌ์ฌ์ฉ |
useCallback |
ํจ์ ์บ์ฑ (์ฐธ์กฐ ๋์ผ์ฑ ์ ์ง) | ํจ์ | ์์ ์ปดํฌ๋ํธ์ ํจ์ prop์ ์ค ๋ (React.memo) ๋ฑ |
๐ ๋ณด๋์ค: ์ธ์ useMemo
์ useCallback
์ ์ฐ์ง ๋ง์์ผ ํ ๊น?
โ๋ฏธ๋ฆฌ ์ต์ ํํ์ง ๋ง๋ผโ
- ๊ฐ์ด๋ ํจ์๊ฐ ์ค์ ๋ก ๋ฌด๊ฑฐ์ด ์์ ์ด ์๋๋ผ๋ฉด ๊ทธ๋ฅ ์จ๋ ๋จ.
- ์ต์ ํ๋ฅผ ํ๋๋ผ๋ ๊ณผํ๊ฒ ํ๋ฉด ์ฝ๋ ๋ณต์ก๋๋ง ์ฆ๊ฐ.
- ์ง์ง ๋ ๋๋ง ๋ณ๋ชฉ์ด ๋ณด์ผ ๋๋ง ๋์ ํ๋ฉด ์ถฉ๋ถ!
๐งโโ๏ธ ๋ง๋ฌด๋ฆฌ ๋ช ์ธ ํ ์ค
โ๊ธฐ์ต๋ณด๋ค ์ค์ํ ๊ฑด, ์ธ์ ์์์ง๋ฅผ ์๋ ๊ฒ.โ โ
useMemo
,useCallback
์ด ๊ทธ๋ ์ต๋๋ค.
๐ซฑ ๋ค์์?
์น๊ตฌ์ผ, ํน์ ์ค์ ์ฝ๋ ์ค์์ useEffect
โ useCallback
์ด๋ useMemo
๋ก ๋ฆฌํฉํ ๋งํ ์ ์์์ง ํท๊ฐ๋ฆฌ๋ ์์ ๊ฐ ์๋ค๋ฉด ๋ณด์ฌ์ค๋?
๋ด๊ฐ ์์ ์กํ๋ ์๋ก ๊ฐ์ด ๋ฏ์ด๋ณด์, ๋จ๋จํ ์ค๋ช
ํด์ค๊ฒ. ๐
์ฝ๋
-
์ฐ๊ด์ฝ๋
-
CONCLUSION
useMemo, useEffect, useCallback
์ญ์ ๊ถํ ํ์ธ ์ค...
์์ ๊ถํ ํ์ธ ์ค...