728x90
    
    
  이 Hook은 성능 최적화를 위해 사용하는 Hook으로, 컴포넌트의 불필요한 재렌더링을 방지하는 역할을 수행한다.
useMemo 의 기능과 차이점
값의 메모이제이션 (연산 결과를 메모리에 저장) 기능을 제공하여, 동일한 연산을 반복하지 않고 계산 결과를 재 사용할 수 있도록 함.
// computeExpensiveValue는 a와 b가 변경되지 않는 한, 재계산되지 않고 이전의 계산된 값을 반환
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
useCallback 의 기능과 차이점
함수의 메모이제이션 (입력 값에 대한 실행 결과를 메모리에 저장) 기능을 제공, 전달된 함수를 다시 생성하지 않고 재 사용할 수 있도록 함.
// doSomething 함수는 a와 b가 변경되지 않는 한, 재생성되지 않고 동일한 참조를 유지
const memoizedCallback = useCallback(() => {
    doSomething(a, b);
}, [a, b]);
useMemo 와 useCallback 을 사용하는 상황
- 참조 동일성이 중요한 경우
- 하위 컴포넌트의 Prop으로 객체나 함수를 전달할 때, 해당 값이 변경되지 않도록 하는 경우 사용
 
 - 비용이 많이 드는 연산
- 복잡한 연산이 포함된 데이터를 렌더링할 때, 연산 결과를 재 사용하여 성능을 최적화 할 수 있음
 
 
useMemo와 useCallback의 남용 시 문제점
- 메모리 사용 비효율
- 불필요하게 많은 값을 저장할 경우, 메모리 사용량을 늘릴 수 있음
 
 - 동작 시간의 비효율
- 메모이제이션의 오버헤드로 인해, 애플리케이션의 응답시간이 증가할 수 있음
 
 - 관리 지점 증가
- 코드의 복잡성이 증가, 의존성 배열의 관리가 어려워지고 디버깅이 복잡해질 수 있음
 
 
참고자료
728x90
    
    
  '웹프로그래밍 > 부트캠프 - Codeit' 카테고리의 다른 글
| [7주차] 위클리 페이퍼 - 리액트 생명주기(life cycle)에 대해 설명해 주세요. (1) | 2025.08.08 | 
|---|---|
| [7주차] 위클리 페이퍼 - React에서 배열을 렌더링할 때 key를 설정해야 하는 이유와 key 설정 시 주의할 점을 설명하세요. (2) | 2025.08.08 | 
| [6주차] 위클리 페이퍼 - React에서 컴포넌트란 무엇이며, 함수형 컴포넌트와 클래스 컴포넌트의 차이점을 설명하세요. (2) | 2025.08.08 | 
| [5주차] 위클리 페이퍼 - 리액트에서 Virtual DOM이 무엇인지, 이를 사용하는 이유는 무엇인지 설명해 주세요. (0) | 2025.07.28 | 
| [5주차] 위클리 페이퍼 - React가 렌더링 하는 방식을 설명하세요. (1) | 2025.07.23 |