μ μ μ ν리μΌμ΄μ μ μ±λ₯ μ΅μ νλ₯Ό μν React λ©λͺ¨μ΄μ μ΄μ κ³ κΈ κΈ°λ²μ μμ보μΈμ. React.memo, useCallback, useMemo λ±μ μΈμ , μ΄λ»κ² μ¬μ©νμ¬ ν¨μ¨μ μΈ UIλ₯Ό ꡬμΆνλμ§ λ°°μλλ€.
React Memo: μ μ μ ν리μΌμ΄μ μ΅μ ν κΈ°λ² μ¬μΈ΅ λΆμ
Reactλ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό ꡬμΆνκΈ° μν κ°λ ₯ν JavaScript λΌμ΄λΈλ¬λ¦¬μ΄μ§λ§, μ ν리μΌμ΄μ
μ΄ λ³΅μ‘ν΄μ§μλ‘ μ±λ₯ μ΅μ νλ λ§€μ° μ€μν΄μ§λλ€. React μ΅μ ν λꡬ μ€ νλλ React.memoμ
λλ€. μ΄ λΈλ‘κ·Έ κ²μλ¬Όμ μ μΈκ³ μ¬μ©μλ₯Ό μν κ³ μ±λ₯ React μ ν리μΌμ΄μ
μ ꡬμΆνκΈ° μν΄ React.memoμ κ΄λ ¨ κΈ°μ μ μ΄ν΄νκ³ ν¨κ³Όμ μΌλ‘ μ¬μ©νλ λ°©λ²μ λν ν¬κ΄μ μΈ κ°μ΄λλ₯Ό μ 곡ν©λλ€.
React.memoλ 무μμΈκ°μ?
React.memoλ ν¨μν μ»΄ν¬λνΈλ₯Ό λ©λͺ¨μ΄μ μ΄μ
νλ κ³ μ°¨ μ»΄ν¬λνΈ(HOC)μ
λλ€. κ°λ¨ν λ§ν΄, propsκ° λ³κ²½λμ§ μμλ€λ©΄ μ»΄ν¬λνΈκ° λ€μ λ λλ§λλ κ²μ λ°©μ§ν©λλ€. κΈ°λ³Έμ μΌλ‘ propsμ λν μμ λΉκ΅λ₯Ό μνν©λλ€. μ΄λ λ λλ§ λΉμ©μ΄ λ§μ΄ λλ μ»΄ν¬λνΈλ propsκ° λμΌνλ°λ μμ£Ό λ€μ λ λλ§λλ μ»΄ν¬λνΈμ κ²½μ° μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
μ¬μ©μ νλ‘νμ νμνλ μ»΄ν¬λνΈλ₯Ό μμν΄ λ³΄μΈμ. μ¬μ©μ μ 보(μ: μ΄λ¦, μλ°ν)κ° λ³κ²½λμ§ μμλ€λ©΄, μ»΄ν¬λνΈλ₯Ό λ€μ λ λλ§ν νμκ° μμ΅λλ€. React.memoλ₯Ό μ¬μ©νλ©΄ μ΄λ¬ν λΆνμν λ€μ λ λλ§μ 건λλ°μ΄ κ·μ€ν μ²λ¦¬ μκ°μ μ μ½ν μ μμ΅λλ€.
React.memoλ₯Ό μ¬μ©νλ μ΄μ
React.memoλ₯Ό μ¬μ©νλ©΄ λ€μκ³Ό κ°μ μ£Όμ μ΄μ μ΄ μμ΅λλ€:
- μ±λ₯ ν₯μ: λΆνμν λ€μ λ λλ§μ λ°©μ§νμ¬ λ λΉ λ₯΄κ³ λΆλλ¬μ΄ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€.
- CPU μ¬μ©λ κ°μ: λ€μ λ λλ§ νμκ° μ€μ΄λ€λ©΄ CPU μ¬μ©λλ μ€μ΄λ€μ΄, λͺ¨λ°μΌ μ₯μΉλ λμνμ΄ μ νλ μ§μμ μ¬μ©μμκ² νΉν μ€μν©λλ€.
- λ λμ μ¬μ©μ κ²½ν: λ λ°μμ±μ΄ μ’μ μ ν리μΌμ΄μ μ νΉν λλ¦° μΈν°λ· μ°κ²°μ΄λ ꡬν μ₯μΉλ₯Ό μ¬μ©νλ μ¬μ©μμκ² λ λμ μ¬μ©μ κ²½νμ μ 곡ν©λλ€.
React.memoμ κΈ°λ³Έ μ¬μ©λ²
React.memoλ₯Ό μ¬μ©νλ κ²μ κ°λ¨ν©λλ€. ν¨μν μ»΄ν¬λνΈλ₯Ό μ΄λ‘ κ°μΈκΈ°λ§ νλ©΄ λ©λλ€:
import React from 'react';
const MyComponent = (props) => {
console.log('MyComponent rendered');
return (
{props.data}
);
};
export default React.memo(MyComponent);
μ΄ μμμμ MyComponentλ data propμ΄ λ³κ²½λ κ²½μ°μλ§ λ€μ λ λλ§λ©λλ€. console.log λ¬Έμ ν΅ν΄ μ»΄ν¬λνΈκ° μ€μ λ‘ μΈμ λ€μ λ λλ§λλμ§ νμΈν μ μμ΅λλ€.
μμ λΉκ΅ μ΄ν΄νκΈ°
κΈ°λ³Έμ μΌλ‘ React.memoλ propsμ λν μμ λΉκ΅λ₯Ό μνν©λλ€. μ΄λ propsμ μ°Έμ‘°κ° λ³κ²½λμλμ§ νμΈνλ©°, κ° μ체λ₯Ό νμΈνμ§ μμ΅λλ€. κ°μ²΄ λ° λ°°μ΄μ λ€λ£° λ μ΄ μ μ μ΄ν΄νλ κ²μ΄ μ€μν©λλ€.
λ€μ μμλ₯Ό μ΄ν΄λ³΄μΈμ:
import React, { useState } from 'react';
const MyComponent = (props) => {
console.log('MyComponent rendered');
return (
{props.data.name}
);
};
const MemoizedComponent = React.memo(MyComponent);
const App = () => {
const [user, setUser] = useState({ name: 'John', age: 30 });
const handleClick = () => {
setUser({ ...user }); // Creating a new object with the same values
};
return (
);
};
export default App;
μ΄ κ²½μ°, user κ°μ²΄μ κ°(name λ° age)μ λμΌνκ² μ μ§λμ§λ§, handleClick ν¨μλ νΈμΆλ λλ§λ€ μλ‘μ΄ κ°μ²΄ μ°Έμ‘°λ₯Ό μμ±ν©λλ€. λ°λΌμ React.memoλ data propμ΄ λ³κ²½λμλ€κ³ (κ°μ²΄ μ°Έμ‘°κ° λ€λ₯΄κΈ° λλ¬Έμ) νλ¨νμ¬ MyComponentλ₯Ό λ€μ λ λλ§ν©λλ€.
μ¬μ©μ μ μ λΉκ΅ ν¨μ
κ°μ²΄ λ° λ°°μ΄μ μμ λΉκ΅ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ React.memoλ λ λ²μ§Έ μΈμλ‘ μ¬μ©μ μ μ λΉκ΅ ν¨μλ₯Ό μ 곡ν μ μλλ‘ ν©λλ€. μ΄ ν¨μλ prevPropsμ nextProps λ μΈμλ₯Ό λ°μ΅λλ€. μ»΄ν¬λνΈκ° λ€μ λ λλ§λμ§ μμμΌ νλ κ²½μ°(μ¦, propsκ° μ€μ§μ μΌλ‘ λμΌν κ²½μ°)μλ trueλ₯Ό λ°ννκ³ , λ€μ λ λλ§ν΄μΌ νλ κ²½μ°μλ falseλ₯Ό λ°νν΄μΌ ν©λλ€.
μ΄μ μμμμ μ¬μ©μ μ μ λΉκ΅ ν¨μλ₯Ό μ¬μ©νλ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€:
import React, { useState, memo } from 'react';
const MyComponent = (props) => {
console.log('MyComponent rendered');
return (
{props.data.name}
);
};
const areEqual = (prevProps, nextProps) => {
return prevProps.data.name === nextProps.data.name && prevProps.data.age === nextProps.data.age;
};
const MemoizedComponent = memo(MyComponent, areEqual);
const App = () => {
const [user, setUser] = useState({ name: 'John', age: 30 });
const handleClick = () => {
setUser({ ...user });
};
return (
);
};
export default App;
μ΄ μ
λ°μ΄νΈλ μμμμ areEqual ν¨μλ user κ°μ²΄μ nameκ³Ό age μμ±μ λΉκ΅ν©λλ€. μ΄μ MemoizedComponentλ nameμ΄λ ageκ° λ³κ²½λ κ²½μ°μλ§ λ€μ λ λλ§λ©λλ€.
React.memo μ¬μ© μκΈ°
React.memoλ λ€μ μλ리μ€μμ κ°μ₯ ν¨κ³Όμ μ
λλ€:
- λμΌν propsλ₯Ό μμ£Ό λ°λ μ»΄ν¬λνΈ: μ»΄ν¬λνΈμ propsκ° κ±°μ λ³κ²½λμ§ μλ κ²½μ°,
React.memoλ₯Ό μ¬μ©νλ©΄ λΆνμν λ€μ λ λλ§μ λ°©μ§ν μ μμ΅λλ€. - λ λλ§ λΉμ©μ΄ λ§μ΄ λλ μ»΄ν¬λνΈ: 볡μ‘ν κ³μ°μ μννκ±°λ λ§μ μμ λ°μ΄ν°λ₯Ό λ λλ§νλ μ»΄ν¬λνΈμ κ²½μ°, λ€μ λ λλ§μ 건λλ°λ©΄ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
- μμ ν¨μν μ»΄ν¬λνΈ: λμΌν μ
λ ₯μ λν΄ λμΌν μΆλ ₯μ μμ±νλ μ»΄ν¬λνΈλ
React.memoμ μ΄μμ μΈ ν보μ λλ€.
κ·Έλ¬λ React.memoκ° λ§λ₯ ν΄κ²°μ±
μ μλλΌλ μ μ μλ κ²μ΄ μ€μν©λλ€. 무λΆλ³νκ² μ¬μ©νλ©΄ μμ λΉκ΅ μ체μ λΉμ©μ΄ λ°μνμ¬ μ€νλ € μ±λ₯μ μ νμν¬ μ μμ΅λλ€. λ°λΌμ μ ν리μΌμ΄μ
μ νλ‘νμΌλ§νκ³ λ©λͺ¨μ΄μ μ΄μ
μ ν΅ν΄ κ°μ₯ ν° μ΄μ μ μ»μ μ μλ μ»΄ν¬λνΈλ₯Ό μλ³νλ κ²μ΄ μ€μν©λλ€.
React.memoμ λμ
React.memoλ κ°λ ₯ν λꡬμ΄μ§λ§, React μ»΄ν¬λνΈ μ±λ₯μ μ΅μ ννλ μ μΌν μ΅μ
μ μλλλ€. λ€μμ λͺ κ°μ§ λμ λ° λ³΄μ κΈ°μ μ
λλ€:
1. PureComponent
ν΄λμ€ μ»΄ν¬λνΈμ κ²½μ° PureComponentλ React.memoμ μ μ¬ν κΈ°λ₯μ μ 곡ν©λλ€. μ΄λ propsμ stateλ₯Ό λͺ¨λ μκ² λΉκ΅νλ©°, λ³κ²½ μ¬νμ΄ μμ κ²½μ°μλ§ λ€μ λ λλ§ν©λλ€.
import React from 'react';
class MyComponent extends React.PureComponent {
render() {
console.log('MyComponent rendered');
return (
{this.props.data}
);
}
}
export default MyComponent;
PureComponentλ ν΄λμ€ μ»΄ν¬λνΈμμ λΆνμν λ€μ λ λλ§μ λ°©μ§νλ μ ν΅μ μΈ λ°©λ²μ΄μλ shouldComponentUpdateλ₯Ό μλμΌλ‘ ꡬννλ κ²μ λν νΈλ¦¬ν λμμ
λλ€.
2. shouldComponentUpdate
shouldComponentUpdateλ ν΄λμ€ μ»΄ν¬λνΈμ μλͺ
μ£ΌκΈ° λ©μλλ‘, μ»΄ν¬λνΈκ° λ€μ λ λλ§λμ΄μΌ νλμ§ μ¬λΆλ₯Ό κ²°μ νκΈ° μν μ¬μ©μ μ μ λ‘μ§μ μ μν μ μλλ‘ ν©λλ€. κ°μ₯ ν° μ μ°μ±μ μ 곡νμ§λ§, λ λ§μ μλ μμ
μ΄ νμν©λλ€.
import React from 'react';
class MyComponent extends React.Component {
shouldComponentUpdate(nextProps, nextState) {
return nextProps.data !== this.props.data;
}
render() {
console.log('MyComponent rendered');
return (
{this.props.data}
);
}
}
export default MyComponent;
shouldComponentUpdateλ μ¬μ ν μ¬μ© κ°λ₯νμ§λ§, PureComponentμ React.memoλ μΌλ°μ μΌλ‘ λ¨μμ±κ³Ό μ¬μ© νΈμμ± λλ¬Έμ μ νΈλ©λλ€.
3. useCallback
useCallbackμ ν¨μλ₯Ό λ©λͺ¨μ΄μ μ΄μ
νλ React ν
μ
λλ€. μ΄λ μμ‘΄μ± μ€ νλκ° λ³κ²½λ κ²½μ°μλ§ λ³κ²½λλ λ©λͺ¨μ΄μ μ΄μ
λ λ²μ μ ν¨μλ₯Ό λ°νν©λλ€. μ΄λ μ½λ°±μ λ©λͺ¨μ΄μ μ΄μ
λ μ»΄ν¬λνΈμ propsλ‘ μ λ¬ν λ νΉν μ μ©ν©λλ€.
λ€μ μμλ₯Ό μ΄ν΄λ³΄μΈμ:
import React, { useState, useCallback, memo } from 'react';
const MyComponent = (props) => {
console.log('MyComponent rendered');
return (
);
};
const MemoizedComponent = memo(MyComponent);
const App = () => {
const [count, setCount] = useState(0);
const handleClick = useCallback(() => {
setCount(count + 1);
}, [count]);
return (
Count: {count}
);
};
export default App;
μ΄ μμμμ useCallbackμ handleClick ν¨μκ° count μνκ° λ³κ²½λ λλ§ λ³κ²½λλλ‘ λ³΄μ₯ν©λλ€. useCallbackμ΄ μμΌλ©΄ Appμ΄ λ λλ§λ λλ§λ€ μλ‘μ΄ ν¨μκ° μμ±λμ΄ MemoizedComponentκ° λΆνμνκ² λ€μ λ λλ§λ©λλ€.
4. useMemo
useMemoλ κ°μ λ©λͺ¨μ΄μ μ΄μ
νλ React ν
μ
λλ€. μ΄λ μμ‘΄μ± μ€ νλκ° λ³κ²½λ κ²½μ°μλ§ λ³κ²½λλ λ©λͺ¨μ΄μ μ΄μ
λ κ°μ λ°νν©λλ€. μ΄λ λͺ¨λ λ λλ§μμ λ€μ μ€νν νμκ° μλ λΉμ©μ΄ λ§μ΄ λλ κ³μ°μ νΌνλ λ° μ μ©ν©λλ€.
import React, { useState, useMemo } from 'react';
const App = () => {
const [input, setInput] = useState('');
const expensiveCalculation = (str) => {
console.log('Calculating...');
let result = 0;
for (let i = 0; i < str.length * 1000000; i++) {
result++;
}
return result;
};
const memoizedResult = useMemo(() => expensiveCalculation(input), [input]);
return (
setInput(e.target.value)} />
Result: {memoizedResult}
);
};
export default App;
μ΄ μμμμ useMemoλ expensiveCalculation ν¨μκ° input μνκ° λ³κ²½λ λλ§ νΈμΆλλλ‘ λ³΄μ₯ν©λλ€. μ΄λ λͺ¨λ λ λλ§μμ κ³μ°μ΄ λ€μ μ€νλλ κ²μ λ°©μ§νμ¬ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
μ μ μ ν리μΌμ΄μ μ μν μ€μ μμ
React.memoμ κ΄λ ¨ κΈ°μ μ΄ μ μ μ ν리μΌμ΄μ
μ μ΄λ»κ² μ μ©λ μ μλμ§ λͺ κ°μ§ μ€μ μ¬λ‘λ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€:
1. μΈμ΄ μ νκΈ°
μΈμ΄ μ νκΈ° μ»΄ν¬λνΈλ μ’
μ’
μ¬μ© κ°λ₯ν μΈμ΄ λͺ©λ‘μ λ λλ§ν©λλ€. μ΄ λͺ©λ‘μ μλμ μΌλ‘ μ μ μΌ μ μμΌλ©°, μμ£Ό λ³κ²½λμ§ μμ΅λλ€. React.memoλ₯Ό μ¬μ©νλ©΄ μ ν리μΌμ΄μ
μ λ€λ₯Έ λΆλΆμ΄ μ
λ°μ΄νΈλ λ μΈμ΄ μ νκΈ°κ° λΆνμνκ² λ€μ λ λλ§λλ κ²μ λ°©μ§ν μ μμ΅λλ€.
import React, { memo } from 'react';
const LanguageItem = ({ language, onSelect }) => {
console.log(`LanguageItem ${language} rendered`);
return (
onSelect(language)}>{language}
);
};
const MemoizedLanguageItem = memo(LanguageItem);
const LanguageSelector = ({ languages, onSelect }) => {
return (
{languages.map((language) => (
))}
);
};
export default LanguageSelector;
μ΄ μμμμ MemoizedLanguageItemμ language λλ onSelect propμ΄ λ³κ²½λ κ²½μ°μλ§ λ€μ λ λλ§λ©λλ€. μ΄λ μΈμ΄ λͺ©λ‘μ΄ κΈΈκ±°λ onSelect νΈλ€λ¬κ° 볡μ‘ν κ²½μ° νΉν μ μ©ν μ μμ΅λλ€.
2. ν΅ν λ³νκΈ°
ν΅ν λ³νκΈ° μ»΄ν¬λνΈλ ν΅ν λͺ©λ‘κ³Ό νμ¨μ νμν μ μμ΅λλ€. νμ¨μ μ£ΌκΈ°μ μΌλ‘ μ
λ°μ΄νΈλ μ μμ§λ§, ν΅ν λͺ©λ‘μ μλμ μΌλ‘ μμ μ μΌ μ μμ΅λλ€. React.memoλ₯Ό μ¬μ©νλ©΄ νμ¨μ΄ μ
λ°μ΄νΈλ λ ν΅ν λͺ©λ‘μ΄ λΆνμνκ² λ€μ λ λλ§λλ κ²μ λ°©μ§ν μ μμ΅λλ€.
import React, { memo } from 'react';
const CurrencyItem = ({ currency, rate, onSelect }) => {
console.log(`CurrencyItem ${currency} rendered`);
return (
onSelect(currency)}>{currency} - {rate}
);
};
const MemoizedCurrencyItem = memo(CurrencyItem);
const CurrencyConverter = ({ currencies, onSelect }) => {
return (
{Object.entries(currencies).map(([currency, rate]) => (
))}
);
};
export default CurrencyConverter;
μ΄ μμμμ MemoizedCurrencyItemμ currency, rate λλ onSelect propμ΄ λ³κ²½λ κ²½μ°μλ§ λ€μ λ λλ§λ©λλ€. μ΄λ ν΅ν λͺ©λ‘μ΄ κΈΈκ±°λ νμ¨ μ
λ°μ΄νΈκ° λΉλ²ν κ²½μ° μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
3. μ¬μ©μ νλ‘ν νμ
μ¬μ©μ νλ‘νμ νμνλ κ²μ μ΄λ¦, νλ‘ν μ¬μ§, κ·Έλ¦¬κ³ λ°μ΄μ€μ κ°μ μ μ μΈ μ 보λ₯Ό 보μ¬μ£Όλ κ²μ ν¬ν¨ν©λλ€. \`React.memo\`λ₯Ό μ¬μ©νλ©΄ μ¬μ©μ λ°μ΄ν°κ° μ€μ λ‘ λ³κ²½λ λλ§ μ»΄ν¬λνΈκ° λ€μ λ λλ§λκ³ , λΆλͺ¨ μ»΄ν¬λνΈκ° μ λ°μ΄νΈλ λλ§λ€ λ λλ§λμ§ μλλ‘ ν©λλ€.
import React, { memo } from 'react';
const UserProfile = ({ user }) => {
console.log('UserProfile rendered');
return (
{user.name}
{user.bio}
);
};
export default memo(UserProfile);
μ΄λ \`UserProfile\`μ΄ μ¬μ©μ λ°μ΄ν° μμ²΄κ° μμ£Ό λ³κ²½λμ§ μλ ν¬κ³ μμ£Ό μ λ°μ΄νΈλλ λμ보λλ μ ν리μΌμ΄μ μ μΌλΆμΈ κ²½μ° νΉν μ μ©ν©λλ€.
μΌλ°μ μΈ ν¨μ κ³Ό νΌνλ λ°©λ²
React.memoλ κ·μ€ν μ΅μ ν λꡬμ΄μ§λ§, μΌλ°μ μΈ ν¨μ κ³Ό μ΄λ₯Ό νΌνλ λ°©λ²μ μλ κ²μ΄ μ€μν©λλ€:
- κ³Όλν λ©λͺ¨μ΄μ μ΄μ
:
React.memoλ₯Ό 무λΆλ³νκ² μ¬μ©νλ©΄ μμ λΉκ΅ μ체μ λΉμ©μ΄ λ°μνμ¬ μ€νλ € μ±λ₯μ μ νμν¬ μ μμ΅λλ€. λ©λͺ¨μ΄μ μ΄μ μ ν΅ν΄ μ΄μ μ μ»μ κ°λ₯μ±μ΄ μλ μ»΄ν¬λνΈλ§ λ©λͺ¨μ΄μ μ΄μ νμΈμ. - μλͺ»λ μμ‘΄μ± λ°°μ΄:
useCallbackκ³ΌuseMemoλ₯Ό μ¬μ©ν λ μ¬λ°λ₯Έ μμ‘΄μ± λ°°μ΄μ μ 곡ν΄μΌ ν©λλ€. μμ‘΄μ±μ μλ΅νκ±°λ λΆνμν μμ‘΄μ±μ ν¬ν¨νλ©΄ μμμΉ λͺ»ν λμκ³Ό μ±λ₯ λ¬Έμ κ° λ°μν μ μμ΅λλ€. - props λ³ν: propsλ₯Ό μ§μ λ³κ²½νλ κ²μ νΌνμΈμ. μ΄λ
React.memoμ μμ λΉκ΅λ₯Ό 무ν¨νν μ μμ΅λλ€. propsλ₯Ό μ λ°μ΄νΈν λλ νμ μλ‘μ΄ κ°μ²΄λ λ°°μ΄μ μμ±νμΈμ. - 볡μ‘ν λΉκ΅ λ‘μ§: μ¬μ©μ μ μ λΉκ΅ ν¨μμμ 볡μ‘ν λΉκ΅ λ‘μ§μ νΌνμΈμ. μ΄λ
React.memoμ μ±λ₯ μ΄μ μ μμν μ μμ΅λλ€. λΉκ΅ λ‘μ§μ κ°λ₯ν ν κ°λ¨νκ³ ν¨μ¨μ μΌλ‘ μ μ§νμΈμ.
μ ν리μΌμ΄μ νλ‘νμΌλ§
React.memoκ° μ€μ λ‘ μ±λ₯μ ν₯μμν€λμ§ μ¬λΆλ₯Ό νλ¨νλ κ°μ₯ μ’μ λ°©λ²μ μ ν리μΌμ΄μ
μ νλ‘νμΌλ§νλ κ²μ
λλ€. Reactλ React DevTools Profiler λ° React.Profiler APIλ₯Ό ν¬ν¨νμ¬ νλ‘νμΌλ§μ μν μ¬λ¬ λꡬλ₯Ό μ 곡ν©λλ€.
React DevTools Profilerλ₯Ό μ¬μ©νλ©΄ μ ν리μΌμ΄μ
μ μ±λ₯ μΆμ μ κΈ°λ‘νκ³ μμ£Ό λ€μ λ λλ§λλ μ»΄ν¬λνΈλ₯Ό μλ³ν μ μμ΅λλ€. React.Profiler APIλ₯Ό μ¬μ©νλ©΄ νΉμ μ»΄ν¬λνΈμ λ λλ§ μκ°μ νλ‘κ·Έλλ° λ°©μμΌλ‘ μΈ‘μ ν μ μμ΅λλ€.
μ ν리μΌμ΄μ
μ νλ‘νμΌλ§ν¨μΌλ‘μ¨ λ©λͺ¨μ΄μ μ΄μ
μΌλ‘λΆν° κ°μ₯ ν° μ΄μ μ μ»μ μ μλ μ»΄ν¬λνΈλ₯Ό μλ³νκ³ React.memoκ° μ€μ λ‘ μ±λ₯μ ν₯μμν€κ³ μλμ§ νμΈν μ μμ΅λλ€.
κ²°λ‘
React.memoλ React μ»΄ν¬λνΈ μ±λ₯μ μ΅μ ννλ κ°λ ₯ν λꡬμ
λλ€. λΆνμν λ€μ λ λλ§μ λ°©μ§νμ¬ μ ν리μΌμ΄μ
μ μλμ λ°μμ±μ ν₯μμν€κ³ λ λμ μ¬μ©μ κ²½νμ μ 곡ν μ μμ΅λλ€. κ·Έλ¬λ React.memoλ₯Ό μ μ€νκ² μ¬μ©νκ³ , μ€μ λ‘ μ±λ₯μ ν₯μμν€λμ§ νμΈνκΈ° μν΄ μ ν리μΌμ΄μ
μ νλ‘νμΌλ§νλ κ²μ΄ μ€μν©λλ€.
μ΄ λΈλ‘κ·Έ κ²μλ¬Όμμ λ
Όμλ κ°λ
κ³Ό κΈ°μ μ μ΄ν΄ν¨μΌλ‘μ¨ React.memo λ° κ΄λ ¨ κΈ°μ μ ν¨κ³Όμ μΌλ‘ μ¬μ©νμ¬ μ μΈκ³ μ¬μ©μλ₯Ό μν κ³ μ±λ₯ React μ ν리μΌμ΄μ
μ ꡬμΆνκ³ , μ ν리μΌμ΄μ
μ΄ μ μΈκ³ μ¬μ©μμκ² λΉ λ₯΄κ³ λ°μμ±μ΄ λ°μ΄λλλ‘ λ³΄μ₯ν μ μμ΅λλ€.
React μ ν리μΌμ΄μ μ μ΅μ νν λ λ€νΈμν¬ μ§μ° μκ° λ° μ₯μΉ κΈ°λ₯κ³Ό κ°μ μ μ μμλ₯Ό κ³ λ €ν΄μΌ ν¨μ κΈ°μ΅νμμμ€. μ±λ₯κ³Ό μ κ·Όμ±μ μ€μ μ λ μΌλ‘μ¨ μμΉλ μ₯μΉμ κ΄κ³μμ΄ λͺ¨λ μ¬μ©μμκ² νλ₯ν κ²½νμ μ 곡νλ μ ν리μΌμ΄μ μ λ§λ€ μ μμ΅λλ€.