본문으둜 κ±΄λ„ˆλ›°κΈ°

🌈 Chapter 2: νƒ€λ½ν•œ 객체

일반적인 TDD μ£ΌκΈ°λŠ” λ‹€μŒκ³Ό κ°™λ‹€.

  1. ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•œλ‹€. λ§ˆμŒμ†μ— μžˆλŠ” μ˜€νΌλ ˆμ΄μ…˜μ΄ μ½”λ“œμ— μ–΄λ–€ μ‹μœΌλ‘œ λ‚˜νƒ€λ‚˜κΈΈ μ›ν•˜λŠ”μ§€ 생각해보라. 이야기λ₯Ό μ¨λ‚΄λ €κ°€λŠ” 것이닀. μ›ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ°œλ°œν•˜λΌ. μ˜¬λ°”λ₯Έ 닡을 μ–»κΈ° μœ„ν•΄ ν•„μš”ν•œ μ΄μ•ΌκΈ°μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό ν¬ν•¨μ‹œμΌœλΌ.
  2. μ‹€ν–‰ κ°€λŠ₯ν•˜κ²Œ λ§Œλ“ λ‹€. λ‹€λ₯Έ 무엇보닀도 μ€‘μš”ν•œ 것은 빨리 초둝 λ§‰λŒ€λ₯Ό λ³΄λŠ” 것이닀. κΉ”λ”ν•˜κ³  λ‹¨μˆœν•œ 해법이 λͺ…λ°±νžˆ 보인닀면 그것을 μž…λ ₯ν•˜λΌ. λ§Œμ•½ κΉ”λ”ν•˜κ³  λ‹¨μˆœν•œ 해법이 μžˆμ§€λ§Œ κ΅¬ν˜„ν•˜λŠ” 데 λͺ‡ λΆ„ 정도 걸릴 것 κ°™μœΌλ©΄ 일단 적어 놓은 뒀에 μ›λž˜ 문제둜 λŒμ•„μ˜€μž.
  3. μ˜¬λ°”λ₯΄κ²Œ λ§Œλ“ λ‹€. 이제 μ‹œμŠ€ν…œμ΄ μž‘λ™ν•˜λ―€λ‘œ 직전에 μ €μ§ˆλ €λ˜ 죄악을 μˆ˜μŠ΅ν•˜μž. 쒁고 μ˜¬κ³§μ€ μ†Œν”„νŠΈμ›¨μ–΄ μ •μ˜μ˜ 길둜 λ˜λŒμ•„μ™€μ„œ 쀑볡을 μ œκ±°ν•˜κ³  초둝 λ§‰λŒ€λ‘œ 되돌리자.

우리 λͺ©μ μ€ μž‘λ™ν•˜λŠ” κΉ”λ”ν•œ μ½”λ“œλ₯Ό μ–»λŠ” 것이닀. μž‘λ™ν•˜λŠ” κΉ”λ”ν•œ μ½”λ“œλ₯Ό μ–»λŠ” 것은 λ•Œλ‘œλŠ” 졜고의 ν”„λ‘œκ·Έλž˜λ¨Έλ“€ μ‘°μ°¨ λ„λ‹¬ν•˜κΈ° νž˜λ“  λͺ©ν‘œκ³ , λ‚˜κ°™μ€ λŒ€λΆ€λΆ„μ˜ ν‰λ²”ν•œ ν”„λ‘œκ·Έλž˜λ¨Έλ“€μ—κ²ŒλŠ” 거의 λΆˆκ°€λŠ₯ν•œ 일이닀. κ·Έλ ‡λ‹€λ©΄ λ‚˜λˆ„μ–΄μ„œ μ •λ³΅ν•˜μž. 일단 "μž‘λ™ν•˜λŠ” κΉ”λ”ν•œ μ½”λ“œ"λ₯Ό μ–»μ–΄μ•Ό ν•œλ‹€λŠ” 전체 문제 μ€‘μ—μ„œ "μž‘λ™ν•˜λŠ”"에 ν•΄λ‹Ήν•˜λŠ” 뢀뢄을 λ¨Όμ € ν•΄κ²°ν•˜λΌ. 그러고 λ‚˜μ„œ "κΉ”λ”ν•œ μ½”λ“œ" 뢀뢄을 ν•΄κ²°ν•˜λŠ” 것이닀. μ΄λŸ¬ν•œ μ ‘κ·Ό 방식은 "κΉ”λ”ν•œ μ½”λ“œ" 뢀뢄을 λ¨Όμ € ν•΄κ²°ν•œ 후에, "μž‘λ™ν•˜λŠ”" 뢀뢄을 ν•΄κ²°ν•΄ κ°€λ©΄μ„œ 배운 것듀을 섀계에 λ°˜μ˜ν•˜λŠλΌ ν—ˆλ‘₯κ±°λ¦¬λŠ” μ•„ν‚€ν…μ²˜ 주도 개발과 μ •λ°˜λŒ€λ‹€.

λ‚˜λŠ” λ‹€μŒκ³Ό 같이 μ“Έ 수 있길 λ°”λž€λ‹€.

public void testMultiplication() {
Dollar five = new Dollar(5);
five.times(2);
assertEquals(10, product.amount);
five.times(3);
assertEquals(15, product.amount);
}

Dollar의 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μˆ˜μ •ν•΄μ•Ό ν•˜κ³ , 그러기 μœ„ν•΄μ„œλŠ” ν…ŒμŠ€νŠΈλ„ μˆ˜μ •ν•΄μ•Ό ν•œλ‹€.

public void testMultiplication() {
Dollar five = new Dollar(5);
Dollar product = five.times(2);
assertEquals(10, product.amount);
product = five.times(3);
assertEquals(15, product.amount);
}

Dollar.times()λ₯Ό μ•„λž˜μ™€ 같이 μˆ˜μ •ν•˜κΈ° μ „μ—” μƒˆ ν…ŒμŠ€νŠΈλŠ” 컴파일쑰차 λ˜μ§€ μ•Šμ„ 것이닀.

Dollar times(int multiplier) {
amount *= multiplier;
return null;
}

이제 ν…ŒμŠ€νŠΈκ°€ μ»΄νŒŒμΌλœλ‹€. ν•˜μ§€λ§Œ μ‹€ν–‰λ˜μ§€λŠ” μ•ŠλŠ”λ‹€. κ·Έλž˜λ„ ν•œ 걸음 λ‚˜μ•„κ°„ 것이닀! ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•˜κΈ° μœ„ν•΄μ„œλŠ” μ˜¬λ°”λ₯Έ κΈˆμ•‘μ„ κ°–λŠ” μƒˆ Dollarλ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•œλ‹€.

Dollar times(int multiplier) {
return new Dollar(amount * multiplier);
}

λ‹€μŒμ€ μ΅œλŒ€ν•œ 빨리 μ΄ˆλ‘μƒ‰μ„ 보기 μœ„ν•΄ μ·¨ν•  수 μžˆλŠ” λ‚΄κ°€ μ•„λŠ” μ„Έ μ „λž΅ 쀑 두 가지닀.

  • κ°€μ§œλ‘œ κ΅¬ν˜„ν•˜κΈ°: μƒμˆ˜λ₯Ό λ°˜ν™˜ν•˜κ²Œ λ§Œλ“€κ³  μ§„μ§œ μ½”λ“œλ₯Ό 얻을 λ•ŒκΉŒμ§€ λ‹¨κ³„μ μœΌλ‘œ μƒμˆ˜λ₯Ό λ³€μˆ˜λ‘œ λ°”κΎΈμ–΄ κ°„λ‹€.
  • λͺ…λ°±ν•œ κ΅¬ν˜„ μ‚¬μš©ν•˜κΈ°: μ‹€μ œ κ΅¬ν˜„μ„ μž…λ ₯ν•œλ‹€.

λ‚˜λŠ” 보톡 μ‹€λ¬΄μ—μ„œ TDDλ₯Ό μ‚¬μš©ν•  λ•Œ 두 방법을 λ²ˆκ°ˆμ•„κ°€λ©° μ‚¬μš©ν•œλ‹€. λͺ¨λ“  일이 μžμ—°μŠ€λŸ½κ²Œ 잘 μ§„ν–‰λ˜κ³  λ‚΄κ°€ 뭘 μž…λ ₯ν•΄μ•Ό 할지 μ•Œ λ•ŒλŠ” λͺ…λ°±ν•œ κ΅¬ν˜„μ„ 계속 더해 λ‚˜κ°„λ‹€. μ˜ˆμƒμΉ˜ λͺ»ν•œ λΉ¨κ°„ λ§‰λŒ€λ₯Ό λ§Œλ‚˜κ²Œ 되면 λ’€λ‘œ ν•œλ°œ λ¬ΌλŸ¬μ„œμ„œ κ°€μ§œλ‘œ κ΅¬ν˜„ν•˜κΈ° 방법을 μ‚¬μš©ν•˜λ©΄μ„œ μ˜¬λ°”λ₯Έ μ½”λ“œλ‘œ λ¦¬νŒ©ν† λ§ν•œλ‹€. κ·ΈλŸ¬λ‹€ λ‹€μ‹œ μžμ‹ κ°μ„ 되찾으면 λͺ…λ°±ν•œ κ΅¬ν˜„ μ‚¬μš©ν•˜κΈ° λͺ¨λ“œλ‘œ λŒμ•„μ˜¨λ‹€.