Skip to content

Latest commit

Β 

History

History
41 lines (28 loc) Β· 2.07 KB

File metadata and controls

41 lines (28 loc) Β· 2.07 KB

HOC (Higher Order Components)

HOC(κ³ μ°¨ μ»΄ν¬λ„ŒνŠΈ)λŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό λ°›κ³  좔가적인 λ°μ΄ν„°λ‚˜ κΈ°λŠ₯이 μΆ”κ°€λœ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ°˜ν™˜ν•˜λŠ” νŒ¨ν„΄μž…λ‹ˆλ‹€. React μ—μ„œ HOC κ°€ μ“°μ΄λŠ” μ΄μœ λŠ” 상속보닀 합성을 μ„ ν˜Έν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

HOC λŠ” μ»΄ν¬λ„ŒνŠΈμ˜ κΈ°λŠ₯을 μ¦κ°€μ‹œν‚€κ±°λ‚˜ μˆ˜μ •ν•˜μ—¬ μ»΄ν¬λ„ŒνŠΈ μž¬μ‚¬μš©κ³Ό μ½”λ“œ 곡유λ₯Ό μš©μ΄ν•˜κ²Œ ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜μ„ μ œκ³΅ν•˜μ§€λ§Œ, HOC 으둜 μ²˜λ¦¬ν•  수 μžˆλŠ” 뢀뢄은 λŒ€λΆ€λΆ„ Hook 으둜 λŒ€μ²΄κ°€ κ°€λŠ₯ν•˜λ©°, Hook 이 더 λ‚˜μ€ 개발자 κ²½ν—˜μ„ μ œκ³΅ν•˜κ³  μ½”λ“œ μž¬μ‚¬μš©κ³Ό ν…ŒμŠ€νŠΈλ₯Ό ν•˜κΈ° μ‰¬μšΈ λ•Œκ°€ λ§ŽμŠ΅λ‹ˆλ‹€.

HOC νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λ©΄ μ•„λž˜μ™€ 같이 μ»΄ν¬λ„ŒνŠΈμ˜ νŠΈλ¦¬κ°€ κΉŠμ–΄μ§€λŠ” κ²½ν–₯이 μžˆμ§€λ§Œ, Hook 을 μ‚¬μš©ν•œλ‹€λ©΄ μ»΄ν¬λ„ŒνŠΈλ₯Ό λž˜ν•‘ν•  ν•„μš”κ°€ μ‚¬λΌμ§‘λ‹ˆλ‹€.

<withAuth>
  <withLayout>
    <withLogging>
      <Component />
    </withLogging>
  </withLayout>
</withAuth>

HOC 의 μ‚¬μš© 사둀

  • μ „λ°˜μ μœΌλ‘œ λ™μΌν•˜λ©° μ»€μŠ€ν„°λ§ˆμ΄μ§• λΆˆκ°€λŠ₯ν•œ λ™μž‘μ΄ μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈμ— ν•„μš”ν•œ 경우
  • μ»΄ν¬λ„ŒνŠΈκ°€ μ»€μŠ€ν…€ 둜직 μΆ”κ°€ 없이 λ‹¨λ…μœΌλ‘œ λ™μž‘ν•  수 μžˆμ–΄μ•Ό ν•˜λŠ” 경우

Hook 의 μ‚¬μš© 사둀

  • 곡톡 κΈ°λŠ₯이 각 μ»΄ν¬λ„ŒνŠΈμ—μ„œ 쓰이기 전에 μ»€μŠ€ν„°λ§ˆμ΄μ§• λ˜μ–΄μ•Ό ν•˜λŠ” 경우
  • 곡톡 κΈ°λŠ₯이 μ•± μ „λ°˜μ μœΌλ‘œ μ“°μ΄λŠ” 것이 μ•„λ‹Œ λͺ‡κ°œμ˜ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μš”κ΅¬λ˜λŠ” 경우
  • ν•΄λ‹Ή κΈ°λŠ₯이 κΈ°λŠ₯을 μ“°λŠ” μ»΄ν¬λ„ŒνŠΈμ—κ²Œ μ—¬λŸ¬ ν”„λ‘œνΌν‹°λ₯Ό 전달해야 ν•˜λŠ” 경우

μž₯점과 단점은?

μž₯점

  • ν•œ 곳에 κ΅¬ν˜„ν•œ λ‘œμ§λ“€μ„ μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μž¬μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 동일 κ΅¬ν˜„μ„ 직접 κ΅¬ν˜„ν•˜λ©° 버그λ₯Ό λ§Œλ“€μ–΄ λ‚Ό ν™•λ₯ μ„ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ‘œμ§μ„ ν•œ κ³³μ—μ„œ κ΄€λ¦¬ν•˜μ—¬ κ΄€μ‹¬μ‚¬μ˜ 뢄리도 μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

단점

  • λ°˜ν™˜ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈμ— μ „λ‹¬ν•˜λŠ” props 의 이름이 κ²ΉμΉ  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ–΄λ–€ HOC κ°€ μ–΄λ–€ props 에 관련이 μžˆλŠ”μ§€ νŒŒμ•…ν•˜κΈ°κ°€ μ–΄λ €μ›Œ μ•±μ˜ λ””λ²„κΉ…μ΄λ‚˜ 규λͺ¨λ₯Ό ν‚€μšΈ λ•Œ λ°©ν•΄κ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€.