useMemo는 React의 성능 최적화 훅으로, 복잡한 계산의 결과를 메모이제이션하여 불필요한 재계산을 방지함.
const memoizedValue = useMemo(() => {
// 계산이 복잡한 로직
return computeExpensiveValue(a, b);
}, [a, b]); // 의존성 배열
무거운 계산 결과를 캐싱할 때
계산 비용이 높은 함수의 결과를 저장하고, 의존성이 변경되지 않았다면 이전 결과를 재사용함.
참조 동일성 유지
자식 컴포넌트에 props로 전달되는 객체나 배열의 참조가 불필요하게 변경되는 것을 방지함.
*참조형 타입: 객체, 배열(주소 참조)
const memoizedValue = useMemo(() => {
return {
complex: 'object',
that: 'wont change'
};
}, []);
// 자식 컴포넌트에 전달
<ChildComponent data={memoizedValue} />
function ParentComponent() {
const [count, setCount] = useState(0);
const [todos, setTodos] = useState([]);
// todos가 변경되지 않으면 필터링 계산을 건너뜀
const filteredTodos = useMemo(() => {
return todos.filter(todo => todo.completed);
}, [todos]);
return (
<>
<TodoList todos={filteredTodos} />
<Counter count={count} />
</>
);
}
// API 응답 데이터의 복잡한 변환
const processedData = useMemo(() => {
return apiResponse.data.map(item => {
// 복잡한 데이터 변환 로직
return heavyTransformationLogic(item);
});
}, [apiResponse]);
useMemo는 React 성능 최적화의 강력한 도구입니다. 하지만 맹목적인 사용보다는 실제 성능 병목 지점을 정확히 파악하고 적절히 적용하는 것이 중요함