[TECH-QA] ํ›…์œผ๋กœ ๋ถ„๋ฆฌํ•  ์ด์œ ๊ฐ€ ์žˆ์„๊นŒ?

์ปค์Šคํ…€ ํ›…(Custom Hook)์œผ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ ์ƒํƒœ ๊ด€๋ฆฌ(useState), ๋ถ€์ˆ˜ ํšจ๊ณผ(useEffect), ๋˜๋Š” ๊ธฐํƒ€ ๋กœ์ง์„ ๋ณ„๋„์˜ ํ•จ์ˆ˜(์ปค์Šคํ…€ ํ›…)๋กœ ์ถ”์ถœํ•ด ์ปดํฌ๋„ŒํŠธ์™€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ปค์Šคํ…€ ํ›…์€ React์˜ ํ›…(useState, useEffect ๋“ฑ)์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ผ๋ฐ˜์ ์œผ๋กœ use๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ

UI ๋ Œ๋”๋ง๊ณผ ๊ธฐ๋Šฅ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜ ํ–ฅ์ƒ

  • ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์— ์ƒํƒœ ๊ด€๋ฆฌ์™€ UI ๋ Œ๋”๋ง ๋กœ์ง์ด ์„ž์—ฌ ์žˆ์œผ๋ฉด ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ  ์ฝ๊ธฐ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.
  • ํ›…์œผ๋กœ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๋Š” JSX์™€ UI ๋ Œ๋”๋ง์— ์ง‘์ค‘ํ•˜๊ณ , ๋กœ์ง์€ ๋ณ„๋„๋กœ ๊ด€๋ฆฌ๋˜์–ด ๊ฐ€๋…์„ฑ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

์žฌ์‚ฌ์šฉ์„ฑ

๋™์ผํ•œ ๋กœ์ง์„ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•  ๋•Œ

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

ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ

UI๋ Œ๋”๋ง๊ณผ ๊ธฐ๋Šฅ ๋กœ์ง์€ ๋ถ„๋ฆฌํ•˜์—ฌ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฒ€์ฆ ๊ฐ€๋Šฅ

  • ํ›…์€ ์ปดํฌ๋„ŒํŠธ์™€ ๋…๋ฆฝ์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. UI๋ฅผ ๋ Œ๋”๋งํ•˜์ง€ ์•Š๊ณ  ๋กœ์ง๋งŒ ๊ฒ€์ฆ ๊ฐ€๋Šฅ.
  • ์˜ˆ: useCounter ํ›…์„ ํ…Œ์ŠคํŠธํ•  ๋•Œ, ์นด์šดํŠธ ์ฆ๊ฐ€์™€ ํƒ€์ด๋จธ ๋™์ž‘์„ ๋ณ„๋„๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ๋ณ„๋กœ ๋ถ„๋ฆฌ

์ƒํƒœ ๊ด€๋ฆฌ

๋ฐ์ดํ„ฐ fetching

์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

์บก์Аํ™”

  • ์ƒํƒœ ๊ด€๋ฆฌ, ๋ฐ์ดํ„ฐ fetching, ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋“ฑ ํŠน์ • ๊ธฐ๋Šฅ(๊ด€์‹ฌ์‚ฌ)์„ ํ›…์œผ๋กœ ์บก์Аํ™”ํ•ด ์ปดํฌ๋„ŒํŠธ์˜ ์ฑ…์ž„์„ ์ค„์ž…๋‹ˆ๋‹ค.
  • ์ด๋Š” ์ฝ”๋“œ์˜ ๋ชจ๋“ˆํ™”์™€ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

๋ณต์žกํ•œ ๋กœ์ง ๊ด€๋ฆฌ

๋กœ์ง์„ ์ฒด๊ณ„์ ์œผ๋กœ ๊ตฌ์กฐํ™”

  • ๋กœ์ง์ด ๋ณต์žกํ• ์ˆ˜๋ก(์˜ˆ: ์—ฌ๋Ÿฌ useState, useEffect ์กฐํ•ฉ) ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์— ๋‘๋ฉด ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ํ›…์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋ฉด ๋กœ์ง์„ ์ฒด๊ณ„์ ์œผ๋กœ ๊ตฌ์กฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ธ์ œ ํ›…์œผ๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•˜๋‚˜?

  • ๋กœ์ง์ด ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ์—ฌ๋Ÿฌ ์ค„์˜ ์ฝ”๋“œ๋ฅผ ์ฐจ์ง€ํ•  ๋•Œ(์˜ˆ: useEffect์™€ useState๊ฐ€ ์กฐํ•ฉ๋œ ๊ฒฝ์šฐ).
  • ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ.
  • ํ…Œ์ŠคํŠธ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์„ ๋•Œ.
  • ํ˜„์žฌ ๋˜๋Š” ๋ฏธ๋ž˜์— ๋กœ์ง์„ ์žฌ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์„ ๋•Œ.
  • ์˜ˆ) ๋ฐ์ดํ„ฐ fetching, ํผ ๊ด€๋ฆฌ, ํƒ€์ด๋จธ, ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋“ฑ.

๋ถ„๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ฒฝ์šฐ?

  • ๋กœ์ง์ด ๋งค์šฐ ๋‹จ์ˆœํ•  ๋•Œ(์˜ˆ: ๋‹จ์ผ useState๋กœ ์ถฉ๋ถ„ํ•œ ๊ฒฝ์šฐ).
  • ๋กœ์ง์ด ํŠน์ • ์ปดํฌ๋„ŒํŠธ์— ๊ฐ•ํ•˜๊ฒŒ ์˜์กด์ ์ด๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ์„ฑ์ด ์ „ํ˜€ ์—†์„ ๋•Œ.
  • ์ถ”๊ฐ€ ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋กœ์ง์˜ ๋ณต์žก๋„์— ๋น„ํ•ด ํด ๋•Œ.
  • ์˜ˆ) const [isOpen, setIsOpen] = useState(false); ๊ฐ™์€ ๋‹จ์ˆœํ•œ ์ƒํƒœ ๊ด€๋ฆฌ.