그저 반환되는 동전이 최소한이 되는 자판기 잔돈 계산 모듈을 구현해서 제공하면 충분하다.
- 최소 개수의 동전으로 잔돈을 돌려준다. 예) 1000원 넣고 650원짜리 음료를 선택했다면, 잔돈은 100, 100, 100, 50원으로 반환한다.
- 지폐를 잔돈으로 반환하는 경우는 없다고 가정한다.
- 잔돈 모듈에 동전을 넣으면 얼마가 들었는지 알 수 있다.
- 잔돈 모듈에 든 금액을 차감할 수 있다.
- VendingMachine을 ChangesModule로 변경한다.
- 동전은 500원, 100원, 50원, 10원이 있다.
- 없는 금액의 동전인 경우
- 최소 개수의 동전으로 잔돈을 돌려준다.
- 10원이 남아 있다면 10원 동전 1개를 돌려준다.
- 50원이 남아 있다면 50원 동전 1개를 돌려준다.
- 1000원이 남아 있다면 500원 동전 2개를 돌려준다.
- 20원이 남아 있다면 10원 동전 2개를 돌려준다.
- 600원이 남아 있다면 500원 동전 1개와 100원 동전 1를 돌려준다.
- 650원이 남아 있다면 500원 동전 1개와 100원 동전 1와 50원 동전 1개를 돌려준다.
- 1원이 남아 있다면 동전을 돌려주지 않는다.
- 659원이 남아 있다면 500원 동전 1개와 100원 동전 1와 50원 동전 1개를 돌려준다.
- 최소 구입 금액 미만인 경우 잔돈이 반환된다.
- 반환 요청을 하는 경우 잔돈이 반환된다.
- 새로운 동전으로 반환해야 한다.
- ChangesModule
- ChangesModule#withDraw(Money)
- Coin(500원, 100원, 50원, 10원)
- Changes(잔돈) // Changes(10).coins() = Coins(Coin._10_COIN)