Daily/Today I Learned

22.07.27_TIL

ํ˜ธ๋ฐ€์ด 2022. 7. 27. 00:11

๐Ÿ“Œ ๋ฆฌ์•กํŠธ ํ›…์— ๋Œ€ํ•ด์„œ ํ•™์Šต์„ ํ•˜๋Š”๋ฐ ์‚ฌ์‹ค ์•ž์„  ๊ณผ์ •์—์„œ ๋ฆฌ์•กํŠธ ํ›…์„ ๊ฐœ์ธ์ ์œผ๋กœ ์ฐพ์•„์„œ ํ•™์Šตํ•œ ๋’ค ์‚ฌ์šฉ์„ ํ•˜๊ณ  ์žˆ์—ˆ๊ธฐ์— ์กฐ๊ธˆ๋” ์ •ํ™•ํžˆ ์งš๊ณ  ๊ฐ€๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

๐Ÿ“— ์˜ค๋Š˜ ํ•™์Šตํ•œ ๋‚ด์šฉ

Virtual DOM

  • ๊ฐ€์ƒ์˜ DOM ๊ฐ์ฒด (์ถ”์ƒํ™”๋œ JavaScript ๊ฐ์ฒด์˜ ํ˜•ํƒœ)
  • React๋Š” ์‹ค์ œ DOM ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜์—ฌ ์กฐ์ž‘ํ•˜๋Š” ๋Œ€์‹  ๊ฐ€์ƒ์˜ DOM ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜์—ฌ ๋ณ€ํ™” ์ „๊ณผ ๋ณ€ํ™” ํ›„๋ฅผ ๋น„๊ตํ•˜๊ณ  ๋ฐ”๋€ ๋ถ€๋ถ„์„ ์ ์šฉํ•œ๋‹ค.

Real DOM (DOM, Document Object Model)

  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋งŒ๋“  ๊ฐ์ฒด ๋ชจ๋ธ
  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ JavaScript์™€ ๊ฐ™์€ ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด๋กœ html ํƒœ๊ทธ๋“ค์— ์ ‘๊ทผํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํƒœ๊ทธ๋“ค์„ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๊ฐ์ฒดํ™” ์‹œํ‚จ ๊ฒƒ์ด๋‹ค.

DOM์˜ ์กฐ์ž‘ ์†๋„๊ฐ€ ๋Š๋ ค์ง€๋Š” ์ด์œ 

  • DOM์˜ ์กฐ์ž‘์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋œ ์š”์†Œ์™€ ๊ทธ์˜ ์ž์‹ ์š”์†Œ๋“ค์— ์˜ํ•ด DOM ํŠธ๋ฆฌ๋ฅด ์žฌ๊ตฌ์ถ•ํ•จ์œผ๋กœ์จ ์žฌ๋žœ๋”๋ง ๊ณผ์ •์„ ๊ฑฐ์ณ UI๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์•ผํ•œ๋‹ค.
  • ์žฌ์—ฐ์‚ฐ์„ ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋Š๋ ค์ง„๋‹ค.
  • ๊ฐ€์ƒ DOM์„ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋ฐ˜์ ์ธ DOM ์กฐ์ž‘๋ณด๋‹ค ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

React Diffing Algorithm

  • ์š”์†Œ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ๋ฐ”๊พธ๋‹ค๋ณด๋ฉด ์ˆ˜์‹ญ๋งŒ๋ฒˆ์˜ ๋น„๊ต๊ฐ€ ์ด๋ฃจ์–ด์ ธ์•ผํ•˜๊ณ , ์ด ์ž‘์—…์€ ์ƒ๋‹นํžˆ ๋น„์‹ธ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฆฌ์•กํŠธ์—์„œ๋Š” ๋‘ ๊ฐœ์˜ ํŠธ๋ฆฌ๊ฐ€ ๋‚˜์˜จ๋‹ค๋Š” ์ ๊ณผ ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋“ค์ด key props๋ฅผ ํ†ตํ•ด ๋ฐ”๋€Œ์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์œผ๋กœ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด๋‚˜์˜จ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

React Diffing Algorithm ๋™์ž‘ ์›๋ฆฌ

  1. ๊ฐ๊ธฐ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์š”์†Œ๋Š” ๋‹ค๋ฅธ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•  ๊ฒƒ์ด๋‹ค.
  2. ๊ฐœ๋ฐœ์ž๋Š” ํ‚ค ์†Œํ’ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ๋ Œ๋”๋ง์—์„œ ์–ด๋–ค ์ž์‹ ์š”์†Œ๊ฐ€ ์•ˆ์ •์ ์ผ ์ˆ˜ ์žˆ๋Š” ํžŒํŠธ๋ฅผ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

React๊ฐ€ DOM ํŠธ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ๊ธฐ์กด์˜ ๊ฐ€์ƒ DOM ํŠธ๋ฆฌ์™€ ์ƒˆ๋กญ๊ฒŒ ๋ณ€๊ฒฝ๋œ ๊ฐ€์ƒ DOM ํŠธ๋ฆฌ๋ฅผ ๋น„๊ตํ•  ๋•Œ, ํŠธ๋ฆฌ์˜ ๋ ˆ๋ฒจ ์ˆœ์„œ๋Œ€๋กœ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)์˜ ์ผ์ข…์ด๋‹ค.

Class Component

  • ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง€๊ณ , ์ปดํฌ๋„ŒํŠธ ์‚ฌ์ด์—์„œ ์ƒํƒœ ๋กœ์ง์„ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด์žˆ๋‹ค.
  • React์˜ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” JavaScript์˜ this ํ‚ค์›Œ๋“œ๊ฐ€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ์•Œ์•„์•ผํ•˜๋ฉฐ, ๋ฌธ๋ฒ•์„ ์ •ํ™•ํžˆ ์•Œ์ง€ ๋ชปํ•˜๋ฉด ๋™์ž‘ ๋ฐฉ์‹ ์ž์ฒด๋ฅผ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์œ„์™€ ๊ฐ™์€ ๋ฌธ์ œ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๋กœ ์ด๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜์˜€์ง€๋งŒ ์ƒํƒœ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค์ด ๋ฏธ์ง„ํ•œ ๋ถ€๋ถ„์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๊ฒƒ์ด ๋ฐ”๋กœ Hook์ด๋ผ๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

Function Component

  • ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์— ๋น„ํ•ด ํ›จ์”ฌ ๋” ์ง๊ด€์ ์ด๊ณ , ๋ณด๊ธฐ ์‰ฝ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.
  • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ๋ Œ๋”๋ง์ด๋˜๋ฉด ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ , ๋ชจ๋“  ๋‚ด๋ถ€ ๋ณ€์ˆ˜๊ฐ€ ์ดˆ๊ธฐํ™” ๋œ๋‹ค.

Hook์ด๋ž€?

  • React 16.8์— ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ์ด๋‹ค.
  • class๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ state์™€ ๋‹ค๋ฅธ React์˜ ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
  • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ ๊ฐ’ ๋ฐ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

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

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

useMemo

  • ํŠน์ • ๊ฐ’(value)๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Hook
  • ๋ณต์žกํ•œ ์—ฐ์‚ฐ์˜ ์ค‘๋ณต์„ ํ”ผํ•˜๊ณ  React ์•ฑ์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•œ๋‹ค.
  • ๋ Œ๋”๋ง ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ’์ด ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด ๊ฐ’์„ ์–ด๋”˜๊ฐ€์— ์ €์žฅ ํ•ด๋’€๋‹ค๊ฐ€ ๋‹ค์‹œ ๊บผ๋‚ด์„œ ์“ธ ์ˆ˜ ์žˆ๊ฒŒํ•œ๋‹ค. (๋ฉ”๋ชจ์ด์ œ์ด์…˜)
  • Memoization
    • ์ˆ˜ํ–‰ํ•œ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ์„ ํ•ด๋‘๊ณ , ๋™์ผํ•œ ์ž…๋ ฅ์ด ๋“ค์–ด์˜ค๋ฉด ์žฌํ™œ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•
  • ๊ตฌ์กฐ
    • ์ฒซ ๋ฒˆ์งธ ์ธ์ž ์ฝœ๋ฐฑ ํ•จ์ˆ˜: ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ return ํ•˜๋Š” ๊ฐ’์ด useMemo๊ฐ€ return ํ•˜๋Š” ๊ฐ’์ด๋‹ค.
    • ๋‘๋ฒˆ์งธ ์ธ์ž ๋ฐฐ์—ด(์˜์กด์„ฑ ๋ฐฐ์—ด): ๋ฐฐ์—ด์•ˆ์— ์š”์†Œ์˜ ๊ฐ’์ด ์—…๋ฐ์ดํŠธ ๋ ๋•Œ๋งŒ ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค. 
      ๋นˆ ๋ฐฐ์—ด์ผ ๊ฒฝ์šฐ ์ตœ์ดˆ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰๋œ๋‹ค.
const value = useMemo(() => {
	return calculate();
}, [item]);

useCallback

  • ํ•จ์ˆ˜์˜ ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” Hook
  • ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ props๋กœ ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ด์ค„ ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹๋‹ค.
  • ์ฐธ์กฐ ๋™๋“ฑ์„ฑ์— ์˜์กดํ•œ๋‹ค.
  • ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ Hook์ด๋‹ค.
  • ์ธ์ž๋กœ ์ „๋‹ฌ๋ฐ›์€ ํ•จ์ˆ˜ ๊ทธ ์ž์ฒด๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ํ•œ๋‹ค.
const calculate = useCallback((num) => {
	return num + 1;
}, [item])

๐Ÿ“˜ ์ถ”๊ฐ€๋กœ ๊ณต๋ถ€ํ•  ๋‚ด์šฉ

[udemy] React ์™„๋ฒฝ ๊ฐ€์ด๋“œ ๊ฐ•์˜ ๋ณด๊ธฐ (๋งค์ผ ์กฐ๊ธˆ์”ฉ ์ด๋ผ๋„ ๊พธ์ค€ํžˆ ๋“ฃ๊ธฐ)

Study์›๊ณผ ํ•จ๊ป˜ ์ง„ํ–‰์ค‘์ธ ํ”„๋กœ์ ํŠธ ๊ตฌํ˜„

  • Authentication

๐Ÿ“ ์ค‘์š”ํ•œ ๋‚ด์šฉ

  • ๊ฐ€์ƒ DOM
  • React Diffing Algorithm
  • ์ปดํฌ๋„ŒํŠธ ์ตœ์ ํ™”
  • useMemo
  • useCallback

'Daily > Today I Learned' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

22.08.01_TIL  (0) 2022.08.01
22.07.28_TIL  (0) 2022.07.28
22.07.26_TIL  (0) 2022.07.26
22.07.25_TIL  (0) 2022.07.25
22.07.22_TIL  (0) 2022.07.22