React๋ฅผ ์“ฐ๋‹ค ๋ณด๋ฉด useEffect๋Š” ์ง„์งœ ๋„ˆ๋ฌด ์ž์ฃผ ๋งˆ์ฃผ์น˜๋Š”๋ฐ,
๊ทธ๋งŒํผ ์“ฐ์ž„์ƒˆ๋„ ๋งŽ๊ณ , ๋˜ ์ž˜๋ชป ์“ฐ๋ฉด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฆฌ๋ Œ๋”๋ง์ด ์ƒ๊ธฐ๊ฑฐ๋‚˜ ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์ง€๊ธฐ๋„ ํ•˜๋”๋ผ.
๊ทธ๋ž˜์„œ ์ด๋ฒˆ์— ์ œ๋Œ€๋กœ ํ•œ๋ฒˆ ์ •๋ฆฌํ•ด๋ดค๋‹ค.


โœ… useEffect๋ž€?

์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋œ ์ดํ›„์— ์‹คํ–‰๋˜๋Š” ํ›….
ํ”ํžˆ ๋งํ•˜๋Š” ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด API ํ˜ธ์ถœ, ํƒ€์ด๋จธ ์„ค์ •, ์ด๋ฒคํŠธ ๋“ฑ๋ก ๊ฐ™์€ ์ž‘์—…๋“ค์ด ๋Œ€ํ‘œ์ ์ด๋‹ค.

import { useEffect } from 'react';

useEffect(() => {
  console.log('์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ๋  ๋•Œ ์‹คํ–‰๋œ๋‹ค!');

  return () => {
    console.log('์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ธ๋งˆ์šดํŠธ๋  ๋•Œ ์ •๋ฆฌ๋œ๋‹ค!');
  };
}, []);

โœ… ์˜์กด์„ฑ ๋ฐฐ์—ด์ด ํ•ต์‹ฌ์ด๋‹ค

useEffect์˜ ๋‘ ๋ฒˆ์งธ ์ธ์ž []๊ฐ€ ์ง„์งœ ํ•ต์‹ฌ์ด๋‹ค.
์˜์กด์„ฑ ๋ฐฐ์—ด์— ๋”ฐ๋ผ์„œ ์‹คํ–‰ ํƒ€์ด๋ฐ์ด ์™„์ „ํžˆ ๋‹ฌ๋ผ์ง„๋‹ค.

์˜์กด์„ฑ ๋ฐฐ์—ด์‹คํ–‰ ์‹œ์ 
์—†์Œ๋งค๋ฒˆ ๋ฆฌ๋ Œ๋”๋ง๋  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋จ
[]์ฒ˜์Œ ๋งˆ์šดํŠธ๋  ๋•Œ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰
[๊ฐ’1, ๊ฐ’2]ํ•ด๋‹น ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ ์‹คํ–‰๋จ
useEffect(() => {
  console.log('count๊ฐ€ ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋จ');
}, [count]);

โœ… ์ •๋ฆฌ(clean-up)๋„ ์ค‘์š”ํ•˜๋‹ค

ํŠนํžˆ ํƒ€์ด๋จธ๋‚˜ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์“ธ ๋•Œ๋Š” ๊ผญ ์ •๋ฆฌ(clean-up)๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
์•ˆ ๊ทธ๋Ÿฌ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋‚˜ ์ด์ƒํ•œ ๋ฒ„๊ทธ ์ƒ๊น€...

useEffect(() => {
  const interval = setInterval(() => {
    console.log('3์ดˆ๋งˆ๋‹ค ์‹คํ–‰!');
  }, 3000);

  return () => {
    clearInterval(interval); // ๊ผญ ์ •๋ฆฌํ•ด์ฃผ์ž!
  };
}, []);

โœ… ์ฃผ๋กœ ์ด๋Ÿฐ ๊ณณ์—์„œ ๋งŽ์ด ์”€

  • API ์š”์ฒญ
  • setTimeout / setInterval
  • ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—ฐ๋™ (์˜ˆ: ์ฐจํŠธ, ์ง€๋„ ๋“ฑ)
  • window ์ด๋ฒคํŠธ ๋“ฑ๋ก (resize, scroll ๋“ฑ)
  • ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€ ์ฝ๊ธฐ

๐Ÿ“ ๋‚ด๊ฐ€ ๋А๋‚€ ์ 

์ฒ˜์Œ์—” useEffect๋Š” ๊ทธ๋ƒฅ ์จ์•ผ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์€ ๋А๋‚Œ์ด์—ˆ๋Š”๋ฐ,
์ด์ œ๋Š” ์ด ํ›…์ด ์™œ ํ•„์š”ํ•œ์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ธ์ œ ์–ด๋–ป๊ฒŒ ์‹คํ–‰๋˜๋Š”์ง€ ์กฐ๊ธˆ ๊ฐ์ด ์˜จ๋‹ค.
ํŠนํžˆ ์˜์กด์„ฑ ๋ฐฐ์—ด์„ ์ž˜๋ชป ๋„ฃ์œผ๋ฉด ๋ฌดํ•œ ๋ Œ๋”๋ง ๋‚˜์˜ค๋Š” ๊ฒƒ๋„ ์ด์ œ๋Š” ์กฐ์‹ฌํ•  ์ˆ˜ ์žˆ์„ ๋“ฏ!


"ํ™”๋ฉด์— ๋ณด์—ฌ์ง€๋Š” ๊ฒŒ ์ „๋ถ€๊ฐ€ ์•„๋‹ˆ๋‹ค. ๊ทธ ๋’ค์—์„œ ๋ฒŒ์–ด์ง€๋Š” ์ผ๋“ค์„ ๋‹ค๋ฃฐ ๋• useEffect."

profile
๊ฐœ๋ฐœ์ž๋กœ ์ทจ์—…์„ ์ค€๋น„ ์ค‘ ์ด๋ฉฐ, ์—ด์‹ฌํžˆ ๊ณต๋ถ€ ์ค‘ ์ž…๋‹ˆ๋‹ค!

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