YesCoding

Go to English
search:

[Refactoring 2판] Chapter 6-1 ν•¨μˆ˜ μΆ”μΆœν•˜κΈ°

thumbnail_refactor

λ¦¬νŒ©ν„°λ§ 2νŒμ„ 보고 μ •λ¦¬ν•œ κΈ€λ‘œ, μƒλž΅λœ 뢀뢄이 μžˆκ±°λ‚˜ 잘λͺ» μ΄ν•΄ν•œ 뢀뢄이 μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

κ°œλ…κ³Ό 원칙

ν•¨μˆ˜ μΆ”μΆœ (function extraction) μ΄λž€, μ½”λ“œλ₯Ό λ…λ¦½λœ ν•¨μˆ˜λ‘œ λ¬ΆλŠ” 것이닀. λ¬ΆλŠ” 기쀀은 길이가 될 μˆ˜λ„ 있고, μž¬μ‚¬μš©μ„±μ„ κΈ°μ€€μœΌλ‘œ ν•  μˆ˜λ„ μžˆμ§€λ§Œ λ¦¬νŒ©ν† λ§ 2판의 μ§€μ€μ΄λŠ” λͺ©μ κ³Ό κ΅¬ν˜„μ„ 뢄리 ν•˜λŠ” 방식이 κ°€μž₯ 합리적인 ν•¨μˆ˜ μΆ”μΆœ 기쀀이라고 λ³Έλ‹€. ν•¨μˆ˜μ˜ λͺ©μ μ€ ν•¨μˆ˜μ˜ μ΄λ¦„μ—μ„œ λ°”λ‘œ μ•Œ 수 μžˆμ–΄μ•Ό ν•˜λ©°, κ΅¬ν˜„λ˜λŠ” 뢀뢄은 ν•¨μˆ˜ λ³Έλ¬Έ μ½”λ“œμ— λ„£λŠ”λ‹€.

절차

  1. ν•¨μˆ˜λ₯Ό μƒˆλ‘œ λ§Œλ“€κ³  λͺ©μ μ„ 잘 λ“œλŸ¬λ‚΄λŠ” 이름을 뢙인닀.'μ–΄λ–»κ²Œ' κ°€ μ•„λ‹Œ '무엇을' ν•˜λŠ” 지가 λ“œλŸ¬λ‚˜μ•Ό ν•œλ‹€.

    이름이 μ‰½κ²Œ λ– μ˜€λ₯΄μ§€ μ•ŠλŠ”λ‹€λ©΄ ν•¨μˆ˜λ‘œ μΆ”μΆœν•˜λ©΄ μ•ˆ λœλ‹€λŠ” μ‹ ν˜ΈλΌλ‹ˆ, 이런 경우 'ν•¨μˆ˜λ‘œ λ”°λ‘œ λΆ„λ¦¬ν•˜λŠ” 게 μ΅œμ„ μΈκ°€?' κ³ λ―Όν•΄λ³΄μž. 쀑첩 ν•¨μˆ˜λ₯Ό μ§€μ›ν•˜λŠ” μ–Έμ–΄ (λ‚΄κ°€ μ“°λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 여기에 ν•΄λ‹Ήλœλ‹€)λ₯Ό μ‚¬μš©ν•œλ‹€λ©΄ μΆ”μΆœν•œ ν•¨μˆ˜λ₯Ό μ›λž˜ ν•¨μˆ˜ μ•ˆμ— μ€‘μ²©μ‹œν‚¨λ‹€. A λΌλŠ” ν•¨μˆ˜ μ•ˆμ— μ€‘μ²©ν•¨μˆ˜λ‘œ λ“€μ–΄κ°€λŠ” b, c ν•¨μˆ˜κ°„μ—λŠ” λ²”μœ„λ₯Ό κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ— μœ νš¨λ²”μœ„λ₯Ό λ²—μ–΄λ‚œ λ³€μˆ˜λ₯Ό μ²˜λ¦¬ν•˜λŠ” μž‘μ—…μ„ 쀄일 수 μžˆλ‹€.

  2. μΆ”μΆœν•  μ½”λ“œλ₯Ό 원본 ν•¨μˆ˜μ—μ„œ λ³΅μ‚¬ν•˜μ—¬ μƒˆ ν•¨μˆ˜μ— λΆ™μ—¬λ„£λŠ”λ‹€.

  3. μΆ”μΆœν•œ μ½”λ“œ 쀑 원본 ν•¨μˆ˜μ˜ 지역 λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜κ±°λ‚˜ μΆ”μΆœν•œ ν•¨μˆ˜μ˜ μœ νš¨λ²”μœ„λ₯Ό λ²—μ–΄λ‚˜λŠ” λ³€μˆ˜λŠ” μ—†λŠ”μ§€ κ²€μ‚¬ν•˜κ³ , μžˆλ‹€λ©΄ μƒˆλ‘œ μƒμ„±ν•œ ν•¨μˆ˜μ— λ§€κ°œλ³€μˆ˜λ‘œ μ „λ‹¬ν•œλ‹€.

    μΆ”μΆœν•œ μ½”λ“œμ—μ„œλ§Œ μ‚¬μš©ν•˜λŠ” λ³€μˆ˜κ°€ μΆ”μΆœν•œ ν•¨μˆ˜ 밖에 μ„ μ–Έλ˜μ–΄ μžˆλ‹€λ©΄ μΆ”μΆœν•œ ν•¨μˆ˜ μ•ˆμ—μ„œ μ„ μ–Έν•˜λ„λ‘ μˆ˜μ •ν•œλ‹€. μΆ”μΆœν•œ μ½”λ“œ μ•ˆμ—μ„œ 값이 λ°”λ€ŒλŠ” λ³€μˆ˜κ°€ ν•˜λ‚˜μ΄λ©΄ μΆ”μΆœν•œ μ½”λ“œλ₯Ό ν•΄λ‹Ή λ³€μˆ˜μ— μƒˆλ‘œμš΄ 값을 λŒ€μž…ν•΄μ£ΌλŠ” ν•¨μˆ˜λ‘œ λ§Œλ“€μ–΄ μ€€λ‹€. 값이 λ°”λ€ŒλŠ” μ§€μ—­λ³€μˆ˜κ°€ λ„ˆλ¬΄ 많고 λ³΅μž‘ν•˜λ‹€λ©΄, ν•œ λ³€μˆ˜λ‹Ή μ—­ν•  ν•˜λ‚˜λ₯Ό μ£ΌλŠ” λ³€μˆ˜ μͺΌκ°œκΈ° 방법과 μž„μ‹œ λ³€μˆ˜λ₯Ό 질의 ν•¨μˆ˜ (ν•΄λ‹Ή λ³€μˆ˜μ— μƒˆλ‘œμš΄ 값을 λŒ€μž…ν•΄μ£ΌλŠ” ν•¨μˆ˜λ‘œ μ΄ν•΄ν–ˆλ‹€)둜 λ°”κΎΈλŠ” λ¦¬νŒ©ν† λ§ 방식을 μ‚¬μš©ν•΄ μ½”λ“œλ₯Ό λ‹¨μˆœν•˜κ²Œ λ°”κΎΌ ν›„ ν•¨μˆ˜ μΆ”μΆœμ„ λ‹€μ‹œ μ‹œλ„ν•œλ‹€.

  4. 원본 ν•¨μˆ˜μ—μ„œ μΆ”μΆœν•œ μ½”λ“œ 뢀뢄은 μƒˆλ‘œ λ§Œλ“  ν•¨μˆ˜λ‘œ ν˜ΈμΆœν•œλ‹€.

  5. λ‹€λ₯Έ μ½”λ“œμ— 방금 μΆ”μΆœν•œ 것과 λ˜‘κ°™κ±°λ‚˜ λΉ„μŠ·ν•œ μ½”λ“œκ°€ μ—†λŠ”μ§€ μ‚΄ν”Όκ³  μžˆλ‹€λ©΄ μΆ”μΆœν•œ μƒˆ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ„λ‘ 바꿀지 κ²€ν† ν•œλ‹€.

μ½”λ“œ μ˜ˆμ‹œ

λ¦¬νŒ©ν† λ§ μ „

function printOwing(invoice) { printBanner(); let outstanding = 0; for (const order of invoice.orders) { outstanding += order.amount; } console.log('고객λͺ…: ${invoice.customer}'); console.log('채무앑: ${outstanding}'); }

λ¦¬νŒ©ν† λ§ ν›„

function printOwing(invoice) { printBanner(); const outstanding = calculateOutstanding(invoice); printDetails(outstanding); } function printDetails(outstanding) { console.log('고객λͺ…: ${invoice.customer}'); console.log('채무앑: ${outstanding}'); } function calculateOutstanding(invoice) { let outstanding = 0; for (const order of invoice.orders) { outstanding += order.amount; } return outstanding; }

πŸ’‘πŸ’‘πŸ’‘πŸ’‘πŸ’‘πŸ’‘πŸ’‘πŸ’‘πŸ’‘πŸ’‘πŸ’‘πŸ’‘πŸ’‘πŸ’‘πŸ’‘πŸ’‘πŸ’‘πŸ’‘

  1. ν•¨μˆ˜κ°€ 짧으면 μΊμ‹±ν•˜κΈ°κ°€ 더 μ‰¬μ›Œμ„œ μ»΄νŒŒμΌλŸ¬κ°€ μ΅œμ ν™”ν•˜λŠ”λ° 였히렀 μœ λ¦¬ν•˜λ‹€.
  2. λ³€μˆ˜ 선언문은 λ³€μˆ˜κ°€ μ‚¬μš©λ˜λŠ” μ½”λ“œ 근처둜 μœ„μΉ˜λ₯Ό μ΄λ™μ‹œν‚¨λ‹€.
Recommend Post
Β© Copyright 2022, yesCoding