useCallback
은 콜백 함수의 메모이제이션된 버전을 반환하는 훅으로, 종속성 중 하나라도 변경될 때만 함수가 변경됩니다. 이를 통해 동일한 인스턴스의 콜백이 사용되도록 보장하여 불필요한 리렌더링을 방지할 수 있습니다.
const memoizedCallback = useCallback(
() => {
// 콜백 함수 로직
},
[dependency1, dependency2, ...] // 종속성 배열
);
useCallback
의 주요 사용 사례는 함수가 자식 컴포넌트로 전달되거나 성능에 민감한 작업에 사용될 때 함수의 재생성을 방지하는 것입니다.
import React, { useState, useCallback } from 'react';
function ParentComponent() {
const [count, setCount] = useState(0);
const [otherState, setOtherState] = useState(0);
const incrementCount = useCallback(() => {
setCount(count + 1);
}, [count]);
return (
<div>
<ChildComponent onIncrement={incrementCount} />
<button onClick={() => setOtherState(otherState + 1)}>
Increment Other State
</button>
</div>
);
}
function ChildComponent({ onIncrement }) {
console.log('ChildComponent 리렌더링');
return (
<button onClick={onIncrement}>
Increment Count
</button>
);
}
export default ParentComponent;
incrementCount
함수는 useCallback
을 사용하여 메모이제이션됩니다.ChildComponent
는 incrementCount
가 변경될 때만 리렌더링되며, 이는 count
가 변경될 때만 발생합니다.ParentComponent
에서 otherState
를 업데이트하는 버튼을 클릭해도 ChildComponent
는 리렌더링되지 않아 성능이 최적화됩니다.useCallback
은 불필요한 함수 재생성을 방지하여 성능을 최적화합니다. 특히 이러한 함수들이 자식 컴포넌트로 전달될 때 유용합니다.useCallback
은 성능을 최적화할 수 있지만, 모든 함수에 적용할 필요는 없습니다. 실제 성능 향상이 있는지 프로파일링하고 확인하는 것이 중요합니다.useCallback
의 과도한 사용은 코드의 가독성을 떨어뜨리고 유지보수를 어렵게 할 수 있습니다.useCallback
은 React
애플리케이션에서 함수 메모이제이션을 통해 성능을 최적화하는 데 유용한 도구입니다. 올바른 사용법과 잠재적인 문제점을 이해하는 것이 중요합니다. useCallback
을 적절하게 활용하면 복잡한 애플리케이션에서 상당한 성능 향상을 얻을 수 있습니다.