# [[Custom Hooks]] ## πŸ“Œ Brief μ‹œ Custom HooksλŠ” React μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ°˜λ³΅λ˜λŠ” λ‘œμ§μ„ μΆ”μΆœν•˜μ—¬ μž¬μ‚¬μš©μ„±κ³Ό λͺ¨λ“ˆμ„±μ„ λ†’μ΄λŠ” 핡심적인 λ¦¬νŒ©ν† λ§ λ‹¨μœ„μž…λ‹ˆλ‹€ [1]. 주둜 데이터 패칭, 폼 처리, μ „μ—­ μƒνƒœ ꡬ독과 같은 곡톡 λ‘œμ§μ„ μΊ‘μŠν™”ν•˜λŠ” 데 μ‚¬μš©λ˜λ©°, λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ UI와 κ²©λ¦¬μ‹œμΌœ 독립적이고 λΉ λ₯Έ λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€ [1]. μŠ€μΌ€μΌλŸ¬λΈ”ν•œ ν”„λ‘œμ νŠΈ κ΅¬μ‘°μ—μ„œλŠ” λ³„λ„μ˜ 디렉토리에 κ΄€λ¦¬λ˜λ©°, μΌκ΄€λœ λͺ…λͺ… κ·œμΉ™μ„ 톡해 μ½”λ“œλ² μ΄μŠ€μ˜ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ„ 크게 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€ [2-4]. ## πŸ“– Core Content * **λ¦¬νŒ©ν† λ§ 및 λͺ¨λ“ˆμ„± ν–₯상:** μ΅œμ‹  React κ°œλ°œμ—μ„œ Custom Hook은 λ¦¬νŒ©ν† λ§μ˜ μ£Όμš” λ‹¨μœ„λ‘œ μž‘μš©ν•©λ‹ˆλ‹€ [1]. κ±°λŒ€ν•œ μ»΄ν¬λ„ŒνŠΈ 내뢀에 μžˆλŠ” λ³΅μž‘ν•œ 데이터 νŒ¨μΉ­μ΄λ‚˜ 폼 처리 λ‘œμ§μ„ `useFetch`, `useForm`κ³Ό 같은 Custom Hook으둜 μΆ”μΆœν•˜λ©΄, λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 UI μ»΄ν¬λ„ŒνŠΈλ‘œλΆ€ν„° μ™„μ „νžˆ λΆ„λ¦¬λ©λ‹ˆλ‹€ [1]. μ΄λŸ¬ν•œ κ²©λ¦¬λŠ” 느린 톡합 ν…ŒμŠ€νŠΈμ— μ˜μ‘΄ν•˜λŠ” λŒ€μ‹  λΉ λ₯΄κ³  고립된 λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•˜μ—¬ μ½”λ“œμ˜ λͺ¨λ“ˆμ„±κ³Ό ν…ŒμŠ€νŠΈ μš©μ΄μ„±μ„ κ·ΉλŒ€ν™”ν•©λ‹ˆλ‹€ [1]. * **DRY(Don't Repeat Yourself) μ›μΉ™μ˜ μ‹€μ²œ:** λ™μΌν•œ μ½”λ“œλ₯Ό λ°˜λ³΅ν•˜μ§€ λ§λΌλŠ” DRY 원칙을 React μ»΄ν¬λ„ŒνŠΈμ— μ μš©ν•˜λŠ” κ°€μž₯ λŒ€ν‘œμ μΈ 방법이 λ°”λ‘œ μž¬μ‚¬μš© κ°€λŠ₯ν•œ λ‘œμ§μ„ Custom Hookμ΄λ‚˜ κ³ μ°¨ μ»΄ν¬λ„ŒνŠΈ(HOC)둜 μΆ”μΆœν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€ [5, 6]. λ˜ν•œ, λ³΅μž‘ν•œ μƒνƒœ 관리λ₯Ό μœ„ν•΄ λ‹¨μˆœνžˆ `useState`λ₯Ό λ‚¨μš©ν•˜κΈ°λ³΄λ‹€λŠ” `useReducer`λ‚˜ Custom Hook을 ν™œμš©ν•˜μ—¬ μƒνƒœ 관리 λ‘œμ§μ„ κΉ”λ”ν•˜κ²Œ μœ μ§€ν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€ [7]. * **폴더 ꡬ쑰 (Folder Structure) λͺ¨λ²” 사둀:** ν™•μž₯ κ°€λŠ₯ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ•„ν‚€ν…μ²˜μ—μ„œ Custom Hook은 주둜 `src/hooks/` 폴더 내에 쀑앙 μ§‘μ€‘ν™”λ˜μ–΄ λ°°μΉ˜λ©λ‹ˆλ‹€ [2, 4]. 이 ν΄λ”μ—λŠ” `useAuth`, `useLocalStorage`, `useWindowSize`와 같이 μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈμ™€ 도메인에 걸쳐 μž¬μ‚¬μš©λ˜λŠ” νš‘λ‹¨ 관심사(Cross-cutting logic)듀이 μœ„μΉ˜ν•˜κ²Œ 되며, 이λ₯Ό 톡해 μ½”λ“œ μž¬μ‚¬μš©μ΄ μ΄‰μ§„λ˜κ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 둜직 관리가 μ‰¬μ›Œμ§‘λ‹ˆλ‹€ [2, 4]. * **λͺ…λͺ… κ·œμΉ™ (Naming Conventions):** 클린 μ½”λ“œμ™€ 일관성을 μœ„ν•΄ Custom Hook의 이름은 λ°˜λ“œμ‹œ `camelCase`둜 μž‘μ„±ν•΄μ•Ό ν•˜λ©°, `use` μ ‘λ‘μ‚¬λ‘œ μ‹œμž‘ν•˜μ—¬ ν›…μ΄λΌλŠ” λͺ©μ κ³Ό 정체λ₯Ό λͺ…ν™•νžˆ λ‚˜νƒ€λ‚΄μ•Ό ν•©λ‹ˆλ‹€ (예: `useAuthState`) [3, 8-10]. * **μ„±λŠ₯ μ΅œμ ν™” 고렀사항:** μ˜μ‘΄μ„±(dependencies)이 λ³€ν•˜μ§€ μ•ŠλŠ” μƒν™©μ—μ„œ μ„±λŠ₯을 μ΅œμ ν™”ν•˜κΈ° μœ„ν•΄, Context Providerλ‚˜ Custom Hook 자체λ₯Ό λ©”λͺ¨μ΄μ œμ΄μ…˜(memoizing)ν•˜λŠ” μ „λž΅μ΄ ν™œμš©λ˜κΈ°λ„ ν•©λ‹ˆλ‹€ [11]. ## πŸ”— Knowledge Connections - **Related Topics:** [[DRY Principle]], [[React Folder Structure]], [[Clean Code]], [[Naming Conventions]] - **Projects/Contexts:** [[React Refactoring]], [[Scalable Frontend Architecture]] - **Contradictions/Notes:** μ†ŒμŠ€ 내에 Custom Hookκ³Ό κ΄€λ ¨ν•œ νŠΉλ³„ν•œ λͺ¨μˆœμ μ€ λ°œκ²¬λ˜μ§€ μ•Šμ•˜μœΌλ©°, μ—¬λŸ¬ μΆœμ²˜μ—μ„œ κ³΅ν†΅μ μœΌλ‘œ 관심사 뢄리, μ½”λ“œ μž¬μ‚¬μš© 및 λ¦¬νŒ©ν† λ§μ„ μœ„ν•΄ Custom Hook의 적극적인 ν™œμš©μ„ ꢌμž₯ν•©λ‹ˆλ‹€. --- *Last updated: 2026-04-26*