useCallback
๐ง useCallback์ด ๋ญ์์?
useCallback์ ํจ์๋ฅผ ๊ธฐ์ตํด๋๋ React์ ๋๊ตฌ์์.
์ฝ๊ฒ ๋งํด์, "๋ถํ์ํ๊ฒ ํจ์๋ฅผ ์๋ก ๋ง๋ค์ง ์๋๋ก" ๋์์ค์.
์ ์ด๊ฒ ํ์ํ๋๊ณ ์?
React์์๋ ์ปดํฌ๋ํธ๊ฐ ์
๋ฐ์ดํธ๋ ๋๋ง๋ค ํจ์๋ ์๋ก ๋ง๋ค์ด์ง ์ ์์ด์.
์ด๋ ๊ฒ ์๋ก ๋ง๋ค์ด์ง ํจ์๊ฐ ๋ง์์ง๋ฉด ์ฑ๋ฅ์ ์ ์ข์ ์ํฅ์ ์ค ์ ์๊ฑฐ๋ ์.
๐ณ ์๋ฆฌ ์ด์ผ๊ธฐ๋ก ์ดํดํ๊ธฐ
์ฌ๋ฌ๋ถ์ด ์๋ฆฌ์ฌ๋ผ๊ณ ์์ํด๋ณด์ธ์. ๐ฉ๐ณ๐จ๐ณ
๋ ์ํผ๋ฅผ ๋ณด๊ณ ๊ณ๋ํ๋ผ์ด๋ฅผ ๋ง๋๋ ํจ์๋ฅผ ๋งค๋ฒ ์๋ก ์ ๋๋ค๊ณ ์๊ฐํด ๋ณด์ธ์.
- ์ฒซ ๋ฒ์งธ ์๋ฆฌ: ๊ณ๋ํ๋ผ์ด ๋ ์ํผ ์์ฑ ๐
- ๋ ๋ฒ์งธ ์๋ฆฌ: ๋ ๊ณ๋ํ๋ผ์ด ๋ ์ํผ ์์ฑ ๐
- ์ธ ๋ฒ์งธ ์๋ฆฌ: ๋ ๋ ๊ณ๋ํ๋ผ์ด ๋ ์ํผ ์์ฑ ๐
๋๋ฌด ๋นํจ์จ์ ์ด์ง ์๋์? ๋๊ฐ์ ๋ ์ํผ๋ฅผ ์ ๊ณ์ ์๋ก ์ฐ์ฃ ?
ํ ๋ฒ๋ง ๋ ์ํผ๋ฅผ ์ ๊ณ ๊ธฐ์ตํด๋๋ฉด ํ์ํ ๋ ๊บผ๋ด ์ฐ๋ฉด ๋์์์?
์ด๊ฒ ๋ฐ๋ก **useCallback**์ ํต์ฌ ์์ด๋์ด์์.
"ํ ๋ฒ ๋ง๋ค์ด์ง ํจ์(๋ ์ํผ)๋ฅผ ๊ธฐ์ตํด๋๊ณ ์ฌ์ฌ์ฉํ๋ค!"
๐ ๏ธ ์์ ์ฝ๋๋ก ์์๋ณด๊ธฐ
์ด์ ์ค์ React ์ฝ๋๋ก ํ์ธํด๋ณผ๊ฒ์.
โ useCallback์ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
// ๋ฒํผ์ ํด๋ฆญํ ๋ ํธ์ถ๋๋ ํจ์
const handleClick = () => {
setCount(count + 1);
};
console.log("์๋ก์ด handleClick ํจ์๊ฐ ๋ง๋ค์ด์ก์ด์!");
return (
<div>
<p>Count: {count}</p>
<button onClick={handleClick}>+1 ์ฆ๊ฐ</button>
</div>
);
}
export default Counter;
์ด ์ฝ๋์ ๋ฌธ์ ๋ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋ ๋๋ง๋ค handleClick ํจ์๊ฐ ์๋ก ์์ฑ๋๋ค๋ ์ ์ด์์.
๋งค๋ฒ ์๋ก ๋ง๋๋ ๊ฑด ๋ญ๋น์์์?
โ useCallback์ ์ฌ์ฉํ ๊ฒฝ์ฐ
import React, { useState, useCallback } from 'react';
function Counter() {
const [count, setCount] = useState(0);
// useCallback์ ์ฌ์ฉํด ํจ์๋ฅผ ๊ธฐ์ตํด์
const handleClick = useCallback(() => {
setCount(count + 1);
}, [count]); // count๊ฐ ๋ฐ๋ ๋๋ง ํจ์๋ฅผ ์๋ก ๋ง๋ค์ด์
console.log("handleClick ํจ์๋ ๊ธฐ์ต๋๊ณ ์์ด์!");
return (
<div>
<p>Count: {count}</p>
<button onClick={handleClick}>+1 ์ฆ๊ฐ</button>
</div>
);
}
export default Counter;
๐ ์ฝ๋์์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ ๊น?
- useCallback์ ์ญํ
- useCallback์ handleClick ํจ์๋ฅผ ๊ธฐ์ตํด๋ฌ์.
- count๊ฐ ๋ฐ๋์ง ์์ผ๋ฉด ์ด์ ์ ๋ง๋ค์ด๋ ํจ์๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํด์.
- ์์กด์ฑ ๋ฐฐ์ด([count])
- ๋ง์ฝ count ๊ฐ์ด ๋ฐ๋๋ฉด ๊ทธ๋๋ง ์๋ก์ด ํจ์๋ฅผ ๋ง๋ค์ด์.
- ๊ฒฐ๊ณผ
- ํจ์๊ฐ ํ์ํ ๋๋ง ์๋ก ์์ฑ๋๋๊น ์ฑ๋ฅ์ด ์ข์์ ธ์!
๐ ํ ์ค ์์ฝ
useCallback์ ํจ์๋ฅผ ๊ธฐ์ตํด์, ๋ถํ์ํ๊ฒ ์๋ก ์์ฑ๋์ง ์๋๋ก ๋์์ฃผ๋ ๋๊ตฌ์์.
์ฌ๋ฌ ๋ฒ ๊ฐ์ ๋ ์ํผ๋ฅผ ์ ์ง ๋ง๊ณ , ๊ธฐ์ตํด ๋๊ณ ๊บผ๋ด ์ฐ๋ฉด ๋ ํจ์จ์ ์ด๊ฒ ์ฃ ?