Git Product home page Git Product logo

tdd-practice's People

Contributors

bbbomi avatar

Stargazers

 avatar

Watchers

 avatar  avatar

tdd-practice's Issues

1๋ถ€ ๋‹ค์ค‘ ํ†ตํ™” ์‚ฐ์ˆ (Multi-Currency Arithmetic)

1๋ถ€์—์„œ ํ•ด๊ฒฐํ•ด์•ผ ํ•  ์ด์Šˆ ๋ชฉ๋ก

์ด์Šˆ์˜ ์ด๋ฆ„์€ ์ฑ…์— ๋‚˜์˜จ ๊ทธ๋Œ€๋กœ๋ฅผ ๋”ฐ๋ฆ„.

  • $5 + 10CHF = $10(ํ™˜์œจ์ด 2:1์ผ ๊ฒฝ์šฐ) #33
  • $5 + $5 = $10 #31
  • $5 + $5์—์„œ Money ๋ฐ˜ํ™˜ํ•˜๊ธฐ #35
  • Bank.reduce(Money) (Caused by #28) #29
  • Money์— ๋Œ€ํ•œ ํ†ตํ™” ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” Reduce (Caused by #29) #31
  • Reduce(String, String) (Caused by #29) #31
  • $5 * 2 = $10 #2
  • amount๋ฅผ private์œผ๋กœ ๋งŒ๋“ค๊ธฐ (Caused by #2) #9
  • Doller ๋ถ€์ž‘์šฉ(side effect)? (Caused by #2) #5
  • Money ๋ฐ˜์˜ฌ๋ฆผ? (Caused by #2)
  • equals() #7
  • hashCode() (Caused by #7)
  • Equal null (Cased by #7)
  • Equal object (Caused by #7)
  • 5CHF * 2 = 10CHF #11
  • Dollar/Franc ์ค‘๋ณต (Caused by #11) #18 #26
  • ๊ณต์šฉ equals (Caused by #11) #13
  • ๊ณต์šฉ times (Caused by #11) #24
  • Franc๊ณผ Dollar ๋น„๊ตํ•˜๊ธฐ (Caused by #13) #16
  • ํ†ตํ™”? (Caused by #16) #22
  • testFrancMultiplication ์ œ๊ฑฐ (Caused by #18) #26
  • Sum.plus (Caused by #33) #35
  • Expression.times (Caused by #33) #35

5CHF * 2 = 10CHF

  1. ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉํ‘œ
    • Dollar์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ํ™”ํ๋‹จ์œ„์ธ, Franc class ๋งŒ๋“ค๊ธฐ

  1. ํ•ด๋‹น ์ด์Šˆ์—์„œ ํ•œ ์ž‘์—…
    • ํฐ ํ…Œ์ŠคํŠธ ๊ณต๋žต ์‹คํŒจ($5 + 10CHF = $10)
      ๊ทธ๋ž˜์„œ ์ง„์ „์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ž๊ทธ๋งˆํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ์Œ.
    • ์ค‘๋ณต์„ ๋งŒ๋“ค๊ณ  ์กฐ๊ธˆ ๊ณ ์ณ์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑ.
    • ๋ชจ๋ธ ์ฝ”๋“œ๋„ ๋ณต์‚ฌ, ์ˆ˜์ •ํ•ด์„œ ํ…Œ์ŠคํŠธ ํ†ต๊ณผ.
    • ์ค‘๋ณต ๊ฐœ์„ ์ด ํ•„์ˆ˜์ ์œผ๋กœ ํ•„์š”ํ•˜๋‹ค๊ณ  ๋Š๊ผˆ์Œ.

ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ์ด๋ž€,

TDD์˜ ๊ถ๊ทน์ ์ธ ๋ชฉํ‘œ - ์ž‘๋™ํ•˜๋Š” ๊น”๋”ํ•œ ์ฝ”๋“œ(clean code that works, Ron Jeffries)


์ž‘๋™ํ•˜๋Š” ๊น”๋”ํ•œ ์ฝ”๋“œ๊ฐ€ ํ›Œ๋ฅญํ•œ ์ด์œ ๋Š”?

  • ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•์ด๋‹ค.
    ๋Š์ž„์—†์ด ๋ฐœ์ƒํ•  ๋ฒ„๊ทธ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•˜์ง€ ์•Š๊ณ , ์ผ์ด ์–ธ์ œ ๋งˆ๋ฌด๋ฆฌ ๋  ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ์ฝ”๋“œ๊ฐ€ ๊ฐ€๋ฅด์ณ ์ฃผ๋Š” ๋ชจ๋“  ๊ตํ›ˆ์„ ํ•™์Šตํ•  ๊ธฐํšŒ๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค.
    ์ฒ˜์Œ ์ƒ๊ฐ๋‚˜๋Š” ๋Œ€๋กœ ํ›„๋”ฑ ์™„๋ฃŒํ•ด ๋ฒ„๋ฆฌ๋ฉด ๋‘ ๋ฒˆ์งธ ๊ฒƒ, ๋” ๋‚˜์€ ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•  ๊ธฐํšŒ๋ฅผ ์žƒ๊ฒŒ ๋œ๋‹ค.
  • ๋‹น์‹ ์ด ๋งŒ๋“  ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์‚ฌ์šฉ์ž์˜ ์‚ถ์„ ํ–ฅ์ƒ์‹œ์ผœ ์ค€๋‹ค.
  • ๋™๋ฃŒ๋“ค์ด ๋‹น์‹ ์„ ์กด๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋ฉฐ, ๋‹น์‹  ๋˜ํ•œ ๋™๋ฃŒ๋“ค์„ ์กด๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.
  • ์ž‘์„ฑํ•˜๋Š” ๋™์•ˆ ๊ธฐ๋ถ„์ด ์ข‹๋‹ค!

TDD์—์„œ์˜ ๊ทœ์น™

  • ์˜ค์ง ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•  ๊ฒฝ์šฐ์—๋งŒ ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  • ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ๋‹ค.

์ด ๊ทœ์น™์ด ์ด‰์งํ•˜๋Š” ํ–‰๋™ ํŒจํ„ด

  • ๋งค (์„ค๊ณ„์— ๋Œ€ํ•œ)๊ฒฐ์ •์‚ฌํ•ญ์— ๋Œ€ํ•ด ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์œ ๊ธฐ์ ์ธ ์„ค๊ณ„๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค.
  • ์ž๋™ํ™” ๋œ ํ…Œ์ŠคํŠธ๋ฅผ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋งŒ๋“ค์–ด์ฃผ๊ธธ ๊ธฐ๋‹ค๋ฆด ์ˆ˜๋Š” ์—†์œผ๋ฏ€๋กœ, ์ง์ ‘ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์€ ์ž‘์€ ๋ณ€ํ™”์—๋„ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์‘ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ํ…Œ์ŠคํŠธ๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ์‘์ง‘๋„๋Š” ๋†’๊ณ  ๊ฒฐํ•ฉ๋„๋Š” ๋‚ฎ์€ ์ปดํฌ๋„ŒํŠธ๋“ค๋กœ ๊ตฌ์„ฑ๋˜๊ฒŒ๋” ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค.

์ด ๊ทœ์น™์— ์˜ํ•ด ๊ฒฐ์ •๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ˆœ์„œ

  1. ์‹คํŒจํ•˜๋Š” ์ž‘์€ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
    • ์ฒ˜์Œ์—๋Š” ์ปดํŒŒ์ผ์กฐ์ฐจ ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
  2. ๋นจ๋ฆฌ ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๊ฒŒ๋” ๋งŒ๋“ ๋‹ค.
    • ์ด๋ฅผ ์œ„ํ•ด ์•„๋ž˜์˜ ๊ฒƒ๋“ค์„ ํ•ด๋„ ์ข‹๋‹ค.
      • ๊ธฐ์กด ์ฝ”๋“œ ๋ณต๋ถ™ํ•˜๊ธฐ
      • ํ…Œ์ŠคํŠธ๋งŒ ๊ฐ„์‹ ํžˆ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ํ•จ์ˆ˜๊ฐ€ ๋ฌด์กฐ๊ฑด ํŠน์ • ์ƒ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜๊ธฐ
  3. ์ผ๋‹จ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๊ฒŒ๋งŒ ํ•˜๋Š” ์™€์ค‘์— ์ƒ๊ฒจ๋‚œ ๋ชจ๋“  ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ๋‹ค(๋ฆฌํŒฉํ† ๋ง)

$5 + $5 = $10

  1. ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉํ‘œ
    • ํ†ตํ™” ๋‹จ์œ„๊ฐ€ ๊ฐ™์€ ํ™”ํ์˜ ํ•ฉ์„ ๊ตฌํ•˜๊ธฐ

  1. ํ•ด๋‹น ์ด์Šˆ์—์„œ ํ•œ ์ž‘์—…
    • ๋ชจ๋“  ์ค‘๋ณต์ด ์ œ๊ฑฐ๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜์ง€ ์•Š์•˜์Œ!
    • ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๊ทธ ์ „๊ณผ ๋‹ค๋ฅด๊ฒŒ ์—ญ๋ฐฉํ–ฅ์ด ์•„๋‹Œ ์ˆœ๋ฐฉํ–ฅ์œผ๋กœ ์ž‘์—….
    • ์•ž์œผ๋กœ ํ•„์š”ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ๊ฐ์ฒด(Sum)์˜ ์ƒ์„ฑ์„ ๊ฐ•์š”ํ•˜๊ธฐ ์œ„ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑ

ํ†ตํ™”?

  1. ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉํ‘œ
    • ํ†ตํ™” ๊ฐœ๋… ๋„์ž…

  1. ํ•ด๋‹น ์ด์Šˆ์—์„œ ํ•œ ์ž‘์—…
    • ํฐ ์„ค๊ณ„ ์•„์ด๋””์–ด๋ฅผ ๋‹ค๋ฃจ๋ ค๋‹ค ๋” ์ž‘์€ ์ž‘์—…์„ ์ˆ˜ํ–‰.
    • ๋‹ค๋ฅธ ๋ถ€๋ถ„๋“ค์„ ํ˜ธ์ถœ์ž(ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ)๋กœ ์˜ฎ๊น€์œผ๋กœ์จ ๋‘ ์ƒ์„ฑ์ž๋ฅผ ์ผ์น˜ ์‹œํ‚ด.
    • ๋น„์Šทํ•œ ๋ฆฌํŒฉํ† ๋ง(Franc์— ํ–ˆ๋˜ ์ผ์„ Dollar์—๋„ ์ ์šฉ)์„ ํ•œ ๋ฒˆ์˜ ํฐ ๋‹จ๊ณ„๋กœ ์ฒ˜๋ฆฌ.
    • ๋™์ผํ•œ ์ƒ์„ฑ์ž๋“ค์„ ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ์˜ฌ๋ ธ์Œ.

Dollar ๋ถ€์ž‘์šฉ?

  1. ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉํ‘œ
    • ์„ค๊ณ„ ์ƒ์˜ ๊ฒฐํ•จ์„ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐํ•œ๋‹ค.

  1. ํ•ด๋‹น ์ด์Šˆ์—์„œ ํ•œ ์ž‘์—…
    • ์„ค๊ณ„ ์ƒ์˜ ๊ฒฐํ•จ(Dollar ๋ถ€์ž‘์šฉ)์„ ๊ทธ ๊ฒฐํ•จ์œผ๋กœ ์ธํ•ด ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ๋กœ ๋ณ€ํ™˜.
    • Stub ๊ตฌํ˜„์œผ๋กœ ๋น ๋ฅด๊ฒŒ ์ปดํŒŒ์ผ์„ ํ†ต๊ณผํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ์Œ.
    • ์˜ฌ๋ฐ”๋ฅด๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผ.

amount๋ฅผ private์œผ๋กœ ๋งŒ๋“ค๊ธฐ

  1. ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉํ‘œ
    • Dollar์˜ ํ•„๋“œ์ธ amount๋ฅผ private์œผ๋กœ ๋งŒ๋“ค๊ธฐ

  1. ํ•ด๋‹น ์ด์Šˆ์—์„œ ํ•œ ์ž‘์—…
    • ๊ฐœ๋ฐœ๋œ ๊ธฐ๋Šฅ์„ ์˜ค์ง ํ…Œ์ŠคํŠธ๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋งŒ ์‚ฌ์šฉ.
    • ๋‘ ํ…Œ์ŠคํŠธ๊ฐ€ ๋™์‹œ์— ์‹คํŒจํ•˜๋ฉด ๋งํ•œ๋‹ค๋Š” ์ ์„ ์ธ์‹.(testMultiplication2()์™€ testEquality()์˜ ๊ด€๊ณ„)
    • ์œ„ํ—˜ ์š”์†Œ๊ฐ€ ์žˆ์Œ์—๋„ ๊ณ„์† ์ง„ํ–‰ํ–ˆ์Œ.
    • ํ…Œ์ŠคํŠธ์™€ ์ฝ”๋“œ ์‚ฌ์ด์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด, ํ…Œ์ŠคํŠธ ํ•˜๋Š” ๊ฐ์ฒด์˜ ์ƒˆ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ.

$5 + 10CHF = $10(ํ™˜์œจ์ด 2:1์ผ ๊ฒฝ์šฐ)

  1. ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉํ‘œ
    • ์„œ๋กœ ๋‹ค๋ฅธ ํ†ตํ™” ๋”ํ•˜๊ธฐ

  1. ํ•ด๋‹น ์ด์Šˆ์—์„œ ํ•œ ์ž‘์—…
    • ์›ํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค ์ž‘์„ฑ
    • ์ถ”์ƒ์ ์ธ ์„ ์–ธ์„ ํ†ตํ•ด ๊ฐ€์ง€์—์„œ ๋ฟŒ๋ฆฌ(ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค)๋กœ ์ผ๋ฐ˜ํ™” ํ–ˆ์Œ
    • ๋ณ€๊ฒฝ ํ›„, ๊ทธ ์˜ํ–ฅ์„ ๋ฐ›์€ ๋‹ค๋ฅธ ๋ถ€๋ถ„๋“ค์„ ์—ฐ์‡„์ ์œผ๋กœ ๋ณ€๊ฒฝ

Dollar/Franc ์ค‘๋ณต

  1. ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉํ‘œ
    • Dollar์™€ Franc์˜ ์ค‘๋ณต ์ œ๊ฑฐ

  1. ํ•ด๋‹น ์ด์Šˆ์—์„œ ํ•œ ์ž‘์—…
    • ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์†์„ ๋“ค์–ด๋‚ด๋Š” ๊ฑธ ์™„๋ฃŒ, ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ์‚ญ์ œ
    • ๊ธฐ์กด์˜ ์†Œ์Šค ๊ตฌ์กฐ์—์„œ๋Š” ํ•„์š”ํ–ˆ์ง€๋งŒ ์ƒˆ๋กœ์šด ๊ตฌ์กฐ์—์„œ๋Š” ํ•„์š” ์—†๊ฒŒ ๋œ ํ…Œ์ŠคํŠธ๋ฅผ ์ œ๊ฑฐ

Factory Method Pattern

Factory Method Pattern?

๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๋ถ€๋ถ„์„ ์„œ๋ธŒ ํด๋ž˜์Šค์— ์œ„์ž„ํ•˜๋Š” ํŒจํ„ด.

์ฆ‰, new ํ‚ค์›Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ถ€๋ถ„์„ ์„œ๋ธŒ ํด๋ž˜์Šค์— ์œ„์ž„ํ•˜๋Š” ๊ฒƒ.
๊ฒฐ๊ตญ ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ ํŒจํ„ด์€ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ณต์žฅ(Factory ๊ฐ์ฒด)์„ ๋งŒ๋“œ๋Š” ํŒจํ„ด์ด๋ผ ์ดํ•ดํ•˜๋ฉด ๋จ.


implementation


แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2020-07-09 แ„‹แ…ฉแ„’แ…ฎ 7 29 28


์˜๋„

  • ๊ฐ์ฒด ์ƒ์„ฑ์„ ์บก์Šํ™”
    • ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜์ง€๋งŒ, ์–ด๋–ค ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ• ์ง€์— ๋Œ€ํ•œ ๊ฒฐ์ •์€ ์„œ๋ธŒํด๋ž˜์Šค๊ฐ€ ๋‚ด๋ฆฌ๊ฒŒ ํ•จ.

๊ตฌํ˜„ ์‹œ ๊ณ ๋ คํ•  ์ ๋“ค

  • ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€
    • Creator๋ฅผ ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ์ •์˜, ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋Š” abstract๋กœ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•.
    • Creator๊ฐ€ ๊ตฌ์ฒด ํด๋ž˜์Šค์ด๊ณ , ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ์˜ ๊ธฐ๋ณธ ๊ตฌํ˜„์„ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•.
  • ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ์˜ ์ธ์ž๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ Product๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ํ•จ.
    • ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ์— ์ž˜๋ชป๋œ ์ธ์ž๊ฐ€ ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ์˜ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•ด์•ผ ํ•จ.
    • Enum ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ณ ๋ คํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ.
  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋ณ„๋กœ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์— ์ฐจ์ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Œ.

Money์— ๋Œ€ํ•œ ํ†ตํ™” ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” Reduce

  1. ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉํ‘œ
    • Money์˜ ํ†ตํ™” ๋‹จ์œ„ ๋ณ€ํ™˜

  1. ํ•ด๋‹น ์ด์Šˆ์—์„œ ํ•œ ์ž‘์—…
    • ํ•„์š”ํ•  ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ถ”๊ฐ€ํ•จ
    • ์ฝ”๋“œ์™€ ํ…Œ์ŠคํŠธ ์‚ฌ์ด์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ค‘๋ณต์„ ๋„์ง‘์–ด๋ƒ„
    • ๋ณ„๋„์˜ ํ…Œ์ŠคํŠธ ์—†์ด ์ „์šฉ(private) ๋„์šฐ๋ฏธ(helper) ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์—ˆ์Œ
    • ๋ฌธ์ œ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋˜ ํ•˜๋‚˜์˜ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด์„œ ์ง„ํ–‰ํ–ˆ์Œ.

๊ณต์šฉ times

  1. ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉํ‘œ
    • ๊ณต์šฉ times ์ค‘๋ณต ์ œ๊ฑฐ

  1. ํ•ด๋‹น ์ด์Šˆ์—์„œ ํ•œ ์ž‘์—…
    • ๋‘ times()๋ฅผ ์ผ์น˜์‹œํ‚ค๊ธฐ ์œ„ํ•ด, ๊ทธ ๋ฉ”์„œ๋“œ๋“ค์ด ํ˜ธ์ถœํ•˜๋Š” ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋“ค์„ ์ธ๋ผ์ธ ์‹œํ‚จ ํ›„ ์ƒ์ˆ˜๋ฅผ ๋ณ€์ˆ˜๋กœ ๋ณ€๊ฒฝ.
    • ๋””๋ฒ„๊น…์„ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ์—†์ด toString()์„ ์ž‘์„ฑ.
    • Franc ๋Œ€์‹  Money๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋ณ€๊ฒฝ์„ ์‹œ๋„, ๊ทธ๊ฒƒ์ด ์ž˜ ์ž‘๋™ ํ•  ์ง€๋ฅผ ํ…Œ์Šคํ‹€ํ•จ.
    • ์‹คํ—˜ํ•ด๋ณธ ๊ฑธ ๋’ค๋กœ ๋ฌผ๋ฆฌ๊ณ  ๋˜ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑ.
      • ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘๋™ํ–ˆ๋”๋‹ˆ ์›๋ž˜ ์‹คํ—˜ํ•˜๋˜ ๊ฒƒ๋„ ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธ.

๊ณต์šฉ equals

  1. ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉํ‘œ
    • Dollar ํด๋ž˜์Šค์™€ Franc ํด๋ž˜์Šค ์‚ฌ์ด์˜ ์ค‘๋ณต ์ฝ”๋“œ ์ œ๊ฑฐํ•˜๊ธฐ

  1. ํ•ด๋‹น ์ด์Šˆ์—์„œ ํ•œ ์ž‘์—…
    • ๊ณตํ†ต๋œ ์ฝ”๋“œ๋ฅผ Dollar์—์„œ ์ƒ์œ„ ํด๋ž˜์Šค(Money)๋กœ ์˜ฎ๊น€.
    • Franc๋„ Money์˜ ํ•˜์œ„ ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค์—ˆ์Œ
    • ๋ถˆํ•„์š”ํ•œ ๊ตฌํ˜„์„ ์ œ๊ฑฐํ•˜๊ธฐ ์ „์— ๋‘ equals() ๊ตฌํ˜„์„ ์ผ์น˜์‹œ์ผฐ์Œ.

Dollar/Franc ์ค‘๋ณต

  1. ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉํ‘œ
    • Dollar์™€ Franc ์ค‘๋ณต ์ค„์ด๊ธฐ

  1. ํ•ด๋‹น ์ด์Šˆ์—์„œ ํ•œ ์ž‘์—…
    • ๋™์ผํ•œ ๋ฉ”์„œ๋“œ(times)์˜ ๋‘ ๋ณ€์ดํ˜• ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋ฅผ ํ†ต์ผ์‹œํ‚ด์œผ๋กœ์จ ์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ํ–ฅํ•ด ํ•œ ๋‹จ๊ณ„ ๋” ์ „์ง„ํ–ˆ์Œ!
    • ์ตœ์†Œํ•œ ๋ฉ”์„œ๋“œ ์„ ์–ธ๋ถ€๋งŒ์ด๋ผ๋„ ๊ณตํ†ต ์ƒ์œ„ ํด๋ž˜์Šค(superclass)๋กœ ์˜ฎ๊น€.
    • factory method๋ฅผ ๋„์ž…ํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ ์ฝ˜ํฌ๋ฆฌํŠธ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์กด์žฌ ์‚ฌ์‹ค์„ ๋ถ„๋ฆฌ.
    • ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์‚ฌ๋ผ์ง€๋ฉด ๋ช‡๋ช‡ ํ…Œ์ŠคํŠธ๋Š” ๋ถˆํ•„์š”ํ•œ ์—ฌ๋ถ„์˜ ๊ฒƒ์ด ๋œ๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธ(๋ณ€๊ฒฝ x)

Franc๊ณผ Dollar ๋น„๊ตํ•˜๊ธฐ

  1. ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉํ‘œ
    • Dollar์™€ Franc ๋น„๊ตํ•˜๊ธฐ

  1. ํ•ด๋‹น ์ด์Šˆ์—์„œ ํ•œ ์ž‘์—…
    • ๊ฒฐํ•จ์„ ํ…Œ์ŠคํŠธ์— ๋‹ด์•„๋ƒˆ์Œ.
    • ์™„๋ฒฝํ•˜์ง„ ์•Š์ง€๋งŒ (getClass())์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ์Œ.
    • ๋” ๋งŽ์€ ๋™๊ธฐ๊ฐ€ ์žˆ๊ธฐ ์ „์—๋Š” ๋” ๋งŽ์€ ์„ค๊ณ„๋ฅผ ๋„์ž…ํ•˜์ง€ ์•Š๊ธฐ๋กœ ํ–ˆ์Œ.
      • equals()์—์„œ java ๊ฐ์ฒด์˜ ์šฉ์–ด(getClass())๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ์žฌ์ • ๋ถ„์•ผ์— ๋งž๋Š” ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์•„๋ณด์ž„.
      • ํ•˜์ง€๋งŒ, ํ˜„์žฌ๋Š” ํ†ตํ™”(currency) ๊ฐœ๋… ๊ฐ™์€ ๊ฒŒ ์—†๊ณ , ๋„์ž…ํ•  ์ถฉ๋ถ„ํ•œ ์ด์œ ๊ฐ€ ์—†์–ด ๋ณด์ด๋ฏ€๋กœ TO-DO ๋ฆฌ์ŠคํŠธ์—๋งŒ ๋‹ฌ์•„๋†“๊ธฐ๋กœ ๊ฒฐ์ •.

equals()

  1. ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉํ‘œ
    • Dollar์™€ Dollar๋ฅผ ์ง์ ‘ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. ํ•ด๋‹น ์ด์Šˆ์—์„œ ํ•œ ์ž‘์—…
    • ์šฐ๋ฆฌ์˜ ๋””์ž์ธ ํŒจํ„ด(value object pattern)์ด ํ•˜๋‚˜์˜ ๋˜ ๋‹ค๋ฅธ operation์„ ์•”์‹œ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Œ.
    • ํ•ด๋‹น operation์„ ํ…Œ์ŠคํŠธ.
    • ํ•ด๋‹น operation์„ ๊ฐ„๋‹จํžˆ ๊ตฌํ˜„ํ–ˆ์Œ.
    • ๊ณง์žฅ ๋ฆฌํŒฉํ† ๋ง ํ•˜๋Š” ๋Œ€์‹  ํ…Œ์ŠคํŠธ๋ฅผ ์กฐ๊ธˆ ๋” ์ถ”๊ฐ€.
    • ๋‘ ๊ฒฝ์šฐ๋ฅผ ๋ชจ๋‘ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฆฌํŒฉํ† ๋ง.

์ถ”์ƒํ™”

  1. ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉํ‘œ
    • TO-DO ๋ฆฌ์ŠคํŠธ์—์„œ ๊ผญ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ์ตœ์†Œํ•œ์˜ ์ž‘์—… ์ˆ˜ํ–‰๊ณผ ์ถ”์ƒํ™”

  1. ํ•ด๋‹น ์ด์Šˆ์—์„œ ํ•œ ์ž‘์—…
    • ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ์—ผ๋‘์— ๋‘” ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑ
    • ํ•œ ๋ฒˆ์˜ ์„ ์–ธ๋ถ€์— ๋Œ€ํ•œ ์ˆ˜์ •์ด ์‹œ์Šคํ…œ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์œผ๋กœ ๋ฒˆ์ ธ๊ฐ”๊ณ , ๋ฌธ์ œ๋ฅผ ๊ณ ์น˜๊ธฐ ์œ„ํ•ด ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์กฐ์–ธ์„ ๋”ฐ๋ž์Œ
    • ์ž ์‹œ ์‹คํ—˜์„ ์‹œ๋„ํ–ˆ๋‹ค๊ฐ€ ์ข‹์ง€ ๋ชปํ•ด์„œ ๋ฒ„๋ ธ์Œ.

$5 * 2 = $10

  1. ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉํ‘œ
    • ์–ด๋–ค ๊ธˆ์•ก(์ฃผ๊ฐ€)์„ ์–ด๋–ค ์ˆ˜(์ฃผ์‹์˜ ์ˆ˜)์— ๊ณฑํ•œ ๊ธˆ์•ก์„ ๊ฒฐ๊ณผ๋กœ ์–ป์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  1. ํ•ด๋‹น ์ด์Šˆ์—์„œ ํ•œ ์ž‘์—…
    • ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ์ž‘์—…ํ•ด์•ผ ํ•  TO-DO ๋ชฉ๋ก์„ ๋งŒ๋“ค์—ˆ์Œ.
    • Operation์ด ์™ธ๋ถ€์—์„œ ์–ด๋–ป๊ฒŒ ๋ณด์ด๊ธธ ์›ํ•˜๋Š”์ง€ ๋งํ•ด์ฃผ๋Š” ์ด์•ผ๊ธฐ๋ฅผ ์ฝ”๋“œ๋กœ ํ‘œํ˜„.
    • JUnit์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ์‚ฌํ•ญ๋“ค์€ ์ž ์‹œ ๋ฌด์‹œ.
    • Stub ๊ตฌํ˜„์„ ํ†ตํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผ.
    • ์ข‹์ง€ ๋ชปํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผ.
    • ๋Œ์•„๊ฐ€๋Š” ์ฝ”๋“œ์—์„œ ์ƒ์ˆ˜๋ฅผ ๋ณ€์ˆ˜๋กœ ๋ณ€๊ฒฝ -> ์ ์ง„์ ์œผ๋กœ ์ผ๋ฐ˜ํ™”
    • ์ƒˆ๋กœ์šด ํ•  ์ผ๋“ค์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๋Œ€์‹  TO-DO ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•˜๊ณ  ๋„˜์–ด๊ฐ.

Bank.reduce(Money)

  1. ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชฉํ‘œ
    • Bank์—์„œ์˜ reduce(Money)๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ธฐ

  1. ํ•ด๋‹น ์ด์Šˆ์—์„œ ํ•œ ์ž‘์—…
    • ์ผ๋‹จ ํ•œ ๊ณณ์— ์บ์ŠคํŒ…์„ ์ด์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค๊ฐ€, ํ…Œ์ŠคํŠธ ํ†ต๊ณผ ํ™•์ธ ํ›„ ๊ทธ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •.
    • ๋ช…์‹œ์ ์ธ ํด๋ž˜์Šค ๊ฒ€์‚ฌ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹คํ˜•์„ฑ์„ ์‚ฌ์šฉ.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.