🔎 유용한 정보
React는 기본적으로 렌더링이 매우 빠릅니다. 하지만 컴포넌트가 많아지고, 상태 변화가 많아지면 불필요한 렌더링이 발생할 수 있습니다.
이 강의에서는 리액트 성능 최적화를 위한 3가지 핵심 도구를 배웁니다.
1. 불필요한 렌더링이란?
<Parent>
<Child />
</Parent>
부모 컴포넌트가 렌더링되면 기본적으로 자식도 함께 렌더링됩니다.
→ 데이터가 바뀌지 않아도 다시 그려지면 성능 낭비 발생 😢
2. React.memo - 컴포넌트 메모이제이션
React.memo는 props가 바뀌지 않았다면 리렌더링을 막아주는 고차 컴포넌트입니다.
const Child = React.memo(({ name }) => {
console.log("Child 렌더링");
return <div>{name}</div>;
});
3. useCallback - 함수를 메모이제이션
useCallback은 컴포넌트 내부의 함수를 의존성이 바뀔 때만 새로 생성합니다.
const handleClick = useCallback(() => {
console.log("클릭!");
}, []);
→ props로 넘기는 함수가 매번 새로 만들어지면 React.memo가 무용지물이 되기 때문에 필수!
4. useMemo - 연산 결과를 메모이제이션
무거운 계산 로직을 매 렌더링마다 하지 않도록 값 자체를 캐싱합니다.
const expensiveValue = useMemo(() => {
return calculateHeavyStuff(data);
}, [data]);
5. 예제: 렌더링 최적화 실습
📄 Child.js
const Child = React.memo(({ onClick }) => {
console.log("🔁 Child 렌더링");
return <button onClick={onClick}>자식 버튼</button>;
});
export default Child;
📄 App.js
import { useState, useCallback } from "react";
import Child from "./Child";
function App() {
const [count, setCount] = useState(0);
const handleChildClick = useCallback(() => {
console.log("자식 버튼 클릭");
}, []);
return (
<div>
<h1>성능 최적화 예제</h1>
<p>카운트: {count}</p>
<button onClick={() => setCount(count + 1)}>+ 증가</button>
<Child onClick={handleChildClick} />
</div>
);
}
export default App;
✅ 결과
- count만 증가할 때 Child는 렌더링되지 않음!
- 성능 최적화 성공! 🎉
마무리 정리
도구 역할
React.memo | 컴포넌트 리렌더링 방지 |
useCallback | 함수 재생성 방지 |
useMemo | 값 재계산 방지 (무거운 연산용) |
'📁 [4] 개발자 정보 & 코드 노트 > REACT' 카테고리의 다른 글
📘 리액트 강의 11편 - Axios로 서버와 통신하고 API 연동하기 (0) | 2025.04.12 |
---|---|
📘 리액트 강의 10편 - Redux Toolkit으로 전역 상태 관리하기 (0) | 2025.04.12 |
📘 리액트 강의 9편 - React Router로 페이지 전환 구현하기 (0) | 2025.04.12 |
📘 리액트 강의 8편 - Context API로 전역 상태 공유하기 (0) | 2025.04.12 |
📘 리액트 강의 7편 - 커스텀 훅과 성능 최적화 (useMemo, useCallback) (0) | 2025.04.12 |
🔎 유용한 정보