useCallback이 컴포넌트가 렌더링 될 때 의존성 배열에 있는 상태가 바뀌진 않았으면 재할당되지 않는 효과에 있어서 더 빠른 렌더링이 가능하지만
메모리를 차지하게 된다는게 문제인것인데 그렇다면 재할당 방지를 통한 빠른 렌더링과 메모리 낭비에 대한 우선순위는 어떻게 저울질을 해야할까요?
- 정답은 없습니다. 하지만 저는 useCallback사용전에 아래와같은 생각을 해봅니다.
- 자식 컴포넌트로 전달되는지 여부
- 자식 컴포넌트로 함수를 전달할때 함수가 매번 생성된다면 자식 컴포넌트에서도 프롭스의 변경으로 인해 리렌더링이 발생할 것입니다. 이를 방지하기위해 사용합니다.
- 복잡한 계산이나 처리가 없는 컴포넌트에서는 useCallback을 잘 사용안합니다.
- 의존생 배열이 크거나 자주 변경되는 경우, 그 빈도만큼 캐싱이 취소되므로 useCallback을 사용안합니다.
이 모든것들에 앞서서 저는 성능문제가 발생하지않으면 웬만해서는 최적화를 하지않습니다.