useCallback과 useMemo는 React의 내장 Hook으로, 둘 다 메모이제이션(memoization)을 통해 특정 값을 재사용하는 데 도움이 됩니다.
그러나 둘 사이에는 중요한 차이점이 있습니다.
useCallback은 메모이제이션된 '함수’를 반환합니다.
즉, 특정 함수를 새로 만들지 않고 재사용하고 싶을 때 사용합니다.
useCallback은 함수와 상관없는 상태 값이 변할 때, 함수 컴포넌트에서 불필요한 업데이트가 일어나는 것을 방지해 줍니다.
반면에 useMemo는 메모이제이션된 '값’을 반환합니다.
즉, 값을 연산할 때 사용합니다.
useMemo는 주어진 렌더에서 수행해야 하는 작업의 양을 줄이고, 컴포넌트가 다시 렌더링해야 하는 횟수를 줄이면서 리렌더링을 최적화하게 됩니다.
두 Hook 모두 렌더링 성능을 최적화하는 데 도움이 되지만, 사용하는 상황과 목적에 따라 적절한 Hook을 선택해야 합니다.
import React, { useState, useCallback, useMemo } from 'react'; function Example() { const [count, setCount] = useState(0); const increment = useCallback(() => { setCount(count + 1); }, [count]); const double = useMemo(() => { return count * 2; }, [count]); return ( <div> <p>Count: {count}</p> <p>Double: {double}</p> <button onClick={increment}>Increment</button> </div> ); } export default Example;
위의 코드는 useCallback과 useMemo를 사용하는 간단한 React 컴포넌트입니다.
- useState를 사용하여 count라는 상태를 만들고 초기값을 0으로 설정했습니다.
- useCallback을 사용하여 increment라는 함수를 메모이제이션했습니다.
- 이 함수는 count 상태를 1 증가시키는 역할을 합니다. useCallback의 두 번째 인자로 count를 전달하여 count 값이 변경될 때마다 increment 함수를 새로 생성하도록 했습니다.
- useMemo를 사용하여 double이라는 값을 메모이제이션했습니다.
- 이 값은 count의 두 배 값을 가집니다. useMemo의 두 번째 인자로 count를 전달하여 count 값이 변경될 때마다 double 값을 새로 계산하도록 했습니다.
- 마지막으로, count와 double 값을 화면에 출력하고, increment 함수를 호출하는 버튼을 만들었습니다.
이렇게 useCallback과 useMemo를 사용하면, 불필요한 함수 생성이나 값 계산을 방지하여 성능을 최적화할 수 있습니다.
그러나 이 두 Hook은 필요한 경우에만 사용하는 것이 좋습니다. 불필요하게 사용하면 오히려 성능을 저하시킬 수 있습니다.
댓글 ( 0)
댓글 남기기