[Refactoring 2ν] Chapter 6-1 ν¨μ μΆμΆνκΈ°
리ν©ν°λ§ 2νμ λ³΄κ³ μ 리ν κΈλ‘, μλ΅λ λΆλΆμ΄ μκ±°λ μλͺ» μ΄ν΄ν λΆλΆμ΄ μμ μ μμ΅λλ€.
κ°λ κ³Ό μμΉ
ν¨μ μΆμΆ (function extraction) μ΄λ, μ½λλ₯Ό λ 립λ ν¨μλ‘ λ¬Άλ κ²μ΄λ€. λ¬Άλ κΈ°μ€μ κΈΈμ΄κ° λ μλ μκ³ , μ¬μ¬μ©μ±μ κΈ°μ€μΌλ‘ ν μλ μμ§λ§ 리ν©ν λ§ 2νμ μ§μμ΄λ λͺ©μ κ³Ό ꡬνμ λΆλ¦¬ νλ λ°©μμ΄ κ°μ₯ ν©λ¦¬μ μΈ ν¨μ μΆμΆ κΈ°μ€μ΄λΌκ³ λ³Έλ€. ν¨μμ λͺ©μ μ ν¨μμ μ΄λ¦μμ λ°λ‘ μ μ μμ΄μΌ νλ©°, ꡬνλλ λΆλΆμ ν¨μ λ³Έλ¬Έ μ½λμ λ£λλ€.
μ μ°¨
-
ν¨μλ₯Ό μλ‘ λ§λ€κ³ λͺ©μ μ μ λλ¬λ΄λ μ΄λ¦μ λΆμΈλ€.'μ΄λ»κ²' κ° μλ '무μμ' νλ μ§κ° λλ¬λμΌ νλ€.
μ΄λ¦μ΄ μ½κ² λ μ€λ₯΄μ§ μλλ€λ©΄ ν¨μλ‘ μΆμΆνλ©΄ μ λλ€λ μ νΈλΌλ, μ΄λ° κ²½μ° 'ν¨μλ‘ λ°λ‘ λΆλ¦¬νλ κ² μ΅μ μΈκ°?' κ³ λ―Όν΄λ³΄μ. μ€μ²© ν¨μλ₯Ό μ§μνλ μΈμ΄ (λ΄κ° μ°λ μλ°μ€ν¬λ¦½νΈλ μ¬κΈ°μ ν΄λΉλλ€)λ₯Ό μ¬μ©νλ€λ©΄ μΆμΆν ν¨μλ₯Ό μλ ν¨μ μμ μ€μ²©μν¨λ€. A λΌλ ν¨μ μμ μ€μ²©ν¨μλ‘ λ€μ΄κ°λ b, c ν¨μκ°μλ λ²μλ₯Ό 곡μ νκΈ° λλ¬Έμ μ ν¨λ²μλ₯Ό λ²μ΄λ λ³μλ₯Ό μ²λ¦¬νλ μμ μ μ€μΌ μ μλ€.
-
μΆμΆν μ½λλ₯Ό μλ³Έ ν¨μμμ 볡μ¬νμ¬ μ ν¨μμ λΆμ¬λ£λλ€.
-
μΆμΆν μ½λ μ€ μλ³Έ ν¨μμ μ§μ λ³μλ₯Ό μ°Έμ‘°νκ±°λ μΆμΆν ν¨μμ μ ν¨λ²μλ₯Ό λ²μ΄λλ λ³μλ μλμ§ κ²μ¬νκ³ , μλ€λ©΄ μλ‘ μμ±ν ν¨μμ 맀κ°λ³μλ‘ μ λ¬νλ€.
μΆμΆν μ½λμμλ§ μ¬μ©νλ λ³μκ° μΆμΆν ν¨μ λ°μ μ μΈλμ΄ μλ€λ©΄ μΆμΆν ν¨μ μμμ μ μΈνλλ‘ μμ νλ€. μΆμΆν μ½λ μμμ κ°μ΄ λ°λλ λ³μκ° νλμ΄λ©΄ μΆμΆν μ½λλ₯Ό ν΄λΉ λ³μμ μλ‘μ΄ κ°μ λμ ν΄μ£Όλ ν¨μλ‘ λ§λ€μ΄ μ€λ€. κ°μ΄ λ°λλ μ§μλ³μκ° λ무 λ§κ³ 볡μ‘νλ€λ©΄, ν λ³μλΉ μν νλλ₯Ό μ£Όλ λ³μ μͺΌκ°κΈ° λ°©λ²κ³Ό μμ λ³μλ₯Ό μ§μ ν¨μ (ν΄λΉ λ³μμ μλ‘μ΄ κ°μ λμ ν΄μ£Όλ ν¨μλ‘ μ΄ν΄νλ€)λ‘ λ°κΎΈλ 리ν©ν λ§ λ°©μμ μ¬μ©ν΄ μ½λλ₯Ό λ¨μνκ² λ°κΎΌ ν ν¨μ μΆμΆμ λ€μ μλνλ€.
-
μλ³Έ ν¨μμμ μΆμΆν μ½λ λΆλΆμ μλ‘ λ§λ ν¨μλ‘ νΈμΆνλ€.
-
λ€λ₯Έ μ½λμ λ°©κΈ μΆμΆν κ²κ³Ό λκ°κ±°λ λΉμ·ν μ½λκ° μλμ§ μ΄νΌκ³ μλ€λ©΄ μΆμΆν μ ν¨μλ₯Ό νΈμΆνλλ‘ λ°κΏμ§ κ²ν νλ€.
μ½λ μμ
리ν©ν λ§ μ
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; }
π‘π‘π‘π‘π‘π‘π‘π‘π‘π‘π‘π‘π‘π‘π‘π‘π‘π‘
- ν¨μκ° μ§§μΌλ©΄ μΊμ±νκΈ°κ° λ μ¬μμ μ»΄νμΌλ¬κ° μ΅μ ννλλ° μ€νλ € μ 리νλ€.
- λ³μ μ μΈλ¬Έμ λ³μκ° μ¬μ©λλ μ½λ κ·Όμ²λ‘ μμΉλ₯Ό μ΄λμν¨λ€.