web/react hook

useCallback

dev_been94 2024. 12. 14. 11:51
728x90
๋ฐ˜์‘ํ˜•

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;

 

๐Ÿ” ์ฝ”๋“œ์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚ ๊นŒ?

  1. useCallback์˜ ์—ญํ• 
    • useCallback์€ handleClick ํ•จ์ˆ˜๋ฅผ ๊ธฐ์–ตํ•ด๋‘ฌ์š”.
    • count๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š์œผ๋ฉด ์ด์ „์— ๋งŒ๋“ค์–ด๋‘” ํ•จ์ˆ˜๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•ด์š”.
  2. ์˜์กด์„ฑ ๋ฐฐ์—ด([count])
    • ๋งŒ์•ฝ count ๊ฐ’์ด ๋ฐ”๋€Œ๋ฉด ๊ทธ๋•Œ๋งŒ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์š”.
  3. ๊ฒฐ๊ณผ
    • ํ•จ์ˆ˜๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋งŒ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋‹ˆ๊นŒ ์„ฑ๋Šฅ์ด ์ข‹์•„์ ธ์š”!
    •  

๐Ÿš€ ํ•œ ์ค„ ์š”์•ฝ

useCallback์€ ํ•จ์ˆ˜๋ฅผ ๊ธฐ์–ตํ•ด์„œ, ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜์ง€ ์•Š๋„๋ก ๋„์™€์ฃผ๋Š” ๋„๊ตฌ์˜ˆ์š”.
์—ฌ๋Ÿฌ ๋ฒˆ ๊ฐ™์€ ๋ ˆ์‹œํ”ผ๋ฅผ ์ ์ง€ ๋ง๊ณ , ๊ธฐ์–ตํ•ด ๋‘๊ณ  ๊บผ๋‚ด ์“ฐ๋ฉด ๋” ํšจ์œจ์ ์ด๊ฒ ์ฃ ?

728x90
๋ฐ˜์‘ํ˜•