SW/JavaScript

useMemo() Hook: React 성능 최적화를 위한 초보자 가이드

얇은생각 2024. 8. 4. 07:30
반응형

React는 사용자 인터페이스 구축을 위한 인기 있는 JavaScript 라이브러리입니다. React의 핵심 기능 중 하나는 상태 관리와 효율적인 컴포넌트 재렌더링입니다. 그러나 일부 경우에는 컴포넌트를 재렌더링하는 것이 계산 비용이 많이 들고 사용자 인터페이스를 느리게 만들 수 있습니다. 이 문제를 해결하기 위해 useMemo() 훅이 유용합니다.

 

 

useMemo() Hook: React 성능 최적화를 위한 초보자 가이드

 

 

useMemo() 훅이란?

useMemo() 훅은 React에 내장된 훅으로, 비용이 많이 드는 계산을 메모이제이션하여 React 애플리케이션의 성능을 최적화할 수 있습니다. 메모이제이션은 함수 호출의 결과를 입력 매개변수에 따라 캐싱하는 과정입니다. , 함수의 입력 매개변수가 동일하게 유지되면 함수는 다시 계산하지 않고 동일한 출력을 반환합니다.

 

 

useMemo() 훅의 문법과 매개변수

useMemo() 훅은 다음과 같은 문법과 매개변수를 가집니다:

const memoizedValue = useMemo(() => {
  // 메모이제이션할 값을 계산하여 반환
}, [dependency1, dependency2, ...]);

 

 

useMemo() 훅은 두 개의 매개변수를 받습니다:

  1. 메모이제이션할 값을 계산하는 함수: 이 함수는 초기 렌더링 시 한 번 실행되며, 이후에는 종속성이 변경될 때만 다시 실행됩니다.
  2. 메모이제이션된 값이 의존하는 종속성 배열: 이 배열의 종속성 중 하나라도 변경되면 메모이제이션된 값이 다시 계산됩니다.

 

useMemo() 훅은 첫 번째 매개변수로 전달된 함수에 의해 계산된 메모이제이션된 값을 반환합니다. 이 값은 종속성이 변경된 경우에만 다시 계산됩니다.

 

 

매개변수 설명

  • 메모이제이션 함수: 메모이제이션할 값을 계산하는 함수입니다. 이 함수는 메모이제이션할 값을 반환해야 합니다.
  • 종속성 배열: 메모이제이션 함수가 의존하는 선택적 종속성 배열입니다. 이 배열의 종속성이 변경되면 메모이제이션 함수가 다시 실행됩니다. 이 배열이 제공되지 않으면 메모이제이션 함수는 매 렌더링마다 다시 실행됩니다.
  • 반환 값: useMemo() 훅은 메모이제이션된 값을 반환하며, 이 값을 컴포넌트에서 사용할 수 있습니다.

useMemo() 훅은 React 컴포넌트에서 수행해야 하는 비용이 많이 드는 계산이나 연산을 메모이제이션하는 데 사용할 수 있습니다. 이러한 값을 메모이제이션하면 컴포넌트의 성능을 향상시키고 불필요한 재계산을 피할 수 있습니다.

 

예제

다음은 useMemo() 훅을 사용하는 간단한 예제입니다:

import React, { useMemo } from 'react';

function MyComponent(props) {
  const { data } = props;
  const expensiveResult = useMemo(() => {
    // 비용이 많이 드는 계산을 수행합니다
    return data * 2;
  }, [data]);

  return (
    <div>
      <p>{expensiveResult}</p>
    </div>
  );
}

 

 

이 예제에서는 MyComponent라는 컴포넌트를 사용하고 있으며, data라는 props를 받고 있습니다. useMemo() 훅을 사용하여 비용이 많이 드는 계산 결과를 메모이제이션하고 있습니다. data가 변경될 때만 계산이 다시 수행됩니다.

 

 

useMemo() 훅의 이점

useMemo() 훅을 사용하는 주요 이점은 다음과 같습니다:

  1. 성능 향상: 비용이 많이 드는 계산의 결과를 캐싱하여 React 애플리케이션의 성능을 크게 향상시킬 수 있습니다. 특히 대량의 데이터나 복잡한 계산을 처리할 때 유용합니다.
  2. 불필요한 재렌더링 감소: 컴포넌트가 재렌더링될 때 모든 함수가 다시 실행되는 것을 방지하여 애플리케이션의 성능을 개선할 수 있습니다.
  3. 가독성 향상: 비용이 많이 드는 계산을 컴포넌트 코드와 분리함으로써 코드의 가독성과 유지보수성을 높일 수 있습니다.

 

사용 시 주의사항

useMemo() 훅은 항상 필요한 것은 아닙니다. 함수의 성능 이점이 복잡성을 정당화할 만큼 크지 않은 경우에는 사용하지 않는 것이 좋습니다. 또한, 메모이제이션할 함수가 비용이 많이 들지 않는 경우에는 useMemo()가 성능 이점을 제공하지 않을 수 있습니다.

 

useMemo()의 일반적인 사용 사례

다음은 React에서 useMemo() 훅의 일반적인 사용 사례입니다:

  1. 복잡한 계산 또는 데이터 처리: 컴포넌트에서 복잡한 계산을 수행하거나 대량의 데이터를 처리해야 하는 경우 useMemo()를 사용하여 결과를 메모이제이션하고 불필요한 재계산을 피할 수 있습니다.
  2. 데이터 필터링 또는 정렬: 컴포넌트에서 특정 기준에 따라 데이터를 필터링하거나 정렬해야 하는 경우 useMemo()를 사용하여 필터링된 또는 정렬된 결과를 메모이제이션하고 매 렌더링마다 데이터를 다시 처리하는 것을 피할 수 있습니다.
  3. 콜백 함수 메모이제이션: 컴포넌트에 콜백 함수가 있고, 이 함수가 자식 컴포넌트에 props로 전달되는 경우 useMemo()를 사용하여 함수를 메모이제이션하고 자식 컴포넌트의 불필요한 재렌더링을 피할 수 있습니다.
  4. 비용이 많이 드는 렌더링: 컴포넌트에 많은 자식 컴포넌트가 있거나 복잡한 렌더링 로직이 있는 경우 useMemo()를 사용하여 렌더링된 출력을 메모이제이션하고 불필요한 재렌더링을 피할 수 있습니다.
  5. API 호출 최적화: 컴포넌트가 사용자 동작에 따라 API 호출을 수행하는 경우 useMemo()를 사용하여 API 응답을 메모이제이션하고 불필요한 데이터 재수신을 피할 수 있습니다.

 

결론

결론적으로, ReactuseMemo() 훅은 비용이 많이 드는 계산의 결과를 메모이제이션하고 종속성이 변경될 때만 다시 계산하여 컴포넌트의 성능을 최적화하는 데 사용됩니다. 이를 통해 불필요한 재렌더링을 방지하고 브라우저의 부하를 줄일 수 있습니다. useMemo() 훅은 성능 병목 현상을 식별하고 메모이제이션을 통해 성능을 크게 향상시킬 수 있는 경우에만 사용해야 합니다. 또한, 구현 전후의 성능을 측정하여 실제로 성능 향상이 있는지 확인하는 것이 중요합니다.

반응형