useCallback의 동작원리가 무엇인가요?

0

기술면접 - React

목록 보기
7/36

useCallback의 동작원리가 무엇인가요?

useCallback이란?

useCallback은 리액트의 Hook 중 하나로, 특정 함수를 재사용할 수 있도록 돕습니다. useCallback Hook은 메모이제이션된 콜백 함수를 반환합니다. 이는 함수 내에서 사용하는 상태나 속성이 변경될 때까지 동일한 함수를 재사용하는 데 도움이 됩니다.

아래는 useCallback의 사용 예제입니다:

import React, { useState, useCallback } from 'react';

function Example() {
  const [count, setCount] = useState(0);

  const increment = useCallback(() => {
    setCount(count + 1);
  }, [count]);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={increment}>Increase count</button>
    </div>
  );
}

위의 예제에서, useCallbackincrement 함수를 메모이제이션합니다. 이 함수는 count 상태에 의존하므로, count가 변경될 때마다 새로운 increment 함수가 생성됩니다. 그러나 count 상태가 변경되지 않는 한, increment 함수는 동일하게 유지됩니다.

이는 비용이 많이 드는 계산이 필요한 함수를 메모이제이션하거나, 렌더링 사이에 동일한 함수를 유지해야 하는 경우(예: React.memo 또는 shouldComponentUpdate와 같은 최적화를 사용하는 경우)에 유용합니다.

하지만 useCallback을 과도하게 사용하면, 메모이제이션 비용 때문에 오히려 성능이 저하될 수 있습니다. 따라서 실제로 필요한 경우에만 useCallback을 사용하는 것이 좋습니다.

메모이제이션이란?

메모이제이션(Memoization)은 컴퓨터 과학에서 사용되는 최적화 기법 중 하나로, 이전에 계산한 값을 메모리에 저장하여 동일한 계산의 반복을 피하도록 하는 기법을 말합니다.

예를 들어, 피보나치 수열을 구현하는 함수를 생각해봅시다. 일반적인 재귀 함수를 사용하여 피보나치 수열을 구현하면, 동일한 계산이 반복적으로 수행되어 성능이 저하될 수 있습니다. 하지만 메모이제이션을 이용하면 이전에 계산한 피보나치 수열의 값을 저장하고, 이 값을 재사용함으로써 이러한 비효율성을 해결할 수 있습니다.

이와 유사하게, 리액트에서 useMemouseCallback과 같은 훅은 메모이제이션을 이용하여 컴포넌트의 성능을 최적화하는 데 사용됩니다. 이러한 훅을 사용하면, 비싼 비용의 계산이나 함수 생성을 최소화하면서 컴포넌트의 렌더링 성능을 향상시킬 수 있습니다.

profile
지치지 않는 백엔드 개발자 김성주입니다 :)

0개의 댓글