๊ด€๋ฆฌ ๋ฉ”๋‰ด

Daehyunii's Dev-blog

์ปดํฌ๋„ŒํŠธ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ ๋ณธ๋ฌธ

๐Ÿ“š Language & CS knowledge/React

์ปดํฌ๋„ŒํŠธ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ

Daehyunii 2022. 12. 23. 02:44
๋ฆฌ์•กํŠธ ๋ผ์ดํ”„์‚ฌ์ดํด?
๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ์ด๋‹ค.

  ์‰ฝ๊ฒŒ ๋งํ•ด, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์†Œ๋ฉธ๋˜๋Š” ์ด๋ จ์˜ ๊ณผ์ •์„ ๋ผ์ดํ”„ ์‚ฌ์ดํด์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ฐธ๊ณ ๋กœ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ๋Š” ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” Hooks ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„์Šทํ•œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜๋Š” ์žˆ๋‹ค.

 

  ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฆฌ์•กํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋ฏ€๋กœ '์ด๋Ÿฐ ๊ฒƒ๋“ค์ด ์žˆ๊ตฌ๋‚˜'ํ•˜๊ณ  ๋Š๋ผ๊ณ  ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ๋น„์Šทํ•˜๊ฒŒ Hooks๋กœ ๋งŒ๋“ค์—ˆ๋Š”์ง€ ๋น„๊ตํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. ์˜ค๋Š˜์€ classํ˜• ์ปดํฌ๋„ŒํŠธ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ๋“ค์— ๋Œ€ํ•ด์„œ๋งŒ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

   ์šฐ์„  ๋ผ์ดํ”„์‚ฌ์ดํด์€ ์ด ์„ธ ๊ฐ€์ง€ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

1. ๋งˆ์šดํŠธ 

  DOM์ด ์ƒ์„ฑ๋˜๊ณ  ์›น ๋ธŒ๋ผ์šฐ์ €์ƒ์— ๋‚˜ํƒ€๋‚  ๋•Œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

2. ์—…๋ฐ์ดํŠธ

  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์—…๋ฐ์ดํŠธ๊ฐ€ ์ด๋ค„์ง€๋Š” ๋ฆฌ์•กํŠธ์—์„œ 4๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

  1. props๊ฐ€ ๋ฐ”๋€” ๋•Œ
  2. state๊ฐ€ ๋ฐ”๋€” ๋•Œ
  3. ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋  ๋•Œ
  4. this.forceUpdate๋กœ ๊ฐ•์ œ๋กœ ๋ Œ๋”๋ง์„ ํŠธ๋ฆฌ๊ฑฐํ•  ๋•Œ

์ด๋ ‡๊ฒŒ 4๊ฐ€์ง€ ๊ฒฝ์šฐ์— ์—…๋ฐ์ดํŠธ๊ฐ€ ์ด๋ค„์ง„๋‹ค. 

 

3. ์–ธ๋งˆ์šดํŠธ

  ์ปดํฌ๋„ŒํŠธ๋ฅผ DOM์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

์œ„ ๊ฐ๊ฐ์˜ ํ–‰์œ„๊ฐ€ ์ผ์–ด๋‚˜๋Š” ์‹œ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋“ค์ด ์กด์žฌํ•œ๋‹ค. ์šฐ์„  ํฐ ๊ทธ๋ฆผ์„ ํ†ตํ•ด ์ „์ฒด์ ์ธ ํ๋ฆผ์„ ์•Œ์•„๋ณด์ž.

๋ฆฌ์•กํŠธ class ๋ผ์ดํ”„์‚ฌ์ดํด

  ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์œ„์˜ ํ๋ฆ„์— ํ•ด๋‹นํ•˜๋Š” ์‹œ๊ธฐ์— ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๊ฒŒ ๋œ๋‹ค. ๋งŽ์€ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ๋“ค์ด ์กด์žฌํ•˜์ง€๋งŒ ๊ทธ ์ค‘์—์„œ๋„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์ค‘์š”ํ•œ ๋ฉ”์„œ๋“œ๋“ค์ด๋ผ๊ณ  ์ƒ๊ฐ๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ๋ฅผ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

(render ๋ฉ”์„œ๋“œ, constructor ๋ฉ”์„œ๋“œ๋Š” ์ƒ๋žตํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.)

 

1. componentDidMount ๋ฉ”์„œ๋“œ

  ์ด๊ฒƒ์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์ฒซ ๋ Œ๋”๋ง์„ ๋‹ค ๋งˆ์นœ ํ›„ ์‹คํ–‰๋œ๋‹ค. ์ด ์•ˆ์—์„œ๋Š” ๋‹ค๋ฅธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ ํ˜น์€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ์ด๋ฒคํŠธ ๋“ฑ๋ก, setTimeout, setInterval, ๋„คํŠธ์›Œํฌ ์š”์ฒญ๊ณผ ๊ฐ™์€ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋œ๋‹ค.

 

2. componentDidUpadate(prevProps, prevState, snapshot) ๋ฉ”์„œ๋“œ

  ์ด๊ฒƒ์€ ๋ Œ๋”๋ง์„ ์™„๋ฃŒํ•œ ํ›„ ์‹คํ–‰ํ•œ๋‹ค. ์ธ์ˆ˜๋กœ๋Š” prevProps, prevState, snapshot์„ ์ธ์ˆ˜๋กœ ๋ฐ›์œผ๋ฉด ๋‹จ์–ด์˜ ์˜๋ฏธ๋Œ€๋กœ ์ด์ „ props์™€ ์ด์ „ state๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋ฅผ ํ†ตํ•ด ์ด์ „์— ๊ฐ€์กŒ๋˜ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. snapshot์€ getSnapshotBeforeUpdate์—์„œ ๋ฐ˜ํ™˜ํ•œ ๊ฐ’์ด ์žˆ๋‹ค๋ฉด ์—ฌ๊ธฐ์„œ snapshot ๊ฐ’์„ ์ „๋‹ฌ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. 

 

3. componentWillUnmount ๋ฉ”์„œ๋“œ

  ์ด๊ฒƒ์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ DOm์—์„œ ์ œ๊ฑฐ๋˜๊ธฐ ์ง์ „์— ์‹คํ–‰๋œ๋‹ค. ์ด๋•Œ ๋“ฑ๋กํ•œ ์ด๋ฒคํŠธ, ํƒ€์ด๋จธ๊ฐ€ ์žˆ๋‹ค๋ฉด ์—ฌ๊ธฐ์„œ ์ œ๊ฑฐ ์ž‘์—…์„ ํ•ด์•ผ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

4. shouldComponentUpdate(nextProps, nextState) ๋ฉ”์„œ๋“œ

  ์ด๊ฒƒ์€ props ๋˜๋Š” state๋ฅผ ๋ณ€๊ฒฝํ–ˆ์„ ๋•Œ, ๋ฆฌ๋ Œ๋”๋ง์„ ์‹œ์ž‘ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ ๋ฉ”์„œ๋“œ๋Š” true ๋˜๋Š” false๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ๋”ฐ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์–ธ์ œ๋‚˜ true ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ฉ”์„œ๋“œ๋ฅผ ์„ค์ •ํ•˜์—ฌ false๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์—…๋ฐ์ดํŠธ ๊ณผ์ •์„ ์ค‘์ง€ํ•œ๋‹ค.

์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋˜๋Š” nextProps๋‚˜ nextState๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์ƒํƒœ์˜ ๊ฐ’๊ณผ ๋น„๊ตํ•˜์—ฌ ๋ณ€ํ™”๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” true๋ฅผ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•ด์ฃผ๋ฉด ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ตœ์ ํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

์ง€๊ธˆ๊นŒ์ง€ ๋Œ€ํ‘œ์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” class ์ปดํฌ๋„ŒํŠธ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฉ”์„œ๋“œ๋“ค์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋‹ค. ๋‚ด์šฉ์„ ์„ธ์„ธํ•˜๊ฒŒ ์•Œ๊ณ  ์™ธ์šฐ๋Š” ๋Š๋‚Œ๋ณด๋‹ค๋Š” ์ด๋Ÿฐ๊ฒŒ ์žˆ๋‹ค ์ •๋„๋กœ ์•Œ์•„๋‘๋ฉด ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™๋‹ค.(์ง€๊ธˆ ์™ธ์›Œ๋„ ์–ด์ฐจํ”ผ,,,๊นŒ๋จน๋Š”๋‹ค...๐Ÿ˜‚)