Skip to content

Conversation

@Eundms
Copy link

@Eundms Eundms commented Nov 26, 2025

LottoGame์„ ์‚ญ์ œํ•˜๊ณ  ์ฑ…์ž„์„ ๋‹ค์‹œ ๋‚˜๋ˆ„๊ณ ์ž ํ•˜๋Š” ๊ณผ์ •์ด ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค

  1. ๊ธฐ์กด ๋ฐฉ์‹: LottoGame ์ค‘๊ฐ„ ๊ฐ์ฒด ์‚ฌ์šฉ

  LottoGame game = new LottoGame(winning);
  GameResult gameResult = game.check(purchase);

  2. ์ œ์•ˆ๋œ ๋ฐฉ์‹ (ํ˜„์žฌ ๊ตฌํ˜„)

  LottoTickets tickets = LottoMachine.generateTickets(purchase);
  GameResult gameResult = tickets.match(winning);

LottoGame ๋ฐฉ์‹์˜ ๋ฌธ์ œ์ :
- LottoGame.check(purchase) ๋‚ด๋ถ€์—์„œ ํ‹ฐ์ผ“ ์ƒ์„ฑ์ด ์ผ์–ด๋‚˜๋ฉด, ๋žœ๋ค ์ƒ์„ฑ ๋กœ์ง์ด ํฌํ•จ๋˜์–ด ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ค์›€
- ์ค‘๊ฐ„ ๊ณ„์ธต์ด ๋งŽ์•„ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ ์‹œ ๋ชจํ‚น์ด ํ•„์š”ํ•ด์ง
Copy link
Contributor

@javajigi javajigi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3๋‹จ๊ณ„๊นŒ์ง€ ๊ฐ์ฒด ์„ค๊ณ„๋ฅผ ์ž˜ํ•ด์„œ์ธ์ง€ ๊ทธ๋ฆฌ ํฐ ๋ณ€ํ™”๋ฅผ ํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ 4๋‹จ๊ณ„ ๋ฏธ์…˜ ์ง„ํ–‰ํ–ˆ๋„ค์š”. ๐Ÿ‘
Money์™€ Purchase ๊ฐ์ฒด ๊ด€๋ จํ•ด ํ”ผ๋“œ๋ฐฑ ๋‚จ๊ฒจ ๋ดค์œผ๋‹ˆ ํ•œ๋ฒˆ ๊ณ ๋ฏผํ•ด ๋ดค์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

@@ -1,25 +1,34 @@
package lotto.domain.lotto;

public class Purchase {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Money์™€ Purchase์˜ ์ฑ…์ž„๊ณผ ์—ญํ• ์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š๊ณ  ๋‘˜์˜ ์—ญํ• ์ด ์• ๋งคํ•œ ์ธก๋ฉด์ด ์žˆ๋‹ค.
์ด ๋‘ ๊ฐœ์˜ ๊ฐ์ฒด์˜ ์—ญํ• ๊ณผ ์ฑ…์ž„์„ Money์™€ ๊ฐ™์€ ๊ฐ์ฒด ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•  ์ˆ˜๋Š” ์—†์„๊นŒ?
์ด ๋‘ ๊ฐ์ฒด์˜ ์—ญํ• ๊ณผ ์ฑ…์ž„์— ๋Œ€ํ•ด ์ •์˜ํ•ด๋ณด๊ณ  AI ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•„ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ๊ณผ ํ˜„์žฌ์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•„ ์„ค๊ณ„๋ฅผ ๊ฐœ์„ ํ•  ๋ถ€๋ถ„์„ ์ฐพ์•„๋ณธ๋‹ค.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Money ์™€ Purchase์˜ ์ฑ…์ž„๊ณผ ์—ญํ• 

ํ˜„์žฌ์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€

  • ์ฑ…์ž„๊ณผ ์—ญํ• ์ด ๋ชจํ˜ธํ•œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค

  • ์•„๋ž˜์™€ ๊ฐ™์ด ์—ญํ• ๊ณผ ์ฑ…์ž„์„ ์ •์˜ํ•œ๋‹ค๋ฉด?

    • Money: "์–ผ๋งˆ์ธ๊ฐ€?" (๊ธˆ์•ก, VO ์—ญํ• )
    • Purchase: "๋ฌด์—‡์„ ์–ผ๋งˆ๋‚˜ ์ƒ€๋Š”๊ฐ€?" (๊ตฌ๋งค ํ–‰์œ„, ๋„๋ฉ”์ธ ๊ฐ์ฒด)

Purchase

public class Purchase {

  private final Money budget;
  private final Money ticketPrice;
  private final int manualCount;
  private final int autoCount;
  }

๊ตฌ๋งค ๊ด€๋ จ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ํ™•์žฅ์ด ์žˆ๋Š” ๊ฒฝ์šฐ Purchase ๊ฐ์ฒด ๋‚ด์—์„œ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด,

  1. ์ž”๋ˆ (๊ฑฐ์Šค๋ฆ„๋ˆ) ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜๋Š” ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  public Money getChange() {
      return budget.subtract(getSpentAmount());
  }
  1. ํ‹ฐ์ผ“์„ ์–ผ๋งˆ ์ฃผ๊ณ  ์ƒ€๋Š”์ง€ ๋ณต์‚ฌํ•ด์„œ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ‹ฐ์ผ“ ๊ฐ€๊ฒฉ์ด ๋ณ€๋™๋˜๋Š” ๊ฒฝ์šฐ์— ์˜ํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด, Money์— ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง

AI์—๊ฒŒ ๋ฌผ์–ด๋ดค์Šต๋‹ˆ๋‹ค

๋กœ๋˜ ๋„๋ฉ”์ธ์—์„œ

 // 1000์› ๋‹จ์œ„ ๊ฒ€์ฆ (๋กœ๋˜๋Š” 1000์› ๋‹จ์œ„)
  public void validateUnit(int unit) {
      if (this.amount.remainder(BigDecimal.valueOf(unit)) != BigDecimal.ZERO) {
          throw new IllegalArgumentException("1000์› ๋‹จ์œ„๋กœ ์ž…๋ ฅํ•˜์„ธ์š”");
      }
  }

์ผ๋ฐ˜ ์ปค๋จธ์Šค ๋„๋ฉ”์ธ์—์„œ
ํ• ์ธ ์ ์šฉ,์„ธ๊ธˆ ๊ณ„์‚ฐ, ํ†ตํ™” ๋ณ€ํ™˜, ๊ฒฐ์ œ ๊ฐ€๋Šฅ ์—ฌ๋ถ€

์–ด๋ ค์› ๋˜ ์ 

Money ๊ฐ์ฒด์—์„œ

  1. BigDecimal wrapper ๋А๋‚Œ
  public Money add(Money m) { return new Money(amount.add(m.amount)); }
  public Money multiply(int n) { return new Money(amount.multiply(...)); }
  • Money๋งŒ์˜ ๋„๋ฉ”์ธ ๋กœ์ง ์—†์ด BigDecimal ์—ฐ์‚ฐ์„ ๊ฐ์‹ธ๊ธฐ๋งŒ ํ•จ
  1. ๋ฐ˜ํ™˜ ํƒ€์ž… ์ผ๊ด€์„ฑ
  add(Money) โ†’ Money      // โœ… ์ผ๊ด€
  multiply(int) โ†’ Money   // โœ… ์ผ๊ด€
  calculateRatio(Money) โ†’ BigDecimal  // โŒ Money ์•„๋‹˜
  countUnits(Money) โ†’ int             // โŒ Money ์•„๋‹˜
  • "๊ธˆ์•ก / ๊ธˆ์•ก"์˜ ๊ฒฐ๊ณผ๋Š” ๊ธˆ์•ก์ด ์•„๋‹ˆ๋ผ ๋น„์œจ/๊ฐœ์ˆ˜
  1. ๋„๋ฉ”์ธ ๋กœ์ง์˜ ์œ„์น˜
  // Money์— ์žˆ์–ด์•ผ ํ•˜๋‚˜?
  budget.canAfford(ticketPrice)

  // Purchase์— ์žˆ์–ด์•ผ ํ•˜๋‚˜?
  if (budget.isLessThan(ticketPrice)) { ... }
  • canAfford๋Š” "๊ตฌ๋งค ๊ฐ€๋Šฅ ์—ฌ๋ถ€"๋ผ๋Š” ๋„๋ฉ”์ธ ํŒ๋‹จ โ†’ Purchase ์ฑ…์ž„
  • isLessThan์€ "๊ธˆ์•ก ๋น„๊ต"๋ผ๋Š” ๋ฒ”์šฉ ์—ฐ์‚ฐ โ†’ Money ์ฑ…์ž„
  1. ๊ฒฐ๋ก 
Money Purchase
๊ธˆ์•ก ํ‘œํ˜„ (VO) ๊ตฌ๋งค ํ–‰์œ„ (๋„๋ฉ”์ธ ๊ฐ์ฒด)
๋ฒ”์šฉ ์—ฐ์‚ฐ/๋น„๊ต ๋„๋ฉ”์ธ ํŒ๋‹จ/๊ฒ€์ฆ
isLessThan, countUnits "์˜ˆ์‚ฐ์ด ์ถฉ๋ถ„ํ•œ๊ฐ€?"

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI์™€ ๋‹ค์Œ์— ๋Œ€ํ•ด์„œ๋„ ๋…ผ์˜ํ•ด ๋ณด๋ฉด ์ข‹๊ฒ ๋„ค์š”.
Money๋Š” ๋‹จ์ˆœํžˆ ๊ฐ’์„ ๊ฐ€์ง€๊ณ , Purchase๊ฐ€ Money ๊ฐ’์— ๋Œ€ํ•œ ํ–‰์œ„๋ฅผ ๋‹ค๋ฃฌ๋‹ค๋ฉด Money ๊ฐ’ ๊ฐ์ฒด๋ฅผ ๋„ˆ๋ฌด ์ˆ˜๋™์ ์ธ ์กด์žฌ๋กœ ๋ฐ”๋ผ๋ณด๋Š” ๋А๋‚Œ์ด ๋“œ๋Š”๋ฐ์š”.
Money ๊ฐ’ ๊ฐ์ฒด๋ฅผ ์ข€ ๋” ๋Šฅ๋™์ ์ธ ๊ฐ์ฒด๋กœ ๋ฐ”๋ผ๋ณธ๋‹ค๋ฉด Purchase์˜ ํ–‰์œ„๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„๊นŒ์ง€ Money๊ฐ€ ๋‹ด๋‹นํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–จ๊นŒ์— ๋Œ€ํ•ด์„œ AI ๋Œ€ํ™”๋ฅผ ํ†ตํ•ด ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•„๋ณผ ๊ฒƒ์„ ์ถ”์ฒœํ•ด ๋ด…๋‹ˆ๋‹ค.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2๊ฐ€์ง€ ์ด์œ  ๋•Œ๋ฌธ์— ์•„๋ฌด๋ž˜๋„ ์ด์ „ Money ๊ฐ์ฒด์—์„œ์˜ ์ˆ˜์ต๋ฅ  ๋ฉ”์„œ๋“œ๊ฐ€ ์–ด์ƒ‰ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Money๋Š” "๊ธˆ์•ก"์ผ ๋ฟ์ธ๋ฐ, "๋กœ๋˜ ์ˆ˜์ต๋ฅ "์ด๋ผ๋Š” ๋„๋ฉ”์ธ ๊ฐœ๋…์„ ์•Œ์•„์•ผ ํ•จ
  • Purchase๊ฐ€ Money์—๊ฒŒ ๋ฌผ์–ด๋ณด๊ณ  ํŒ๋‹จํ•˜๋Š” ์ˆ˜๋™์  ๊ตฌ์กฐ

๋”ฐ๋ผ์„œ, ์•„๋ž˜์™€ ๊ฐ™์ด Purchase ํ•˜๋‚˜๋งŒ ๋‚จ๊ธฐ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
Purchase: "๋‚˜๋Š” ๋กœ๋˜ ๊ตฌ๋งค์•ผ. ์–ผ๋งˆ ์ผ๊ณ (์ง€์ถœ), ๋ช‡ ์žฅ ์ƒ€๋Š”์ง€(์ˆ˜๋Ÿ‰) ์•Œ์•„. ๋‹น์ฒจ๊ธˆ์„ ์•Œ๋ ค์ฃผ๋ฉด ์ˆ˜์ต๋ฅ ๋„ ๊ณ„์‚ฐํ•ด์ค„๊ฒŒ"

int totalPrize = ranks.entrySet().stream()
public Money getTotalPrize() {
int total = ranks.entrySet().stream()
.mapToInt(entry -> entry.getKey().getPrize() * entry.getValue())
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

entry์—์„œ ๊ฐ’์„ ๊บผ๋‚ด๊ณ  ์žˆ๋‹ค.
entry์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–จ๊นŒ?

Copy link
Contributor

@javajigi javajigi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Money์™€ Purchase์— ๋Œ€ํ•œ ์˜๊ฒฌ ์ž˜ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ‘
์ด์— ๋Œ€ํ•œ ์ œ ์ƒ๊ฐ๊ณผ ์ถ”๊ฐ€๋กœ ํ•™์Šตํ•ด ๋ดค์œผ๋ฉด ํ•˜๋Š” ๋‚ด์šฉ์— ๋Œ€ํ•ด ํ”ผ๋“œ๋ฐฑ ๋‚จ๊ฒจ๋ดค์–ด์š”.
๊ฐ์ฒด์˜ ์—ญํ• ์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•ด ๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ดค์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. https://vimeo.com/1137582691 ์˜์ƒ์„ ํ†ตํ•ด ๊ฐ์ฒด์˜ ์—ญํ• ๊ณผ ์ด๋ฆ„ ์ง“๊ธฐ์— ๋Œ€ํ•ด ์ถ”๊ฐ€ ํ•™์Šต
  2. ํ”ผ๋“œ๋ฐฑ ๋‚จ๊ธด ๋ฐ”์™€ ๊ฐ™์ด AI๋ฅผ ํ†ตํ•ด ํ”ผ๋“œ๋ฐฑ ๋ฐ›์•„๋ณด๊ธฐ
  3. ๋А๋ผ๋Š” ๋ฐ”๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฆฌํŒฉํ„ฐ๋งํ•ด๋ณด๊ธฐ

์œ„์™€ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ถ”๊ฐ€ ํ•™์Šตํ•ด๋ณผ ๊ฒƒ์„ ์ถ”์ฒœํ•ด์š”.
์ด ํ•™์Šต์ด ๊ธˆ๋ฐฉ ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ž–์•„์š”?
๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ด ํ•™์Šต์„ ํ•˜๋ฉด์„œ ์ˆ˜๊ฐ•์‹ ์ฒญ ๋ฏธ์…˜ 1๋‹จ๊ณ„ - ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋ฆฌํŒฉํ„ฐ๋ง ๋ฏธ์…˜์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ฌด์—‡์ธ๊ฐ€ ๋ณธ์ธ๋งŒ์˜ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฒ ํ•™์„ ์ •๋ฆฌํ•ด ๋ณผ ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

- Money ํด๋ž˜์Šค ์‚ญ์ œ, Purchase๊ฐ€ ๊ธˆ์•ก ๊ด€๋ จ ๋กœ์ง ์ง์ ‘ ๋‹ด๋‹น
- Purchase: int ํƒ€์ž…์œผ๋กœ ๋‹จ์ˆœํ™” (ticketPrice, manualCount, autoCount)
- ์ˆ˜์ต๋ฅ  ๊ณ„์‚ฐ(calculateProfitRate)์„ Purchase๊ฐ€ ๋‹ด๋‹น
- LottoMachine, GameResult, ResultView์—์„œ Money ์˜์กด์„ฑ ์ œ๊ฑฐ
Copy link
Contributor

@javajigi javajigi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

๋ฐ”๋กœ mergeํ•˜๋ ค๋‹ค ํ˜น์‹œ๋ผ๋„ ์ถ”๊ฐ€ ์—ฐ์Šตํ•ด๋ณด๊ณ  ์‹ถ์€ ๋ถ€๋ถ„์ด ์žˆ์„ ์ˆ˜ ์žˆ์–ด request changes๋กœ ๋‚จ๊ฒจ๋ด…๋‹ˆ๋‹ค.
ํ˜น์‹œ๋ผ๋„ ์ถ”๊ฐ€ ๋ฆฌํŒฉํ„ฐ๋งํ•ด๋ณด๊ณ  ์‹ถ์€ ๋ถ€๋ถ„ ์žˆ์œผ๋ฉด ๋„์ „ํ•ด ๋ณด์‹œ๊ณ ์š”.
์—†์œผ๋ฉด ๋ฐ”๋กœ ๋ฆฌ๋ทฐ ์š”์ฒญํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.

์•„๋‹ˆ๋ฉด ๋กœ๋˜ ๋ฏธ์…˜์€ ์ง„ํ–‰ ์ƒํƒœ๋กœ ๋‘๊ณ  "์ˆ˜๊ฐ•์‹ ์ฒญ - ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋ฆฌํŒฉํ„ฐ๋ง" ๋ฏธ์…˜ ์ง„ํ–‰ํ•˜๋‹ค ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„ ๋‹ค์‹œ ๋ฆฌํŒฉํ„ฐ๋ง ๋„์ „ํ•ด ๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์€ ์—ฐ์Šต ๋ฐฉ๋ฒ•์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. AI์™€ ํ•จ๊ป˜ ๋กœ๋˜ ๋ฏธ์…˜์˜ ๊ฐ์ฒด ์„ค๊ณ„์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•„๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ผ ๊ฒƒ ๊ฐ™์•„์š”.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants