useMemo와 useCallback을 배우기 전에

  1. 함수형 컴포넌트는 그냥 함수다. 함수형 컴포넌트는 단지 jsx를 반환하는 함수이다.
  2. 컴포넌트가 렌더링 된다는 것은 누군가가 그 함수(컴포넌트)를 호출하여서 실행되는 것을 말한다. 함수가 실행될 때마다 내부에 선언되어 있던 표현식(변수, 또다른 함수 등)도 매번 다시 선언되어 사용된다.
  3. 컴포넌트는 자신의 state가 변경되거나, 부모에게서 받는 props가 변경되었을 때마다 리렌더링 된다. (심지어 하위 컴포넌트에 최적화 설정을 해주지 않으면 부모에게서 받는 props가 변경되지 않았더라도 리렌더링 되는게 기본이다.)

Memoization

자주 사용되는 값을 받아오기 위해 반복적으로 계산을 해야한다면, 이전에 이미 계산한 값을 캐싱하여 해당 값이 필요할 때마다 반복적인 계산이 아닌, 이를 메모리에서 꺼내 사용하는 최적화 기법.

useMemo

사용법

인라인 콜백과 그것의 의존성 값의 배열을 전달하세요.

const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);

사용하면 좋은 경우

주의

useMemo는 성능 최적화를 위해 사용할 수는 있지만 의미상으로 보장이 있다고 생각하지는 마세요. 가까운 미래에 React에서는, 이전 메모이제이션된 값들의 일부를 “잊어버리고” 다음 렌더링 시에 그것들을 재계산하는 방향을 택할지도 모르겠습니다. 예를 들면, 오프스크린 컴포넌트의 메모리를 해제하는 등이 있을 수 있습니다. useMemo를 사용하지 않고도 동작할 수 있도록 코드를 작성하고 그것을 추가하여 성능을 최적화하세요.