From eec36bb623dde3b7dd0b80cacc10329e787ffa7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=84=A4=EC=98=A4?= Date: Fri, 6 Mar 2026 08:56:27 +0900 Subject: [PATCH 01/20] docs: update GitHub PR template --- .github/pull_request_template.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 1c4e3cef883..27e771e7f94 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -12,11 +12,6 @@ - [ ] 미션의 필수 요구사항을 모두 구현했나요? - [ ] Gradle `test`를 실행했을 때, 모든 테스트가 정상적으로 통과했나요? - [ ] 애플리케이션이 정상적으로 실행되나요? -- [ ] [프롤로그](https://prolog.techcourse.co.kr)에 셀프 체크를 작성했나요? - - - - -## 객체지향 생활체조 요구사항을 얼마나 잘 충족했다고 생각하시나요? ### 1~5점 중에서 선택해주세요. From ac4041f70e855342bdeaa2662b0b54d727406d03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=84=A4=EC=98=A4?= Date: Fri, 6 Mar 2026 08:58:00 +0900 Subject: [PATCH 02/20] docs: update GitHub PR template --- .github/pull_request_template.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 27e771e7f94..43c871c8563 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -13,14 +13,6 @@ - [ ] Gradle `test`를 실행했을 때, 모든 테스트가 정상적으로 통과했나요? - [ ] 애플리케이션이 정상적으로 실행되나요? -### 1~5점 중에서 선택해주세요. - -- [ ] 1 (전혀 충족하지 못함) -- [ ] 2 -- [ ] 3 (보통) -- [ ] 4 -- [ ] 5 (완벽하게 충족) - ### 선택한 점수의 이유를 적어주세요. From 549740e102c747f8934a86428d65b4bd1ee46026 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=84=A4=EC=98=A4?= Date: Fri, 6 Mar 2026 08:58:34 +0900 Subject: [PATCH 03/20] docs: update GitHub PR template --- .github/pull_request_template.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 43c871c8563..71bbfc612fb 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -12,11 +12,6 @@ - [ ] 미션의 필수 요구사항을 모두 구현했나요? - [ ] Gradle `test`를 실행했을 때, 모든 테스트가 정상적으로 통과했나요? - [ ] 애플리케이션이 정상적으로 실행되나요? - -### 선택한 점수의 이유를 적어주세요. - - - ## 어떤 부분에 집중하여 리뷰해야 할까요? From f265b889f2cbeb7b2a6ff88df6c75e3aa90887af Mon Sep 17 00:00:00 2001 From: Huiyeongkim Date: Thu, 12 Mar 2026 11:31:20 +0900 Subject: [PATCH 04/20] =?UTF-8?q?refactor:=20generateRank=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=EB=AA=85=EC=9D=84=20generateCardBySuit?= =?UTF-8?q?=EB=A1=9C=20=EB=84=A4=EC=9D=B4=EB=B0=8D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/card/Deck.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/domain/card/Deck.java b/src/main/java/domain/card/Deck.java index a4ecb18fb70..e4fa10f3676 100644 --- a/src/main/java/domain/card/Deck.java +++ b/src/main/java/domain/card/Deck.java @@ -8,7 +8,7 @@ public class Deck { public Deck(ShuffleStrategy shuffleStrategy) { for (Suit suit : Suit.values()) { - generateRank(suit); + generateCardBySuit(suit); } shuffleStrategy.shuffle(cards); @@ -22,7 +22,7 @@ public Card drawCard() { throw new IllegalArgumentException("더 이상 카드가 존재하지 않습니다."); } - private void generateRank(Suit suit) { + private void generateCardBySuit(Suit suit) { for (Rank rank : Rank.values()) { cards.add(new Card(rank, suit)); } From e11989d5789a0121cab63bf5e541687ef2fd16ed Mon Sep 17 00:00:00 2001 From: Huiyeongkim Date: Thu, 12 Mar 2026 11:33:52 +0900 Subject: [PATCH 05/20] =?UTF-8?q?refactor:=20y=20=EC=83=81=EC=88=98?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/view/InputView.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index f73fcc2d900..2fa3416cc96 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -8,6 +8,7 @@ public class InputView { private static final String COMMA_DELIMITER = ","; private static final String BINARY_REGEX = "[yn]"; + private static final String BINARY_Y = "y"; private final Scanner sc = new Scanner(System.in); @@ -42,7 +43,7 @@ private boolean validateBinaryOption(String userInput) { throw new IllegalArgumentException("잘못된 입력입니다. 다시 입력해주세요."); } - return userInput.equals("y"); + return userInput.equals(BINARY_Y); } private String userInput() { From 97d660e4d7c7c938a010e0ceb4d4ded2926d6573 Mon Sep 17 00:00:00 2001 From: Huiyeongkim Date: Thu, 12 Mar 2026 11:46:34 +0900 Subject: [PATCH 06/20] =?UTF-8?q?test:=20Deck=2052=EC=9E=A5=20=EC=9D=B4?= =?UTF-8?q?=EC=83=81=20=EC=86=8C=EC=8B=A0=20=EC=8B=9C=20=EC=97=90=EB=9F=AC?= =?UTF-8?q?=20=ED=99=95=EC=9D=B8=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/domain/DeckTest.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/test/java/domain/DeckTest.java b/src/test/java/domain/DeckTest.java index 155f3a6fa87..2200eceded5 100644 --- a/src/test/java/domain/DeckTest.java +++ b/src/test/java/domain/DeckTest.java @@ -5,6 +5,9 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import java.util.HashSet; +import java.util.Set; + class DeckTest { @Test @@ -20,4 +23,23 @@ class DeckTest { Assertions.assertEquals(Rank.TWO, firstCard.getRank()); Assertions.assertEquals(Suit.HEART, firstCard.getSuit()); } + + @Test + @DisplayName("카드가 52장 모두 소진되어 더 이상 카드를 뽑을 수 없다면 에러가 나온다.") + void 카드모두_소진_시_에러() { + // given + Deck deck = new Deck(new NoShuffleStrategy()); + Set cards = new HashSet<>(); + + // when + for (int i = 0; i < 52; i++) { + Card card = deck.drawCard(); + cards.add(card); + } + + // then + Assertions.assertEquals(52, cards.size()); + + Assertions.assertThrows(IllegalArgumentException.class, deck::drawCard); + } } From 4a44d633b06cca88ad71b9c37c9f962aae31462b Mon Sep 17 00:00:00 2001 From: Huiyeongkim Date: Thu, 12 Mar 2026 13:58:29 +0900 Subject: [PATCH 07/20] =?UTF-8?q?docs:=20README.md=EC=97=90=20=EB=B2=A0?= =?UTF-8?q?=ED=8C=85=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0d964bda72d..d0b1033b14d 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ # 🃏 구현할 기능 목록 -### 1. 입력 처리: 플레이어 이름 +### 1. 입력 처리 - [x] 플레이어 이름을 쉼표를 구분자로 입력받는다. - [x] **검증**: 게임에 참여하는 플레이어 수가 5명 이하인지 검증한다. @@ -12,6 +12,9 @@ - [x] **검증**: 영문자만 포함되었는지 검증한다. - [x] **검증**: 플레이어 이름이 중복되지 않는지 검증한다. +- [ ] 플레이어의 베팅 금액을 입력받는다. + - [ ] **검증**: 숫자인지 검증한다. + ### 2. 카드 덱 생성 - [x] 52장의 카드 덱을 생성한다. @@ -58,13 +61,26 @@ - [x] 딜러와 플레이어 모두 21점 일 시, Blackjack 여부에 따라 승패가 처리된다. - [x] 딜러와 플레이어 모두 Blackjack이라면, 무승부 처리한다. -### 8. 결과 출력 +### 8. 베팅금 계산 + +- [ ] 카드의 합이 21 초과인 경우 베팅 금액을 모두 잃는다. +- [ ] 블랙잭인 경우 베팅 금액의 1.5배를 딜러에게 받는다. + - [ ] 처음 두 장의 카드 합이 21인 경우만 블랙잭에 해당한다. + - [ ] 딜러와 플레이어가 모두 블랙잭인 경우 플레이어는 베팅한 금액을 돌려받는다. +- [ ] 플레이어는 아래의 경우, 베팅 금액을 받는다. + - [ ] 딜러가 21을 초과한 경우 + - [ ] 플레이어가 승리한 경우 +### 9. 결과 출력 +**step1** - [x] 딜러와 플레이어의 모든 카드를 출력한다. - [x] 딜러와 플레이어의 최종 점수를 출력한다. - [x] 딜러 기준 승 / 무 / 패 결과를 집계하여 출력한다. - [x] 모든 플레이어 각각의 승패 결과를 출력한다. +**step2** +- [ ] 딜러와 플레이어의 최종 수익을 출력한다. + # 📑 Domain 구조 및 역할 설계 **Card** - 필드 @@ -77,6 +93,11 @@ - `List hand` - 역할: 점수 합계 계산, 버스트 판단, Ace 1/11 처리 +**Money** +- 필드 + - `Integer money` +- 역할 : 베팅금 계산 + **Deck** - 필드 - `List cards` @@ -86,6 +107,7 @@ - `Dealer` 와 `Player`의 부모 클래스 - 필드 - `Hand hand` + - 'Money money' - 모든 참가자는 카드를 받음 **Dealer** @@ -121,4 +143,4 @@ - 일급 컬렉션을 쓴다. - 모든 엔티티를 작게 유지한다. - 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다. -- 딜러와 플레이어에서 발생하는 중복 코드를 제거해야 한다. \ No newline at end of file +- 딜러와 플레이어에서 발생하는 중복 코드를 제거해야 한다. From dce00049c856ad178f58b42936bb2cc14ed14c8d Mon Sep 17 00:00:00 2001 From: Huiyeongkim Date: Thu, 12 Mar 2026 15:45:31 +0900 Subject: [PATCH 08/20] =?UTF-8?q?feat:=20Money=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=20=EC=83=9D=EC=84=B1=20=EB=B0=8F=20Player=EC=97=90=20?= =?UTF-8?q?Money=20=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/money/Money.java | 10 ++++++++++ src/main/java/domain/participant/Player.java | 12 ++++++++++++ src/test/java/domain/PlayerTest.java | 13 +++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 src/main/java/domain/money/Money.java diff --git a/src/main/java/domain/money/Money.java b/src/main/java/domain/money/Money.java new file mode 100644 index 00000000000..1cb92e01e3c --- /dev/null +++ b/src/main/java/domain/money/Money.java @@ -0,0 +1,10 @@ +package domain.money; + +public class Money { + + private final Integer money; + + public Money(Integer money) { + this.money = money; + } +} diff --git a/src/main/java/domain/participant/Player.java b/src/main/java/domain/participant/Player.java index b7c9594d46f..3a753f90139 100644 --- a/src/main/java/domain/participant/Player.java +++ b/src/main/java/domain/participant/Player.java @@ -1,5 +1,7 @@ package domain.participant; +import domain.money.Money; + import java.util.regex.Pattern; import static util.BlackJackConstant.MAX_NAME_LENGTH; @@ -7,7 +9,9 @@ public class Player extends Participant { private static final String STRING_REGEX = "^[a-zA-Z]*$"; + private final String name; + private Money money = null; public Player(String name) { validateNameLength(name); @@ -15,6 +19,14 @@ public Player(String name) { this.name = name; } + public void bet(Integer money) { + if (this.money != null) { + throw new IllegalArgumentException("베팅 금액은 변경할 수 없습니다."); + } + + this.money = new Money(money); + } + public String getName() { return name; } diff --git a/src/test/java/domain/PlayerTest.java b/src/test/java/domain/PlayerTest.java index b16b0ca3c50..3bb2632094f 100644 --- a/src/test/java/domain/PlayerTest.java +++ b/src/test/java/domain/PlayerTest.java @@ -62,4 +62,17 @@ class PlayerTest { // then Assertions.assertEquals(1, player.getHand().getHand().size()); } + + @Test + @DisplayName("플레이어는 베팅 금액은 두 번 이상 적용을 허용하지 않는다.") + void 플레이어_두번_베팅_실패() { + // given + Player player = new Player("pobi"); + + // when + player.bet(30000); + + Assertions.assertThrows(IllegalArgumentException.class, + () -> player.bet(20000)); + } } From e1c75d89e4b9c4c8bcb9c3c32dfdcfbbfa0ebc67 Mon Sep 17 00:00:00 2001 From: Huiyeongkim Date: Fri, 13 Mar 2026 17:40:05 +0900 Subject: [PATCH 09/20] =?UTF-8?q?feat:=20Money=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EA=B5=AC=ED=98=84=20=EB=B0=8F=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/money/Money.java | 7 ++++++- src/test/java/domain/MoneyTest.java | 22 ++++++++++++++++++++++ src/test/java/domain/PlayerTest.java | 1 + 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 src/test/java/domain/MoneyTest.java diff --git a/src/main/java/domain/money/Money.java b/src/main/java/domain/money/Money.java index 1cb92e01e3c..b8e591d8c68 100644 --- a/src/main/java/domain/money/Money.java +++ b/src/main/java/domain/money/Money.java @@ -2,9 +2,14 @@ public class Money { - private final Integer money; + private Integer money; public Money(Integer money) { this.money = money; } + + public Integer applyBlackjack() { + this.money = (int) (this.money * 1.5); + return this.money; + } } diff --git a/src/test/java/domain/MoneyTest.java b/src/test/java/domain/MoneyTest.java new file mode 100644 index 00000000000..46830317639 --- /dev/null +++ b/src/test/java/domain/MoneyTest.java @@ -0,0 +1,22 @@ +package domain; + +import domain.money.Money; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class MoneyTest { + + @Test + @DisplayName("베팅금액이 1.5배 되어야 한다.") + void 베팅금액을_1점5배로_계산() { + // given + Money money = new Money(3000); + + // when + Integer appliedBlackjack = money.applyBlackjack(); + + // then + Assertions.assertEquals((int) (3000*1.5), appliedBlackjack); + } +} diff --git a/src/test/java/domain/PlayerTest.java b/src/test/java/domain/PlayerTest.java index 3bb2632094f..d7384e6d7af 100644 --- a/src/test/java/domain/PlayerTest.java +++ b/src/test/java/domain/PlayerTest.java @@ -72,6 +72,7 @@ class PlayerTest { // when player.bet(30000); + // then Assertions.assertThrows(IllegalArgumentException.class, () -> player.bet(20000)); } From 203ca3ba4e482d198d7f0f2674c00be543f2ab7e Mon Sep 17 00:00:00 2001 From: Huiyeongkim Date: Fri, 13 Mar 2026 17:42:31 +0900 Subject: [PATCH 10/20] =?UTF-8?q?refactor:=20=EB=8F=88=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=EC=9E=90=20=EA=B2=80=EC=A6=9D=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EA=B5=AC=ED=98=84=20=EB=B0=8F=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/money/Money.java | 7 +++++++ src/test/java/domain/MoneyTest.java | 11 +++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/main/java/domain/money/Money.java b/src/main/java/domain/money/Money.java index b8e591d8c68..5daf549c1ab 100644 --- a/src/main/java/domain/money/Money.java +++ b/src/main/java/domain/money/Money.java @@ -5,6 +5,7 @@ public class Money { private Integer money; public Money(Integer money) { + validate(money); this.money = money; } @@ -12,4 +13,10 @@ public Integer applyBlackjack() { this.money = (int) (this.money * 1.5); return this.money; } + + private void validate(Integer money) { + if (money < 0) { + throw new IllegalArgumentException("돈은 음수가 될 수 없습니다."); + } + } } diff --git a/src/test/java/domain/MoneyTest.java b/src/test/java/domain/MoneyTest.java index 46830317639..1988ac30645 100644 --- a/src/test/java/domain/MoneyTest.java +++ b/src/test/java/domain/MoneyTest.java @@ -7,6 +7,17 @@ class MoneyTest { + @Test + @DisplayName("돈은 음수가 될 수 없다.") + void 돈이_음수인_경우_에러() { + // given + int negativeMoney = -3000; + + // when & then + Assertions.assertThrows(IllegalArgumentException.class, + () -> new Money(negativeMoney)); + } + @Test @DisplayName("베팅금액이 1.5배 되어야 한다.") void 베팅금액을_1점5배로_계산() { From 21809b5cf32db782dc5e25732816d35b4427f421 Mon Sep 17 00:00:00 2001 From: Huiyeongkim Date: Fri, 13 Mar 2026 17:46:13 +0900 Subject: [PATCH 11/20] =?UTF-8?q?test:=20player=20=EB=B2=A0=ED=8C=85=20?= =?UTF-8?q?=EC=84=B1=EA=B3=B5=20=EC=BC=80=EC=9D=B4=EC=8A=A4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/domain/MoneyTest.java | 2 +- src/test/java/domain/PlayerTest.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/test/java/domain/MoneyTest.java b/src/test/java/domain/MoneyTest.java index 1988ac30645..affbd547a20 100644 --- a/src/test/java/domain/MoneyTest.java +++ b/src/test/java/domain/MoneyTest.java @@ -13,7 +13,7 @@ class MoneyTest { // given int negativeMoney = -3000; - // when & then + // when - then Assertions.assertThrows(IllegalArgumentException.class, () -> new Money(negativeMoney)); } diff --git a/src/test/java/domain/PlayerTest.java b/src/test/java/domain/PlayerTest.java index d7384e6d7af..27594f87b88 100644 --- a/src/test/java/domain/PlayerTest.java +++ b/src/test/java/domain/PlayerTest.java @@ -63,6 +63,16 @@ class PlayerTest { Assertions.assertEquals(1, player.getHand().getHand().size()); } + @Test + @DisplayName("플레이어는 한 번만 베팅할 수 있어야 한다.") + void 플레이어_베팅_한_번_성공() { + // given + Player player = new Player("pobi"); + + // when + player.bet(30000); + } + @Test @DisplayName("플레이어는 베팅 금액은 두 번 이상 적용을 허용하지 않는다.") void 플레이어_두번_베팅_실패() { From b682e3e22f23b6ebf8230d8c625a3c75138eb98d Mon Sep 17 00:00:00 2001 From: Huiyeongkim Date: Sat, 14 Mar 2026 11:25:39 +0900 Subject: [PATCH 12/20] =?UTF-8?q?feat:=20=EB=B2=A0=ED=8C=85=EA=B8=88=20?= =?UTF-8?q?=EA=B2=B0=EA=B3=BC=20=EB=B0=98=ED=99=98=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EB=B0=8F=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/controller/BlackJackController.java | 6 +- src/main/java/domain/money/BettingResult.java | 29 +++++ src/main/java/domain/money/Money.java | 7 +- src/main/java/domain/participant/Player.java | 4 + src/main/java/service/BlackJackService.java | 22 +++- src/test/java/domain/MoneyTest.java | 13 --- .../java/service/BlackJackServiceTest.java | 110 ++++++++++++++++++ 7 files changed, 169 insertions(+), 22 deletions(-) create mode 100644 src/main/java/domain/money/BettingResult.java diff --git a/src/main/java/controller/BlackJackController.java b/src/main/java/controller/BlackJackController.java index 9350ca9002f..b235729fb27 100644 --- a/src/main/java/controller/BlackJackController.java +++ b/src/main/java/controller/BlackJackController.java @@ -2,10 +2,10 @@ import domain.card.Deck; import domain.card.DefaultShuffleStrategy; -import domain.card.MatchResult; import domain.participant.Dealer; import domain.participant.Player; import domain.participant.Players; +import domain.money.BettingResult; import service.BlackJackService; import view.InputView; import view.OutputView; @@ -35,9 +35,7 @@ public void play() { playRound(deck, dealer, players); outputView.showHandsResult(dealer, players); - Map playerResults = blackJackService.calculateResults(); - outputView.showDealerResult(blackJackService.calculateDealerResult(playerResults)); - outputView.showPlayerGameResult(playerResults); + Map bettingResults = blackJackService.calculateBettingResults(); } private void playRound(Deck deck, Dealer dealer, Players players) { diff --git a/src/main/java/domain/money/BettingResult.java b/src/main/java/domain/money/BettingResult.java new file mode 100644 index 00000000000..794f8037244 --- /dev/null +++ b/src/main/java/domain/money/BettingResult.java @@ -0,0 +1,29 @@ +package domain.money; + +import domain.card.MatchResult; + +public class BettingResult { + + private final int earnings; + + private BettingResult(int earnings) { + this.earnings = earnings; + } + + public static BettingResult from(int betAmount, MatchResult matchResult, boolean isBlackJack) { + if (matchResult == MatchResult.WIN && isBlackJack) { + return new BettingResult((int) (betAmount * 1.5)); + } + if (matchResult == MatchResult.WIN) { + return new BettingResult(betAmount); + } + if (matchResult == MatchResult.LOSE) { + return new BettingResult(-betAmount); + } + return new BettingResult(0); + } + + public int getEarnings() { + return earnings; + } +} diff --git a/src/main/java/domain/money/Money.java b/src/main/java/domain/money/Money.java index 5daf549c1ab..be53022ebad 100644 --- a/src/main/java/domain/money/Money.java +++ b/src/main/java/domain/money/Money.java @@ -2,16 +2,15 @@ public class Money { - private Integer money; + private final Integer money; public Money(Integer money) { validate(money); this.money = money; } - public Integer applyBlackjack() { - this.money = (int) (this.money * 1.5); - return this.money; + public Integer getValue() { + return money; } private void validate(Integer money) { diff --git a/src/main/java/domain/participant/Player.java b/src/main/java/domain/participant/Player.java index 3a753f90139..384fe25ac2d 100644 --- a/src/main/java/domain/participant/Player.java +++ b/src/main/java/domain/participant/Player.java @@ -31,6 +31,10 @@ public String getName() { return name; } + public Money getMoney() { + return money; + } + private void validateNameLength(String name) { if (name.isEmpty() || name.length() > MAX_NAME_LENGTH) { throw new IllegalArgumentException("플레이어 이름은 1글자 이상 8글자 이하여야 합니다."); diff --git a/src/main/java/service/BlackJackService.java b/src/main/java/service/BlackJackService.java index f4465e96acc..1568445ad54 100644 --- a/src/main/java/service/BlackJackService.java +++ b/src/main/java/service/BlackJackService.java @@ -5,6 +5,7 @@ import domain.participant.Dealer; import domain.participant.Player; import domain.participant.Players; +import domain.money.BettingResult; import java.util.EnumMap; import java.util.LinkedHashMap; @@ -45,11 +46,30 @@ public Map calculateResults() { return playerResults; } + public Map calculateBettingResults() { + Map matchResults = calculateResults(); + Map bettingResults = new LinkedHashMap<>(); + + for (Player player : players.getPlayers()) { + MatchResult matchResult = matchResults.get(player.getName()); + + BettingResult result = BettingResult.from( + player.getMoney().getValue(), + matchResult, + player.getHand().isBlackJack() + ); + bettingResults.put(player.getName(), result); + } + + return bettingResults; + } + public Map calculateDealerResult(Map playerResults) { Map dealerResult = new EnumMap<>(MatchResult.class); for (MatchResult matchResult : playerResults.values()) { - dealerResult.put(matchResult.reverse(), dealerResult.getOrDefault(matchResult.reverse(), 0) + 1); + MatchResult reversedResult = matchResult.reverse(); + dealerResult.put(reversedResult, dealerResult.getOrDefault(reversedResult, 0) + 1); } return dealerResult; diff --git a/src/test/java/domain/MoneyTest.java b/src/test/java/domain/MoneyTest.java index affbd547a20..2e87b30002b 100644 --- a/src/test/java/domain/MoneyTest.java +++ b/src/test/java/domain/MoneyTest.java @@ -17,17 +17,4 @@ class MoneyTest { Assertions.assertThrows(IllegalArgumentException.class, () -> new Money(negativeMoney)); } - - @Test - @DisplayName("베팅금액이 1.5배 되어야 한다.") - void 베팅금액을_1점5배로_계산() { - // given - Money money = new Money(3000); - - // when - Integer appliedBlackjack = money.applyBlackjack(); - - // then - Assertions.assertEquals((int) (3000*1.5), appliedBlackjack); - } } diff --git a/src/test/java/service/BlackJackServiceTest.java b/src/test/java/service/BlackJackServiceTest.java index 633781f3f4e..60001d02134 100644 --- a/src/test/java/service/BlackJackServiceTest.java +++ b/src/test/java/service/BlackJackServiceTest.java @@ -5,6 +5,7 @@ import domain.participant.Dealer; import domain.participant.Player; import domain.participant.Players; +import domain.money.BettingResult; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -251,4 +252,113 @@ class BlackJackServiceTest { Assertions.assertEquals(1, matchResults.get(MatchResult.DRAW)); Assertions.assertEquals(1, matchResults.get(MatchResult.WIN)); } + + @Test + @DisplayName("플레이어가 일반 승리한 경우 베팅 금액을 받는다.") + void 플레이어_승리_베팅결과() { + // given + Dealer dealer = new Dealer(); + String name = "pobi"; + Players players = new Players(List.of(name)); + + BlackJackService blackJackService = new BlackJackService( + new Deck(new DefaultShuffleStrategy()), dealer, players); + + dealer.hit(new Card(Rank.JACK, Suit.CLOVER)); + dealer.hit(new Card(Rank.SEVEN, Suit.HEART)); + + Player player = players.getPlayers().getFirst(); + player.bet(10000); + + player.hit(new Card(Rank.NINE, Suit.HEART)); + player.hit(new Card(Rank.KING, Suit.CLOVER)); + + // when + Map results = blackJackService.calculateBettingResults(); + + // then + Assertions.assertEquals(10000, results.get(name).getEarnings()); + } + + @Test + @DisplayName("플레이어가 블랙잭으로 승리한 경우 베팅 금액의 1.5배를 받는다.") + void 플레이어_블랙잭_승리_베팅결과() { + // given + Dealer dealer = new Dealer(); + String name = "pobi"; + Players players = new Players(List.of(name)); + + BlackJackService blackJackService = new BlackJackService( + new Deck(new DefaultShuffleStrategy()), dealer, players); + + dealer.hit(new Card(Rank.JACK, Suit.CLOVER)); + dealer.hit(new Card(Rank.SEVEN, Suit.HEART)); + + Player player = players.getPlayers().getFirst(); + int money = 10000; + player.bet(money); + + player.hit(new Card(Rank.ACE, Suit.CLOVER)); + player.hit(new Card(Rank.KING, Suit.CLOVER)); + + // when + Map results = blackJackService.calculateBettingResults(); + + // then + Assertions.assertEquals(money * (1.5), results.get(name).getEarnings()); + } + + @Test + @DisplayName("플레이어가 패배한 경우 베팅 금액을 잃는다.") + void 플레이어_패배_베팅결과() { + // given + Dealer dealer = new Dealer(); + String name = "pobi"; + Players players = new Players(List.of(name)); + + BlackJackService blackJackService = new BlackJackService( + new Deck(new DefaultShuffleStrategy()), dealer, players); + + dealer.hit(new Card(Rank.ACE, Suit.CLOVER)); + dealer.hit(new Card(Rank.KING, Suit.CLOVER)); + + Player player = players.getPlayers().getFirst(); + int money = 10000; + player.bet(money); + player.hit(new Card(Rank.JACK, Suit.CLOVER)); + player.hit(new Card(Rank.SEVEN, Suit.HEART)); + + // when + Map results = blackJackService.calculateBettingResults(); + + // then + Assertions.assertEquals(money * (-1), results.get(name).getEarnings()); + } + + @Test + @DisplayName("플레이어가 무승부인 경우 베팅 금액을 돌려받는다.") + void 플레이어_무승부_베팅결과() { + // given + Dealer dealer = new Dealer(); + String name = "pobi"; + Players players = new Players(List.of(name)); + + BlackJackService blackJackService = new BlackJackService( + new Deck(new DefaultShuffleStrategy()), dealer, players); + + dealer.hit(new Card(Rank.JACK, Suit.CLOVER)); + dealer.hit(new Card(Rank.SEVEN, Suit.HEART)); + + Player player = players.getPlayers().getFirst(); + int money = 10000; + player.bet(money); + player.hit(new Card(Rank.NINE, Suit.CLOVER)); + player.hit(new Card(Rank.EIGHT, Suit.CLOVER)); + + // when + Map results = blackJackService.calculateBettingResults(); + + // then + Assertions.assertEquals(0, results.get(name).getEarnings()); + } } From df28a15f69e5d3bc01607a6d3830961d91f6bb44 Mon Sep 17 00:00:00 2001 From: Huiyeongkim Date: Sat, 14 Mar 2026 11:45:24 +0900 Subject: [PATCH 13/20] =?UTF-8?q?feat:=20=EC=B5=9C=EC=A2=85=20=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=20=EC=B6=9C=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/controller/BlackJackController.java | 2 ++ src/main/java/domain/money/BettingResult.java | 4 +++ src/main/java/service/BlackJackService.java | 10 +++---- src/main/java/view/OutputView.java | 20 +++++--------- .../java/service/BlackJackServiceTest.java | 27 ------------------- 5 files changed, 17 insertions(+), 46 deletions(-) diff --git a/src/main/java/controller/BlackJackController.java b/src/main/java/controller/BlackJackController.java index b235729fb27..29a007b228d 100644 --- a/src/main/java/controller/BlackJackController.java +++ b/src/main/java/controller/BlackJackController.java @@ -36,6 +36,8 @@ public void play() { outputView.showHandsResult(dealer, players); Map bettingResults = blackJackService.calculateBettingResults(); + outputView.showDealerResult(blackJackService.calculateDealerResult(bettingResults)); + outputView.showPlayerGameResult(bettingResults); } private void playRound(Deck deck, Dealer dealer, Players players) { diff --git a/src/main/java/domain/money/BettingResult.java b/src/main/java/domain/money/BettingResult.java index 794f8037244..14d2b179f32 100644 --- a/src/main/java/domain/money/BettingResult.java +++ b/src/main/java/domain/money/BettingResult.java @@ -26,4 +26,8 @@ public static BettingResult from(int betAmount, MatchResult matchResult, boolean public int getEarnings() { return earnings; } + + public int reverse() { + return earnings * (-1); + } } diff --git a/src/main/java/service/BlackJackService.java b/src/main/java/service/BlackJackService.java index 1568445ad54..ba89724b3da 100644 --- a/src/main/java/service/BlackJackService.java +++ b/src/main/java/service/BlackJackService.java @@ -64,12 +64,12 @@ public Map calculateBettingResults() { return bettingResults; } - public Map calculateDealerResult(Map playerResults) { - Map dealerResult = new EnumMap<>(MatchResult.class); + public Integer calculateDealerResult(Map playerResults) { + int dealerResult = 0; - for (MatchResult matchResult : playerResults.values()) { - MatchResult reversedResult = matchResult.reverse(); - dealerResult.put(reversedResult, dealerResult.getOrDefault(reversedResult, 0) + 1); + for (BettingResult bettingResult : playerResults.values()) { + int reversedResult = bettingResult.reverse(); + dealerResult += reversedResult; } return dealerResult; diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index 020d4773010..4933c71dec3 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -2,6 +2,7 @@ import domain.card.Card; import domain.card.MatchResult; +import domain.money.BettingResult; import domain.participant.Dealer; import domain.participant.Player; import domain.participant.Players; @@ -66,22 +67,19 @@ public void showHandsResult(Dealer dealer, Players players) { } } - public void showDealerResult(Map dealerResult) { + public void showDealerResult(int dealerResult) { StringBuilder dealerStatistics = new StringBuilder(); System.out.println("\n## 최종 승패"); - dealerStatistics.append("딜러: "); - for (Map.Entry results : dealerResult.entrySet()) { - printDealerStatistics(results, dealerStatistics); - } + dealerStatistics.append("딜러: ").append(dealerResult); System.out.println(dealerStatistics); } - public void showPlayerGameResult(Map playerResults) { - for (Map.Entry results : playerResults.entrySet()) { - System.out.printf("%s: %s\n", results.getKey(), results.getValue().getValue()); + public void showPlayerGameResult(Map playerResults) { + for (Map.Entry results : playerResults.entrySet()) { + System.out.printf("%s: %s\n", results.getKey(), results.getValue().getEarnings()); } } @@ -109,10 +107,4 @@ private StringBuilder printHand(Player player) { playerCards.append(String.join(", ", cards)); return playerCards; } - - private static void printDealerStatistics(Map.Entry results, StringBuilder result) { - if (results.getValue() != 0) { - result.append(String.format("%d%s ", results.getValue(), results.getKey().getValue())); - } - } } diff --git a/src/test/java/service/BlackJackServiceTest.java b/src/test/java/service/BlackJackServiceTest.java index 60001d02134..ee1e0ea7428 100644 --- a/src/test/java/service/BlackJackServiceTest.java +++ b/src/test/java/service/BlackJackServiceTest.java @@ -10,7 +10,6 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -227,32 +226,6 @@ class BlackJackServiceTest { } } - @Test - @DisplayName("딜러의 승패를 올바르게 판단한다.") - void 딜러_승패_판단() { - // given - Dealer dealer = new Dealer(); - Players players = new Players(List.of()); - BlackJackService blackJackService = new BlackJackService( - new Deck(new DefaultShuffleStrategy()), dealer, players); - - Map playerResults = new HashMap<>(); - - playerResults.put("pobi", MatchResult.WIN); - playerResults.put("sisi", MatchResult.WIN); - playerResults.put("ao", MatchResult.WIN); - playerResults.put("james", MatchResult.DRAW); - playerResults.put("lala", MatchResult.LOSE); - - // when - Map matchResults = blackJackService.calculateDealerResult(playerResults); - - // then - Assertions.assertEquals(3, matchResults.get(MatchResult.LOSE)); - Assertions.assertEquals(1, matchResults.get(MatchResult.DRAW)); - Assertions.assertEquals(1, matchResults.get(MatchResult.WIN)); - } - @Test @DisplayName("플레이어가 일반 승리한 경우 베팅 금액을 받는다.") void 플레이어_승리_베팅결과() { From d524bbbe8bed7e216522b37481f51dc244f4bccd Mon Sep 17 00:00:00 2001 From: Huiyeongkim Date: Sat, 14 Mar 2026 11:54:15 +0900 Subject: [PATCH 14/20] =?UTF-8?q?feat:=20=EB=B2=A0=ED=8C=85=EA=B8=88=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/BlackJackController.java | 8 ++++++++ src/main/java/view/InputView.java | 12 ++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/main/java/controller/BlackJackController.java b/src/main/java/controller/BlackJackController.java index 29a007b228d..ef5f6acabba 100644 --- a/src/main/java/controller/BlackJackController.java +++ b/src/main/java/controller/BlackJackController.java @@ -27,6 +27,7 @@ public void play() { Deck deck = new Deck(new DefaultShuffleStrategy()); Dealer dealer = new Dealer(); Players players = readUntilValidPlayers(); + readUntilValidMoney(players); BlackJackService blackJackService = new BlackJackService(deck, dealer, players); blackJackService.initHand(); @@ -76,4 +77,11 @@ private Players readUntilValidPlayers() { } return new Players(players); } + + private void readUntilValidMoney(Players players) { + for (Player player : players.getPlayers()) { + int betAmount = inputView.readBettingAmount(player.getName()); + player.bet(betAmount); + } + } } diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 2fa3416cc96..840d764f17d 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -17,6 +17,18 @@ public List readPlayers() { return splitPlayerNames(userInput()); } + public int readBettingAmount(String name) { + while (true) { + try { + System.out.printf("%s의 배팅 금액은?%n", name); + String money = userInput(); + return Integer.parseInt(money); + } catch (IllegalArgumentException e) { + OutputView.printErrorMessage("잘못된 입력입니다. 다시 입력해주세요."); + } + } + } + public boolean readPlayerToHitUntilValid(String name) { while (true) { try { From 215e2432ab4eecebd13ed0c03f9bae047a62f1c8 Mon Sep 17 00:00:00 2001 From: Huiyeongkim Date: Sat, 14 Mar 2026 12:05:52 +0900 Subject: [PATCH 15/20] =?UTF-8?q?test:=20=EB=94=9C=EB=9F=AC=EC=99=80=20?= =?UTF-8?q?=ED=94=8C=EB=A0=88=EC=9D=B4=EC=96=B4=20=EB=AA=A8=EB=91=90=20?= =?UTF-8?q?=EB=B8=94=EB=9E=99=EC=9E=AD=EC=9D=B8=20=EA=B2=BD=EC=9A=B0=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/service/BlackJackService.java | 5 ++++ .../java/service/BlackJackServiceTest.java | 26 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/main/java/service/BlackJackService.java b/src/main/java/service/BlackJackService.java index ba89724b3da..2d8c66e91bd 100644 --- a/src/main/java/service/BlackJackService.java +++ b/src/main/java/service/BlackJackService.java @@ -129,6 +129,11 @@ private boolean handleBlackJack(Player player, Map playerRe playerResults.put(player.getName(), MatchResult.DRAW); return true; } + if (player.getHand().isBlackJack() && dealer.getHand().isBlackJack()) { + playerResults.put(player.getName(), MatchResult.DRAW); + return true; + } + return false; } } diff --git a/src/test/java/service/BlackJackServiceTest.java b/src/test/java/service/BlackJackServiceTest.java index ee1e0ea7428..aa7c3522445 100644 --- a/src/test/java/service/BlackJackServiceTest.java +++ b/src/test/java/service/BlackJackServiceTest.java @@ -226,6 +226,32 @@ class BlackJackServiceTest { } } + @Test + @DisplayName("딜러와 플레이어가 둘 다 블랙잭일 경우 무승부이다.") + void 동점_블랙잭_무승_판단() { + // given + Dealer dealer = new Dealer(); + Players players = new Players(List.of("pobi")); + BlackJackService blackJackService = new BlackJackService( + new Deck(new DefaultShuffleStrategy()), dealer, players); + + dealer.hit(new Card(Rank.ACE, Suit.CLOVER)); + dealer.hit(new Card(Rank.KING, Suit.CLOVER)); + + for (Player player : players.getPlayers()) { + player.hit(new Card(Rank.ACE, Suit.HEART)); + player.hit(new Card(Rank.JACK, Suit.CLOVER)); + } + + // when + Map matchResult = blackJackService.calculateResults(); + + // then + for (Map.Entry matchResultEntry : matchResult.entrySet()) { + Assertions.assertEquals(MatchResult.DRAW, matchResultEntry.getValue()); + } + } + @Test @DisplayName("플레이어가 일반 승리한 경우 베팅 금액을 받는다.") void 플레이어_승리_베팅결과() { From 680f0005b3300880bbbbfad782dca510b14f7f33 Mon Sep 17 00:00:00 2001 From: Huiyeongkim Date: Sat, 14 Mar 2026 12:56:30 +0900 Subject: [PATCH 16/20] =?UTF-8?q?docs:=20README.md=20=EC=99=84=EB=A3=8C?= =?UTF-8?q?=EB=90=9C=20=EC=82=AC=ED=95=AD=20=EC=B2=B4=ED=81=AC=20=ED=91=9C?= =?UTF-8?q?=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index d0b1033b14d..c47d7d5d8c0 100644 --- a/README.md +++ b/README.md @@ -63,13 +63,13 @@ ### 8. 베팅금 계산 -- [ ] 카드의 합이 21 초과인 경우 베팅 금액을 모두 잃는다. -- [ ] 블랙잭인 경우 베팅 금액의 1.5배를 딜러에게 받는다. - - [ ] 처음 두 장의 카드 합이 21인 경우만 블랙잭에 해당한다. - - [ ] 딜러와 플레이어가 모두 블랙잭인 경우 플레이어는 베팅한 금액을 돌려받는다. -- [ ] 플레이어는 아래의 경우, 베팅 금액을 받는다. - - [ ] 딜러가 21을 초과한 경우 - - [ ] 플레이어가 승리한 경우 +- [x] 카드의 합이 21 초과인 경우 베팅 금액을 모두 잃는다. +- [x] 블랙잭인 경우 베팅 금액의 1.5배를 딜러에게 받는다. + - [x] 처음 두 장의 카드 합이 21인 경우만 블랙잭에 해당한다. + - [x] 딜러와 플레이어가 모두 블랙잭인 경우 플레이어는 베팅한 금액을 돌려받는다. +- [x] 플레이어는 아래의 경우, 베팅 금액을 받는다. + - [x] 딜러가 21을 초과한 경우 + - [x] 플레이어가 승리한 경우 ### 9. 결과 출력 **step1** @@ -79,7 +79,7 @@ - [x] 모든 플레이어 각각의 승패 결과를 출력한다. **step2** -- [ ] 딜러와 플레이어의 최종 수익을 출력한다. +- [x] 딜러와 플레이어의 최종 수익을 출력한다. # 📑 Domain 구조 및 역할 설계 **Card** From efba60292bcb6ed4498cc0c451f8cc360c49fc23 Mon Sep 17 00:00:00 2001 From: Huiyeongkim Date: Sat, 14 Mar 2026 13:12:39 +0900 Subject: [PATCH 17/20] =?UTF-8?q?refactor:=20money=20Optional=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/participant/Player.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/domain/participant/Player.java b/src/main/java/domain/participant/Player.java index 384fe25ac2d..17a5b15e02d 100644 --- a/src/main/java/domain/participant/Player.java +++ b/src/main/java/domain/participant/Player.java @@ -2,6 +2,7 @@ import domain.money.Money; +import java.util.Optional; import java.util.regex.Pattern; import static util.BlackJackConstant.MAX_NAME_LENGTH; @@ -11,7 +12,7 @@ public class Player extends Participant { private static final String STRING_REGEX = "^[a-zA-Z]*$"; private final String name; - private Money money = null; + private Optional money = Optional.empty(); public Player(String name) { validateNameLength(name); @@ -20,11 +21,10 @@ public Player(String name) { } public void bet(Integer money) { - if (this.money != null) { + if (this.money.isPresent()) { throw new IllegalArgumentException("베팅 금액은 변경할 수 없습니다."); } - - this.money = new Money(money); + this.money = Optional.of(new Money(money)); } public String getName() { @@ -32,7 +32,8 @@ public String getName() { } public Money getMoney() { - return money; + return money.orElseThrow(() -> + new IllegalStateException("베팅 금액이 설정되지 않았습니다.")); } private void validateNameLength(String name) { From cb863b2b9f5acc9b0fb1888f1e8351b4b10952d8 Mon Sep 17 00:00:00 2001 From: Huiyeongkim Date: Sat, 14 Mar 2026 13:13:45 +0900 Subject: [PATCH 18/20] =?UTF-8?q?refactor:=20=EC=95=88=20=EC=93=B0?= =?UTF-8?q?=EB=8A=94=20import=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/service/BlackJackService.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/service/BlackJackService.java b/src/main/java/service/BlackJackService.java index 2d8c66e91bd..35599fa7040 100644 --- a/src/main/java/service/BlackJackService.java +++ b/src/main/java/service/BlackJackService.java @@ -7,7 +7,6 @@ import domain.participant.Players; import domain.money.BettingResult; -import java.util.EnumMap; import java.util.LinkedHashMap; import java.util.Map; From b8c89287988b1e440f347c7c6b7fa3252fea6f41 Mon Sep 17 00:00:00 2001 From: Huiyeongkim Date: Sat, 14 Mar 2026 13:17:15 +0900 Subject: [PATCH 19/20] =?UTF-8?q?refactor:=20blackJackMultiplier=20?= =?UTF-8?q?=EC=83=81=EC=88=98=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/money/BettingResult.java | 6 ++++-- src/main/java/util/BlackJackConstant.java | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/domain/money/BettingResult.java b/src/main/java/domain/money/BettingResult.java index 14d2b179f32..02aade0cdd1 100644 --- a/src/main/java/domain/money/BettingResult.java +++ b/src/main/java/domain/money/BettingResult.java @@ -2,6 +2,8 @@ import domain.card.MatchResult; +import static util.BlackJackConstant.BLACKJACK_MULTIPLIER; + public class BettingResult { private final int earnings; @@ -12,7 +14,7 @@ private BettingResult(int earnings) { public static BettingResult from(int betAmount, MatchResult matchResult, boolean isBlackJack) { if (matchResult == MatchResult.WIN && isBlackJack) { - return new BettingResult((int) (betAmount * 1.5)); + return new BettingResult((int) (betAmount * BLACKJACK_MULTIPLIER)); } if (matchResult == MatchResult.WIN) { return new BettingResult(betAmount); @@ -28,6 +30,6 @@ public int getEarnings() { } public int reverse() { - return earnings * (-1); + return -earnings; } } diff --git a/src/main/java/util/BlackJackConstant.java b/src/main/java/util/BlackJackConstant.java index b5e70a75cc8..9ced6e00c81 100644 --- a/src/main/java/util/BlackJackConstant.java +++ b/src/main/java/util/BlackJackConstant.java @@ -8,6 +8,7 @@ public class BlackJackConstant { public static final int DEALER_HIT_LIMIT = 16; public static final int MAX_NAME_LENGTH = 8; public static final int MAX_PLAYER_SIZE = 5; + public static final double BLACKJACK_MULTIPLIER = 1.5; private BlackJackConstant() { } From 82588393b5268aecc1a0770baddecd12ca21edc0 Mon Sep 17 00:00:00 2001 From: Huiyeongkim Date: Sat, 14 Mar 2026 15:20:10 +0900 Subject: [PATCH 20/20] =?UTF-8?q?docs:=20README.md=20=EC=99=84=EB=A3=8C?= =?UTF-8?q?=EB=90=9C=20=EC=82=AC=ED=95=AD=20=EC=B2=B4=ED=81=AC=20=ED=91=9C?= =?UTF-8?q?=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c47d7d5d8c0..f68a21e3969 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,8 @@ - [x] **검증**: 영문자만 포함되었는지 검증한다. - [x] **검증**: 플레이어 이름이 중복되지 않는지 검증한다. -- [ ] 플레이어의 베팅 금액을 입력받는다. - - [ ] **검증**: 숫자인지 검증한다. +- [x] 플레이어의 베팅 금액을 입력받는다. + - [x] **검증**: 숫자인지 검증한다. ### 2. 카드 덱 생성