ํ์ฌ ์์ ์ค์ธ ํ๋ก์ ํธ์์ ๋ฐ์ ์ฝ๋ ํผ๋๋ฐฑ์ ์ ๋ฆฌํ๋ค๊ฐ useMemo๋ฅผ ์ฒ์์ผ๋ก ์ฌ์ฉํด๋ดค๋ค.
๋ฆฌ์กํธ๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ ํ๋ก ํธ์๋๋ก ์ผํ๋ฉด์ ๋ฉด์ ๋๋ ๋ง์ฃผํ๋ useMemo๋ผ๋ ๋ฆฌ์กํธ ํ .
useMemo ?
๋ฆฌ์กํธ์์ ์ปดํฌ๋ํธ์ ์ฑ๋ฅ์ ์ต์ ํ ํ๋๋ฐ ์ฌ์ฉ๋๋ ๋ฆฌ์กํธ ํ ์ด๋ค.
์ด๋ป๊ฒ ์ปดํฌ๋ํธ์ ์ฑ๋ฅ์ ์ต์ ํํด์ฃผ๋๋ํ๋ฉด์ ๋ณดํต ์์๋ก ์ฐ์ฐ์์
์ ๋ง์ด ๋ ๋ค. ๊ณ์ํด์ ๋์ผํ ์ฐ์ฐ์ด ์ผ์ด๋๋ ์์
์๋ ์๋ก ์ฒ์๋ถํฐ ์ฐ์ฐํ ํ์์์ด ๋ํ๋์๊ฐ ์์ผ๋ฉด ๋จผ์ ํ์ฌ ์์กด๊ฐ๊ณผ ์ด์ ์ ์ธ์กด๊ฐ์ ๋น๊ตํ์ฌ ๋ณ๊ฒฝ๋์๋์ง ํ์ธํฉ๋๋ค. ์๋ก์ด ๋์์ด ์ผ์ด๋ฌ์ ๋ ๊ธฐ์กด์ ๊ฐ์ ๊ธฐ์ตํ๊ณ ์๋ค๊ฐ ๊ฑฐ๊ธฐ์ ๋ถํฐ ์ฐ์ฐ์ ์์ํ๋ค. ๋ฉ๋ชจ๋ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํด ๋ฉ๋ชจ์ด์ ์ด์
์บ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์บ์๋ ๋ฉ๋ชจ๋ ๊ฐ์ ๋ํ๋ด๋ ํค์ ์ข
์์ฑ์ ๋ํ๋ด๋ ๊ฐ์ด ์๋ JavaScript ๊ฐ์ฒด๋ก ๊ตฌํ๋๋ค.
๊ตฌ์ฑ ์์๊ฐ ๋ ๋๋ง ๋ ๋ ์บ์๋ฅผ ํ์ธํ์ฌ ๋ฉ๋ชจ๋ ๊ฐ์ด ์ฃผ์ด์ง ์ข
์์ฑ์ ๋ํด ์ด๋ฏธ ์กด์ฌํ๋์ง ํ์ธํฉ๋๋ค. ๋ฉ๋ชจ๋ ๊ฐ์ด ์์ผ๋ฉด React๋ ํจ์๋ฅผ ๋ค์ ๊ณ์ฐํ์ง ์๊ณ ๋ฐํํฉ๋๋ค.
์กฐ๊ธ ๋ ์ฝ๊ฒ ์ดํด๋ฅผ ํ์๋ฉด ๋ฆฌ์กํธ ํจ์ํ ์ปดํฌ๋ํธ๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ์๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค. ๋ฆฌ์กํธ์ ํจ์ํ ์ปดํฌ๋ํธ๋ ๋ ๋๋ง์ด ๋๊ณ ํจ์๋ฅผ ํธ์ถํ๊ณ ๋ชจ๋ ๋ด๋ถ์ ๋ณ์๋ฅผ ์ด๊ธฐํํ๋ ์์๋ก ์์ ์ด ์ผ์ด๋๋ค. ๋๋ datepicker๋ฅผ ์ํด์ ๋ ์ง๋ฅผ ์ง์ ํด์ค์ผํ๋๋ฐ. ์ด๋ถ๋ถ์ด ๊ณ์ํด์ ์ด๊ธฐํ๋๋ค๋ ๊ฒ์ด๋ค. ์ฌ์ค ์ด ์ ๋๋ ํฌ๊ฒ ๋ถ๋ด์ค๋ฝ์ง๋ ์์ง๋ง ๋ณต์กํ ์ฐ์ฐ์ด ๋ค์ด๊ฐ์ผํ๋ ๊ฑฐ๋ผ๋ฉด ๊ต์ฅํ ๋ถ๋ด์ด ๋ ๊ฒ์ด๋ค.
๊ทธ๋์ useMemo๋ฅผ ์ฐ๋ฉด ๊ตณ์ด ์ด ๋ถ๋ถ์ ๋ค์ ํธ์ถํ์ง ์์๋ ์ด์ ์ ๊ฐ์ ๊ธฐ์ตํด๋๋ค ๋ค์ ์ด๋ค๋ ์ด์ผ๊ธฐ๋ค.
์ฆ, useMemo๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์์์ ๋ ์ ๋ฐ์ดํธ๋ฅผ ํ์ง ์๊ธฐ ๋๋ฌธ์, ๋ฆฌ๋ ๋๋ง์ ๋ง์์ ์ธ๋ฐ์๋ ์ฑ๋ฅ ์ ํ๋ฅผ ๋ง์ ์ ์๋ค.
useMemo ํํ
const cachedValue = useMemo(calculateValue, dependencies)
์๋ถ๋ถ์ ํจ์๊ฐ ๋ค์ด๊ฐ๊ณ , ๋ค์ ํจ์์์ ์ฐธ์กฐํ๋ ๊ฐ์ด ์์กด๊ฐ์ผ๋ก ๋ค์ด๊ฐ๋ค.
useMemo๋ ํจ์์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฉ๋ชจํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ returnํด์ผํ๋ค๋ ์ ์ ์์ง๋ง์
์๋๋ ์ค์ง์ ์ธ ์ ์ฉ ์์ด๋ค.
์ฐ์ฐ์ด ํฌ๊ฒ ๋ค์ด๊ฐ๋ ๋ถ๋ถ์ ์๋์ง๋ง useMemo๋ฅผ ์ฌ์ฉํ๋๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค๋ ํผ๋๋ฐฑ์ ๋ฐ์์ ์๋์ฒ๋ผ ์์ ํ๋ค.
// date picker์ ์ธ date ์ ์ํ๋ ๋ถ๋ถ
// datepicker date ์ ์ํ ๋ถ๋ถ์ด๋ค. ๋ณ์๋ก ๋ฐ๋ก ์ ์ํจ.
const endDate = new Date(dateRange?.to || new Date());
endDate.setUTCHours(0, 0, 0, 0);
// useMemo ์ ์ฉํ๊ธฐ
const endDate = useMemo(() => {
const date = new Date(dateRange?.to || new Date());
date.setUTCHours(0, 0, 0, 0);
return date;
}, [dateRange?.to]);