[React] useMemo vs useRef

2022. 11. 2. 14:25·React/실험실
반응형

최근 성능 최적화에 대해서 공부하던 중 " useMemo와 useRef의 차이가 뭘까? " 에 대해서

궁금증이 생겼다. 

 

둘을 비교하려면 우선 각각 뭔지에 대해서 짧게 알아보자!

 

useMemo 란?

React는 DOM에 변화가 있을 때마다 렌더링을 하는데, 

현재 컴포넌트가 리렌더링 되더라도 값의 변화가 없는 경우에 똑같이 리렌더링을 한다면 

쓸대없이 자원을 낭비하게 된다. 

 

그래서 변화가 생겼을 때, 현재 함수에 유의미한 변화를 발생시키는 경우에만 

연산을 다시 수행하게 해주는 것이 useMemo이다. 

 

즉, 컴포넌트 내부에서 발생하는 연산을 최적화시켜주는 Hook이다. 

const result = useMemo(countingCallback, [deps]);

deps 배열에 들어있는 상태가 변경될 때만 연산을 다시 수행하고 그게 아니라면 

메모이징한 결과값을 재사용한다. 

 

useRef 란? 

간단하게 말해서 특정한 " 값 "을 리렌더링과 상관없이 기억하고 있을 경우에 사용한다. 

 

정확한 사용처는 

  1.  DOM에 직접 접근해야 하는 경우 
  2. 특정한 값을 저장하고 리렌더링이 발생하더라도 가지고 있게 하기 위함
const audioRef = useRef(new Audio());

audioRef가 useRef에 설정한 데이터(new Audio)는 current에 저장되는데, 

컴포넌트가 리렌더링이 발생하더라도 current의 값을 변경되지 않는다. 

 

그래서 useRef vs useMemo 는? 

useMemo는 연산의 결과 값을 저장하기 위해서 사용하고, 

useRef는 특정한 값을 저장하기 위해서 사용한다. 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'React > 실험실' 카테고리의 다른 글

[React] Redux vs Context API  (0) 2022.11.04
[React] 제어 컴포넌트 vs 비제어 컴포넌트  (0) 2022.11.03
[React] useCallback의 남용  (0) 2022.10.31
[React] React와 Canvas를 사용해서 움직이는 공 만들기  (1) 2022.10.20
[React] React Query - 기존 상태 관리 라이브러리의 단점  (0) 2022.10.17
'React/실험실' 카테고리의 다른 글
  • [React] Redux vs Context API
  • [React] 제어 컴포넌트 vs 비제어 컴포넌트
  • [React] useCallback의 남용
  • [React] React와 Canvas를 사용해서 움직이는 공 만들기
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    Docker
    알고리즘
    webpack
    react
    바질
    영어회화
    타입스크립트
    CSS
    ChatGPT
    리얼학습일기
    식물
    자바스크립트
    네트워크
    Node.js
    네이버 부스트캠프
    Babel
    typescript
    리액트
    redux
    javascript
    프로그래머스
    ReactNative
    다이소
    영어독학
    타일러영어
    바질 키우기
    리얼클래스
    덤프
    CCNA
    next.js
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[React] useMemo vs useRef
상단으로

티스토리툴바