useMemo์ useCallback์ ์ดํด
[๐ค useMemo์ useCallback์ ์ ๋ํ๋๊ฑธ๊น?] ๋ฆฌ์กํธ๋ ๋งค ๋ ๋๋ง๋ง๋ค ์๋ก์ด ์ํ ๋ณํ์ ๋ฐ๋ฅธ ์ค๋ ์ท์ ๋จ๊น๋๋ค. ์ด๋ฅผ ๊ฐ์ ๋์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ๊ฐ์ ๋์ ๋๊ณผ ๋น์ทํ๊ฒ ์๊ฒผ์ง๋ง ์ค์ JS ๊ฐ์ฒด๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ๋ฆฌ์กํธ๋ ๋๋๋ง๋ง๋ค ์๋ก์ด ๊ฐ์ ๋์ ์์ฑํ๊ณ ๊ธฐ์กด ์ค๋ ์ท๊ณผ ๋น๊ตํ์ฌ ๋ณ๊ฒฝ์ ์ ์ฐพ์ ๋ฐ๊ฟ๋๋ค. ์ด๋ ๊ธฐ์ ๋ฆฌ์กํธ๋ ์ด๋ฏธ ๋น ๋ฅธ ๋ ๋๋ง์ ํ๋๋ก ์ค๊ณ๋์ด ์์ง๋ง, ๋๋๋ก ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ๋ ์์ต๋๋ค. ๊ทธ ๋ useMemo, useCallback์ ํตํด์ ๋๊ฐ์ง ์ด์ ์ ๋๋ฆด ์ ์์ต๋๋ค. 1. ๋ ๋๋ง ํ์๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. 2.๋ ๋๋ง ์ค ์ผ์ด๋์ผ ํ๋ ์์ ์ ์ค์ผ ์ ์์ต๋๋ค. ์ ๋ฆฌํ์๋ฉด, ์ด ๋ ๊ธฐ๋ฅ์ ํตํด ๋ด๊ฐ ์ ๋ง ์ ๋ฐ์ดํธ ํ๊ณ ์ถ์ ๊ฒ๋ค๋ง ์ ๋ฐ์ดํธ ํ ์ ์์ต๋๋ค. 1๏ธโฃ ๊ฐ์ ๊ธฐ์ตํ๋ useMemo ๐ useMemo๋ ๊ณ์ฐ๋ ๊ฐ์ ๊ธฐ์ตํ๊ณ ์ถ์ ๋ ์ฌ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ๋ฅด๋ ์๊ฐ์ ๋ณด์ฌ์ฃผ๋ ์๊ณ์ ์ ๋ ฅ๊ฐ์ ๋ฐ์ 1์์ ์ ๋ ฅ๊ฐ๊น์ง ๋ณด์ฌ์ฃผ๋ ํ๊ฐ ๊ฐ์ ์ปดํฌ๋ํธ ์์ ์๋ค๊ณ ๊ฐ์ ํฉ์๋ค. ์๊ณ๋ 1์ด๋ง๋ค ๋ ๋๋ง ํ๊ณ ์ซ์ํ๋ ๊ทธ ๋๋ง๋ค ๋ ๋๋ง๋ฉ๋๋ค. ์ด ์ซ์๊ฐ 100์ผ ๋๋ ๋ฌธ์ ์์ ์ ์์ง๋ง, ๋ง์ฝ 1000์ต์ผ๋ก ์ ๋ ฅ๊ฐ์ด ๋ค์ด์จ๋ค๋ฉด 1์ด๋ง๋ค 1000์ต๊น์ง ๋ ๋๋ง์ ํด์ผํฉ๋๋ค. ์ด ๋ useMemo๋ฅผ ํตํด ๋ ๋๋ง์ ๋ ํ ์ ์์ต๋๋ค. useMemo๋ฅผ ํตํด ์ ๋ ฅ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง ์ซ์ํ์ ๋ค์ด๊ฐ ์ซ์๋ค์ ๋ฐฐ์ด์ ์๋ก ๋ง๋ ๋ค๋ฉด ๋ ๋๋ง ๋ถ๋ด์ ์ค์ผ ์ ์์ต๋๋ค. ๐กTip. useMemo๋ฅผ ์ฐ์ง ์๊ณ ๋ ๊ฐ์ ํจ๊ณผ๋ฅผ ๋ด๋ ๋ฒ ์๊น ์๊ณ์ ํ๊ฐ ๊ฐ์ ์ปดํฌ๋ํธ์ ์๋ค๊ณ ํ์ต๋๋ค. ์ด๋ฅผ ๋ ๊ฐ๋ก ์ชผ๊ฐ์ด ๊ฐ์ ๋ถ๋ชจ๋ฅผ ๊ฐ์ง ํ์ ์ปดํฌ๋ํธ๋ก ๋ง๋ค์ด๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค. ๋ ๋๋ง์ผ๋ก ์ธํ ๋ณ๊ฒฝ์ ์์์ ์๋๋ก๋ง ์์ฉ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. 2๏ธโฃ ํจ์๋ฅผ ๊ธฐ์ตํ๋ useCallback ๐ useCallback์ useMemo์ ๋ฌธ๋ฒ์ ์คํ์ ๋๋ค. useMemo๋ ๋ฐํ๊ฐ์ ํจ์๋ก ๊ฐ์ธ์ ๋งค๊ฐ๋ณ์๋ก ๋ฃ์ต๋๋ค. useMemo๋ฅผ ํตํด ํจ์๋ฅผ ์ ์ฅํ๋ ค๊ณ ํ๋ฉด ํจ์๋ฅผ ๋ฐํํ๋ ํจ์๋ฅผ ๋ง๋ค์ด์ผ ํ๋ useCallback์ ๋ฐ๋ก ๋ง๋ค์ด์ค ๊ฒ ๊ฐ์ต๋๋ค. [๐คทโโ๏ธ๋ฐฐ์ด, ๊ฐ์ฒด, ํจ์๋ฅผ prop์ผ๋ก ๋ด๋ ค์ฃผ๋๋ฐ ๋ณํ ๊ฒ ์์ด๋ ์๊พธ ๋ฆฌ๋ ๋๋ง ๋ผ์] ๋ฆฌ๋ ๋๋ง ์ ์ปดํฌ๋ํธ์ ๊ฐ์ฒด์ ๋ฐฐ์ด์ ์ด์ ๊ณผ ๋ค๋ฆ ๋๋ค(๊ฐ์ด ๊ฐ๋๋ผ๋). ๊ฐ์ฒด์ ๋ฐฐ์ด์ ๋น๊ตํ ๋ ๋ด๋ถ ๊ฐ์ ๋น๊ตํ๋ ๊ฒ์ด ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ๊ฐ์ผ๋ก ๋น๊ตํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ useCallback์ด๋ useMemo์์ด ์ด ๋ด๋ถ ๊ฐ์ ํ์ prop์ผ๋ก ๋๊ธฐ๋ ๊ฒฝ์ฐ React.memo๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํฉ๋๋ค. prop์ผ๋ก ์ ๋ฌํ๋ ๊ฐ์ ์ด ํ ์ ์ ์ ํ๊ฒ ํ์ฉํ๋ฉด ๋ฆฌ๋ ๋๋ง ํ์์ ๊ฐ์ ํจ๊ณผ๋ฅผ ๊ธฐ๋ํ ์ ์์ ๊ฒ์ ๋๋ค. [๐โโ๏ธ์ปดํฌ๋ํธ์ ๋ฆฌ๋ ๋๋ง ์ต์ ํ ๋ง๊ณ ๋ ์ฌ์ฉํ๋ฉด ์ข์ ์๊ฐ ์์๊น์?] 1. ์์ฃผ ์ฐ๋ ์ปค์คํ ํ ์์ ๋ด๋ถ ํจ์๋ฅผ useCallback์ผ๋ก ๊ฐ์ธ๋ณด์ธ์. 2. context provider์์ value๋ฅผ ์ ๋ฌํ ๋ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด useMemo ์ฌ์ฉ์ ๊ณ ๋ คํด๋ณด์ธ์