[๐Ÿ’ป ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE 44๊ธฐ] React ์‹ฌํ™” - React Hooks

JiEunยท2023๋…„ 5์›” 19์ผ
0
post-thumbnail

โœ”๏ธ ์‹œ์ž‘

์ด์ „ ํ•™์Šต์— ์ด์–ด useMemo, useCallback์— ๋Œ€ํ•ด ํ•™์Šตํ–ˆ๋‹ค.


โœ๏ธ ๋ฐฐ์šด ๊ฒƒ

Hook?

  • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ ๊ฐ’ ๋ฐ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฉ”์„œ๋“œ
  • function์œผ๋กœ๋งŒ React๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šคํ˜•(๊ตฌ ๋ฒ„์ „) ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.

Hook ์‚ฌ์šฉ ๊ทœ์น™

  • ๋ฆฌ์•กํŠธ ํ•จ์ˆ˜์˜ ์ตœ์ƒ์œ„์—์„œ๋งŒ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.
    - ๋ฐ˜๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ, ์ค‘์ฒฉ๋œ ํ•จ์ˆ˜ ๋‚ด์— ์ž‘์„ฑํ•  ๊ฒฝ์šฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฆฌ์•กํŠธ ํ•จ์ˆ˜ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•œ๋‹ค.
    - ๋‹ค๋ฅธ ์ผ๋ฐ˜ JavaScript ํ•จ์ˆ˜ ์•ˆ์—์„œ ํ˜ธ์ถœํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.

๋ Œ๋”๋ง ์ตœ์ ํ™”ํ•˜๋Š” Hook

์ปดํฌ๋„ŒํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง์ด ๋  ๋•Œ๋งˆ๋‹ค ๋ฆฌ๋ Œ๋”๋ง์„ ํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

๋„ˆ๋ฌด ์žฆ์€ ๋ฆฌ๋ Œ๋”๋ง์€ ์•ฑ์— ์ข‹์ง€ ์•Š์€ ์„ฑ๋Šฅ์„ ๋ผ์นœ๋‹ค.

useMamo

  • ํŠน์ • ๊ฐ’(value)์„ ์žฌ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. (๋ฐ˜๋ณต๋˜๋Š”)
  • ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์บ์‹œํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.
    - ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ ๋  ๋•Œ ๋งˆ๋‹ค ๊ณ„์‚ฐ๋˜๋Š” ๋Œ€์‹ , ์˜์กด์„ฑ ๋ฐฐ์—ด ๋‚ด์˜ ๊ฐ’๋“ค์ด ๋ณ€๊ฒฝ ๋  ๋•Œ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ฉ”๋ชจ์ œ์ด์…˜(MemoiZation)๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
//๊ธฐ๋ณธ ๋ฌธ๋ฒ•
const ๋ณ€์ˆ˜๋ช… = useMemo(ํ•จ์ˆ˜, ์˜์กด์„ฑ ๋ฐฐ์—ด)
//useMemo๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด importํ•ด์•ผํ•œ๋‹ค.
import { useMemo } from "react";

function Calculator({value}){
	//๊ธฐ์กด result๋ฅผ useMemo๋กœ ๊ฐ์‹ธ์ฃผ๋ฉด ๋œ๋‹ค.
    //const result = calculate(value);
	const result = useMemo(() => calculate(value), [value]);

	return (
    	<div>
			{result}
     	</div>
    )
}
  • value๊ฐ’์ด ๊ณ„์† ๋ณ€๊ฒฝ๋˜๋Š”๋ฐ ์•„๋‹Œ ๊ฒฝ์šฐ ํ•ด๋‹น ๊ฐ’์„ ์–ด๋”˜๊ฐ€์— ์ €์žฅ(๋ฉ”๋ชจ์ด์ œ์ด์…˜)ํ•ด ๋‘์—ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ๊บผ๋‚ด ์“ธ ์ˆ˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ useMemo๋กœ ๊ฐ์‹ธ์ฃผ๋ฉด ์ด์ „ ๊ตฌ์ถ•๋œ ๋ Œ๋”๋ง๊ณผ ์ƒˆ๋กœ ๊ตฌ์ถ•๋œ ๋ Œ๋”๋ง์„ ๋น„๊ตํ•ด value๊ฐ’์ด ๋™์ผํ•œ ๊ฒฝ์šฐ ์ด์ „ ๋ Œ๋”๋ง์˜ value๊ฐ’์„ ์žฌํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Memoization?

๊ธฐ์กด์— ์ˆ˜ํ–‰ํ•œ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•ด ๋‘๊ณ , ๋™์ผํ•œ ์ž…๋ ฅ์ด ๋“ค์–ด์˜ค๋ฉด ์žฌํ™œ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•

useMemo๋Š” ๋ณต์žกํ•œ ์—ฐ์‚ฐ์˜ ์ค‘๋ณต์„ ํ”ผํ•˜๊ณ  React ์•ฑ์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™” ์‹œํ‚จ๋‹ค.

useCallback

  • useCallback ๋˜ํ•œ useMemo์ฒ˜๋Ÿผ ๋ฉ”๋ชจ์ œ์ด์…˜ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • useCallback์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ ํ•จ์ˆ˜๊ฐ€ ์˜์กดํ•˜๋Š” ๊ฐ’๋“ค์ด ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ํ•œ ๊ธฐ์กด ํ•จ์ˆ˜๋ฅผ ๊ณ„์†ํ•ด์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ์–ด๋”˜๊ฐ€์— ํ•จ์ˆ˜๋ฅผ ๊บผ๋‚ด ํ˜ธ์ถœํ•œ๋‹ค.
    - ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ props๋กœ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด ์ค„ ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹๋‹ค.
//๊ธฐ๋ณธ ๋ฌธ๋ฒ•
const ๋ณ€์ˆ˜๋ช… = useCallback(ํ•จ์ˆ˜, ์˜์กด์„ฑ ๋ฐฐ์—ด)
//useCallback์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด importํ•ด์•ผํ•œ๋‹ค.
import { useCallback } from "react";

function Calculator({x, y}){
  	//๊ธฐ์กด add๋ฅผ useCallback์œผ๋กœ ๊ฐ์‹ธ์ฃผ๋ฉด ๋œ๋‹ค.
	//const add = () => x + y;
	const add = useCallback(() => x + y, [x, y]);

	return (
      <div>
		{add()}
      </div>
    )
}
  • x์™€ y๊ฐ’์ด ๋™์ผํ•˜๋‹ค๋ฉด ๋‹ค์Œ ๋ Œ๋”๋ง ํ•  ๋•Œ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•œ๋‹ค.

useMemo

  • ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์บ์‹œํ•œ๋‹ค.
  • ๊ณ„์‚ฐ๋Ÿ‰์ด ๋งŽ์€ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์œ ์šฉํ•˜๋‹ค.

useCallback

  • ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ์บ์‹œํ•œ๋‹ค.
  • ์ž์ฃผ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋‚˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š”๋ฐ ์œ ์šฉํ•˜๋‹ค.

๐Ÿ“ ๋งˆ์น˜๋ฉฐ

useMemo, useCallback ๋‘ ๊ฐ€์ง€ Hook์€ ๋ Œ๋”๋ง์„ ์ตœ์ ํ™”ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.
๋‘˜ ๋‹ค ๋น„์Šทํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์–ด๋Š ๊ฒƒ์„ ์žฌ์‚ฌ์šฉํ•˜๋Š”์ง€๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ์ ์„ ์ฐธ๊ณ ํ•ด
์ดํ›„ ํ”„๋กœ์ ํŠธ๋‚˜ ํ˜„์—…์—์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

0๊ฐœ์˜ ๋Œ“๊ธ€