# [[React Hooks]] ## πŸ“Œ Brief Summary React HooksλŠ” ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ—μ„œ μƒνƒœ(state)와 μ‚¬μ΄λ“œ μ΄νŽ™νŠΈ(side effects)λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ κ°•λ ₯ν•œ νŒ¨λŸ¬λ‹€μž„μž…λ‹ˆλ‹€ [1]. λŒ€κ·œλͺ¨ ν™•μž₯ κ°€λŠ₯ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜(scalable apps)μ—μ„œ HooksλŠ” 데이터 μ ‘κ·Ό, 도메인 κ·œμΉ™ 및 λΆ€μˆ˜ 효과 λ‘œμ§μ„ μΊ‘μŠν™”ν•˜λŠ” 핡심 μ•„ν‚€ν…μ²˜ λΉŒλ”© 블둝 역할을 ν•©λ‹ˆλ‹€ [2]. 곡톡 λ‘œμ§μ„ μ»€μŠ€ν…€ ν›…(Custom Hooks)으둜 μΆ”μΆœν•¨μœΌλ‘œμ¨ DRY(Don't Repeat Yourself) 같은 클린 μ½”λ“œ 원칙을 μ€€μˆ˜ν•˜κ³ , UI와 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ λΆ„λ¦¬ν•˜μ—¬ μ½”λ“œμ˜ λͺ¨λ“ˆμ„±κ³Ό ν…ŒμŠ€νŠΈ μš©μ΄μ„±μ„ κ·ΉλŒ€ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [3, 4]. ## πŸ“– Core Content * **μ•„ν‚€ν…μ²˜ 및 폴더 ꡬ쑰(Folder Structure)μ—μ„œμ˜ μ—­ν• ** * Reactμ—μ„œ HooksλŠ” λ‹¨μˆœνžˆ νŽΈλ¦¬ν•œ κΈ°λŠ₯을 λ„˜μ–΄ μ‹œμŠ€ν…œ μ„€κ³„μ˜ ν•„μˆ˜ μš”μ†Œμž…λ‹ˆλ‹€ [2]. λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλŠ” 훅이 전역에 λ¬΄λΆ„λ³„ν•˜κ²Œ ν©μ–΄μ§€λŠ” 것을 막기 μœ„ν•΄ 'λˆ„κ°€ μ–΄λ–€ 훅을 μ‚¬μš©ν•˜κ³  어디에 λ°°μΉ˜ν• μ§€'에 λŒ€ν•œ λͺ…ν™•ν•œ ꡬ쑰적 κ·œμΉ™μ΄ ν•„μš”ν•©λ‹ˆλ‹€ [2]. * 일반적으둜 μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»€μŠ€ν…€ ν›…(예: `useAuth`, `useForm` λ“±)은 `src/hooks/` 폴더에 쀑앙 μ§‘μ€‘ν™”ν•˜μ—¬ μ €μž₯ν•˜λ©°, μ΄λŠ” μ½”λ“œ μž¬μ‚¬μš©μ„±μ„ μ΄‰μ§„ν•˜κ³  μœ μ§€λ³΄μˆ˜λ₯Ό μ‰½κ²Œ λ§Œλ“­λ‹ˆλ‹€ [5-7]. * 넀이밍 μ»¨λ²€μ…˜(Naming Conventions)에 따라 μ»€μŠ€ν…€ 훅은 λ°˜λ“œμ‹œ `camelCase`λ₯Ό μ‚¬μš©ν•˜κ³  `use` 접두사λ₯Ό λΆ™μ—¬ λͺ…λͺ…ν•΄μ•Ό ν•©λ‹ˆλ‹€ [8, 9]. * **λ¦¬νŒ©ν† λ§ 기법(Refactoring Techniques)μœΌλ‘œμ„œμ˜ Hooks** * ν˜„λŒ€ React μ½”λ“œλ² μ΄μŠ€μ—μ„œ μ»€μŠ€ν…€ 훅은 λ¦¬νŒ©ν† λ§μ˜ 1μ°¨ λ‹¨μœ„(primary unit of refactoring)κ°€ λ©λ‹ˆλ‹€ [4]. 크고 λ³΅μž‘ν•œ μ»΄ν¬λ„ŒνŠΈμ—μ„œ 데이터 νŽ˜μΉ­μ΄λ‚˜ 폼 처리 같은 λ‘œμ§μ„ λΆ„λ¦¬ν•˜μ—¬ μ»€μŠ€ν…€ ν›…μœΌλ‘œ μΆ”μΆœν•˜λ©΄, μ»΄ν¬λ„ŒνŠΈλŠ” UI λ Œλ”λ§μ—λ§Œ 집쀑할 수 있게 λ˜μ–΄ 단일 μ±…μž„ 원칙(SRP)을 지킬 수 μžˆμŠ΅λ‹ˆλ‹€ [4, 10]. * μ΄λŸ¬ν•œ μΆ”μΆœ μž‘μ—…μ€ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ λ…λ¦½μ μœΌλ‘œ λΆ„λ¦¬ν•˜μ—¬ μ‹€ν–‰ 속도가 느린 톡합 ν…ŒμŠ€νŠΈ λŒ€μ‹  λΉ λ₯Έ λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€ [4]. * **ν›… μ‚¬μš© μ‹œ ν”ν•œ 함정(Common Pitfalls) 및 디버깅** * **Rules of Hooks:** 훅은 λ°˜λ“œμ‹œ React ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈλ‚˜ μ»€μŠ€ν…€ ν›… λ‚΄μ˜ μ΅œμƒμœ„ λ ˆλ²¨μ—μ„œλ§Œ ν˜ΈμΆœλ˜μ–΄μ•Ό ν•˜λ©°, μ‘°κ±΄λ¬Έμ΄λ‚˜ 반볡문 λ‚΄λΆ€μ—μ„œ ν˜ΈμΆœν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€ [11]. * **`useEffect`의 였용:** 쒅속성 λ°°μ—΄(dependency array)을 잘λͺ» μ„€μ •ν•˜κ±°λ‚˜ 이벀트 λ¦¬μŠ€λ„ˆ λ“±μ˜ 클린업(cleanup) ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•˜μ§€ μ•ŠμœΌλ©΄ λ©”λͺ¨λ¦¬ λˆ„μˆ˜(memory leaks)와 μ‹¬κ°ν•œ μ„±λŠ₯ μ €ν•˜κ°€ λ°œμƒν•©λ‹ˆλ‹€ [11-13]. λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§μ„ μœ λ°œν•˜λŠ” `useEffect` λ‚¨μš©μ„ ν”Όν•˜κ³ , κ°€λŠ₯ν•˜λ©΄ `useMemo`λ‚˜ `useCallback`으둜 λŒ€μ²΄ν•΄μ•Ό ν•©λ‹ˆλ‹€ [12, 14]. * **`useState`의 였용:** 이전 값을 기반으둜 μƒνƒœλ₯Ό μ—…λ°μ΄νŠΈν•  λ•Œ ν•¨μˆ˜ν˜• μ—…λ°μ΄νŠΈλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ±°λ‚˜, λ³΅μž‘ν•œ μƒνƒœ 관리에 `useState`λ₯Ό κ³ μ§‘ν•˜λŠ” 것은 버그λ₯Ό μœ λ°œν•  수 μžˆμœΌλ―€λ‘œ 상황에 따라 `useReducer`λ‚˜ μ»€μŠ€ν…€ 훅을 ν™œμš©ν•΄μ•Ό ν•©λ‹ˆλ‹€ [15]. * **μ„±λŠ₯ μ΅œμ ν™”(Performance Optimization)** * `useCallback`κ³Ό `useMemo`: λ Œλ”λ§ κ°„ κ°μ²΄λ‚˜ ν•¨μˆ˜μ˜ μ°Έμ‘° μ•ˆμ •μ„±(reference stability)을 μœ μ§€ν•˜μ—¬ λΆˆν•„μš”ν•œ μžμ‹ μ»΄ν¬λ„ŒνŠΈμ˜ λ¦¬λ Œλ”λ§μ„ λ§‰κ±°λ‚˜ λΉ„μš©μ΄ 큰 연산을 μ΅œμ ν™”ν•˜λŠ” 데 ν•„μˆ˜μ μž…λ‹ˆλ‹€ [12, 16-18]. * `useTransition` 및 `useDeferredValue`: React 18 μ΄μƒμ˜ λ™μ‹œμ„± λ Œλ”λ§(Concurrent Rendering) ν›…μœΌλ‘œ, 무거운 ν•„ν„°λ§μ΄λ‚˜ 데이터 μ—…λ°μ΄νŠΈλ₯Ό μ§€μ—°(defer)μ‹œν‚€κ³  νƒ€μ΄ν•‘μ΄λ‚˜ 클릭 같은 μ‚¬μš©μžμ˜ 즉각적인 μΈν„°λž™μ…˜μ„ μš°μ„ μ‹œν•˜μ—¬ UI의 λ°˜μ‘μ„±μ„ λ†’κ²Œ μœ μ§€ν•©λ‹ˆλ‹€ [19-21]. ## πŸ”— Knowledge Connections - **Related Topics:** [[React Architecture]], [[Clean Code Principles]], [[Performance Optimization]], [[Refactoring Techniques]], [[Folder Structure Best Practices]] - **Projects/Contexts:** [[Feature-Sliced Design]], [[Concurrent Rendering in React 18+]] - **Contradictions/Notes:** μˆ˜λ™μœΌλ‘œ `useMemo`λ‚˜ `useCallback`을 μ‚¬μš©ν•˜λŠ” μ΅œμ ν™” 방식은 μ½”λ“œλ₯Ό μ–΄μˆ˜μ„ ν•˜κ²Œ λ§Œλ“€κ³  μœ μ§€λ³΄μˆ˜ λΉ„μš©μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€. 2025λ…„ κΈ°μ€€, React Compiler의 λ„μž…μœΌλ‘œ 인해 κ°œλ°œμžκ°€ 직접 μ΄λŸ¬ν•œ 훅을 μž‘μ„±ν•˜μ§€ μ•Šμ•„λ„ λΉŒλ“œ νƒ€μž„μ— μžλ™μœΌλ‘œ μ„ΈλΆ„ν™”λœ λ©”λͺ¨μ΄μ œμ΄μ…˜μ΄ μˆ˜ν–‰λ˜μ–΄ μˆ˜λ™ ν›… μ΅œμ ν™”μ˜ ν•„μš”μ„±μ΄ 쀄어듀고 μžˆμŠ΅λ‹ˆλ‹€ [22-25]. --- *Last updated: 2026-04-26*