React

[React] useMemo알아보기!

2023. 5. 20. 10:45
목차
  1. useMemo란?
  2. useMemo 예시
  3. useMemo 사용

컴포넌트는 기본적으로 상태가 변경되거나 부모 컴포넌트가 렌더링이 될 때마다 리렌더링을 하는 구조로 이루어져 있다.

하지만 너무 잦은 리렌더링은 앱에 좋지 않은 성능을 끼친다. 

 

React Hook은 함수 컴포넌트가 상태를 조작하고 및 최적화 기능을 사용할 수 있게끔 하는 메서드이며 그 중 렌더링 최적하를 위한 Hook이 존재하는데, useCallback과 useMemo가 바로 그 역할을 하는 Hook이다.


 

useMemo란?

useMemo은 특정 값(value)을 재사용하고자 할 때 사용하는 Hook이다.

 

useMemo를 호출하여 이전에 구축된 렌더링과 새로이 구축되는 렌더링을 비교해 value 값이 동일할 경우에는 이전 렌더링의 value 값을 그대로 재활용할 수 있게 된다. 이는 메모이제이션(Memoization) 개념과 긴밀한 관계가 있다.

 

Memoization

메모이제이션(Memoization)은 알고리즘에서 자주 나오는 개념입니다. 기존에 수행한 연산의 결과값을 메모리에 저장을 해두고, 동일한 입력이 들어오면 재활용하는 프로그래밍 기법을 말합니다. 이 메모이제이션을 적절히 사용한다면 굳이 중복 연산을 할 필요가 없기 때문에 앱의 성능을 최적화할 수 있습니다.

 

useMemo는 바로 이 개념을 이용하여 복잡한 연산의 중복을 피하고 React 앱의 성능을 최적화시킵니다. 직접 메모이제이션 개념을 이용하여 로직을 구현할 수도 있겠으나, useMemo Hook을 호출한다면 이런 로직을 직접 구현하는 것을 대신해 주기 때문에 훨씬 간편하다고 할 수 있습니다

 

useMemo 예시

import React, { useState } from "react";
import "./styles.css";
import { add } from "./add";

export default function App() {
  const [name, setName] = useState("");
  const [val1, setVal1] = useState(0);
  const [val2, setVal2] = useState(0);
  const answer = add(val1, val2);

  return (
    <div>
      <input
        className="name-input"
        placeholder="이름을 입력해주세요"
        value={name}
        type="text"
        onChange={(e) => setName(e.target.value)}
      />
      <input
        className="value-input"
        placeholder="숫자를 입력해주세요"
        value={val1}
        type="number"
        onChange={(e) => setVal1(Number(e.target.value))}
      />
      <input
        className="value-input"
        placeholder="숫자를 입력해주세요"
        value={val2}
        type="number"
        onChange={(e) => setVal2(Number(e.target.value))}
      />
      <div>{answer}</div>
    </div>
  );
}

 

해당 컴포넌트는 아직 최적화되지 않은 컴포넌트이다. 위의 컴포넌트에서 실제로 연산 로직에 영향을 주는 값은 val1, val2이다. 

 

자료출처 코드스테이츠

현재는 이름 상태가 변화하면 add 함수가 계속같은 결과값을 리턴함에도 불구하고 불필요하게 호출되고 있다. 

 

useMemo 사용

import React, { useState } from "react";
import "./styles.css";
import { add } from "./add";
import { useMemo } from "react";

export default function App() {
  const [name, setName] = useState("");
  const [val1, setVal1] = useState(0);
  const [val2, setVal2] = useState(0);
  const answer = useMemo(() => add(val1, val2), [val1, val2]);

 

 

자료출처 코드스테이츠

useMemo를 사용하여 add 함수의 호출을 최소화하고 이름을 입력할 때 add 함수가 호출되지 않도록 코드를 수정해보았다. 

'React' 카테고리의 다른 글

Styled-Components 설치 오류  (0) 2023.06.13
[React] useCallback 알아보기!  (0) 2023.05.20
[React] Diffing 알고리즘  (0) 2023.05.19
[React] Virtual DOM  (0) 2023.05.19
[React] - Props/State 제대로 알고가기!  (0) 2023.05.02
  1. useMemo란?
  2. useMemo 예시
  3. useMemo 사용
'React' 카테고리의 다른 글
  • Styled-Components 설치 오류
  • [React] useCallback 알아보기!
  • [React] Diffing 알고리즘
  • [React] Virtual DOM
형일
형일
코딩일지형일 님의 블로그입니다.
형일
코딩일지
형일
전체
오늘
어제
  • 분류 전체보기 (53)
    • 코드스테이츠 (20)
    • JavaScript (8)
    • React (10)
    • WEB (5)
    • Git (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

hELLO · Designed By 정상우.
형일
[React] useMemo알아보기!
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.