Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
c8daa3f
docs: README ์ดˆ์•ˆ ์ž‘์„ฑ
kcnsmoothie Mar 5, 2026
6cdbba2
feat: ๊ณต๋ฐฑ ์ด๋ฆ„ ์ž…๋ ฅ์‹œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋ฐœ์ƒ
kcnsmoothie Mar 5, 2026
9ff221c
feat: ์นด๋“œ ๋ฑ ์ƒ์„ฑ์„ ์œ„ํ•œ Enum ์ž‘์„ฑ
kcnsmoothie Mar 5, 2026
648fe9b
test: ์นด๋“œ ๋ฑ์ด 52์žฅ ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ…Œ์ŠคํŠธ
kcnsmoothie Mar 5, 2026
cbedd0e
test: ๋ฑ ์…”ํ”Œ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ
kcnsmoothie Mar 5, 2026
d17084e
feat: ์นด๋“œ ๊ฐ์ฒด ๊ตฌํ˜„
kcnsmoothie Mar 5, 2026
eec36bb
docs: update GitHub PR template
woowahan-neo Mar 5, 2026
ac4041f
docs: update GitHub PR template
woowahan-neo Mar 5, 2026
549740e
docs: update GitHub PR template
woowahan-neo Mar 5, 2026
c102d24
feat: Card TDD ์ž‘์—…
picetea44 Mar 8, 2026
abffda7
feat: Deck TDD ์ˆ˜์ • ๋ฐ ๊ตฌํ˜„
picetea44 Mar 8, 2026
6107d0d
feat: Deck ์—์„œ ๋ชจ๋“  ์นด๋“œ๋ฅผ ๋ฝ‘์•˜์„ ๋•Œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ตฌํ˜„
picetea44 Mar 8, 2026
16188ab
feat: ํ”Œ๋ ˆ์ด์–ด ์นด๋“œ ์ถ”๊ฐ€, ์ ์ˆ˜ ๊ณ„์‚ฐ, ์—์ด์Šค ํŒ๋ณ„ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
picetea44 Mar 8, 2026
3fe7c1d
feat: Players ์ตœ์†Œ ํ”Œ๋ ˆ์ด์–ด ๊ฒ€์ฆ ๋ฐ ์ฐธ๊ฐ€์ž ์ˆ˜ ํ™•์ธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
picetea44 Mar 8, 2026
ba63f5b
feat: Players ์ŠนํŒจ ํŒ์ • ๊ธฐ๋Šฅ ์ถ”๊ฐ€
picetea44 Mar 9, 2026
490cf85
feat: ์ž…์ถœ๋ ฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„
picetea44 Mar 9, 2026
3060aa5
feat: ํ”„๋กœ๊ทธ๋žจ ํ๋ฆ„ ์ œ์–ด
picetea44 Mar 9, 2026
3952e53
feat: Card ๊ฐ์ฒด toString ์ถ”๊ฐ€
picetea44 Mar 9, 2026
e35b6f6
feat: Player ์ด๋ฆ„ ๊ฒ€์ฆ ์ฑ…์ž„ ๋ณ€๊ฒฝ
picetea44 Mar 9, 2026
d36a0d0
docs: README.md ํšŒ๊ณ  ์ž‘์„ฑ
picetea44 Mar 9, 2026
30eb78b
docs: PR README ํ…œํ”Œ๋ฆฟ์— ๋งž์ถฐ ์ž‘์„ฑ
kcnsmoothie Mar 9, 2026
f983a5e
Merge pull request #1 from kcnsmoothie/picetea44
kcnsmoothie Mar 9, 2026
9bce798
refactor: remove() ๋Œ€์‹  removeLast()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€๋…์„ฑ ๊ฐœ์„ 
picetea44 Mar 11, 2026
63ce635
refactor: PlayerName VO ์ƒ์„ฑ ๋ฐ ๊ณต๋ฐฑ ์ฑ…์ž„ ์œ„์ž„, Players ์ค‘๋ณต ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
picetea44 Mar 11, 2026
e3987cb
refactor: ์ž„์‹œ ์ˆ˜์ •์•ˆ
picetea44 Mar 11, 2026
5b5a0b1
refactor: ENUM ๋„๋ฉ”์ธ ๋ทฐ ์˜์กด๊ด€๊ณ„ ์ œ๊ฑฐ
picetea44 Mar 11, 2026
d3f91cc
refactor: Players์—์„œ ํŒ์ • ๋กœ์ง ๋ถ„๋ฆฌ ํ›„ Referee์— ์œ„์ž„
picetea44 Mar 11, 2026
4624b1f
refactor: VO ๊ฐ์ฒด์— ๋™๋“ฑ์„ฑ ์ถ”๊ฐ€
picetea44 Mar 11, 2026
6452da9
refactor: Hit ์ฒดํฌ ๊ด€๋ จ ๋กœ์ง ๊ฐœ์„ 
picetea44 Mar 11, 2026
1429d04
refactor: CardBundle ์ถ”๊ฐ€
picetea44 Mar 11, 2026
5b7c169
refactor: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ Deck size ์ œ๊ฑฐ
picetea44 Mar 11, 2026
8d51966
Merge branch 'woowacourse:picetea44' into picetea44
kcnsmoothie Mar 11, 2026
a9b09c5
Merge branch 'step1' into picetea44
kcnsmoothie Mar 11, 2026
dc7f9ea
refactor: ๋ฆฌ๋ทฐ๋ฐ›์€ ์‚ฌํ•ญ์„ ๋ฐ˜์˜
kcnsmoothie Mar 11, 2026
dd01040
refactor: ํ…Œ์ŠคํŠธ ์ผ๊ด€์„ฑ ๋ฐ ์ผ€์ด์Šค ๋ณด๊ฐ•
picetea44 Mar 12, 2026
197df1a
feat: ๋ฒ ํŒ… ๊ธˆ์•ก ์ž…๋ ฅ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„
kcnsmoothie Mar 12, 2026
496bd15
fix: ๋ถˆํ•„์š”ํ•œ ํ”Œ๋ž˜๊ทธ ์ œ๊ฑฐ
picetea44 Mar 12, 2026
9e983fd
feat: Player๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ๋ฒ ํŒ… ๊ธˆ์•ก์„ ๊ฐ€์ง
kcnsmoothie Mar 12, 2026
9172798
fix: ๊ฐœํ–‰์œผ๋กœ ์ธํ•œ ์ฒซ ํ”Œ๋ ˆ์ด์–ด Hit ์—๋Ÿฌ ๋ฌธ์ œ ํ•ด๊ฒฐ
kcnsmoothie Mar 12, 2026
9346ddb
docs: ์ˆ˜์ต ๊ณ„์‚ฐ ๊ธฐ๋Šฅ ๋ชฉ๋ก ์ž‘์„ฑ
kcnsmoothie Mar 12, 2026
b117fab
feat: Result์— ํ•ด๋‹นํ•˜๋Š” ์ˆ˜์ต๋ฅ  ํ•„๋“œ ์ถ”๊ฐ€
kcnsmoothie Mar 12, 2026
537399d
refactor: ์ตœ์ข… ์นด๋“œ ์ถœ๋ ฅ ๋ฉ”์„œ๋“œ์™€ ๊ฒฐ๊ณผ ์ถœ๋ ฅ ๋ฉ”์„œ๋“œ ๋ถ„๋ฆฌ
kcnsmoothie Mar 12, 2026
5cc1a64
feat: ์ตœ์ข… ์ˆ˜์ต ์ถœ๋ ฅ ํฌ๋งท ๊ตฌํ˜„
kcnsmoothie Mar 13, 2026
cf19faa
feat: ์ˆ˜์ต ๊ณ„์‚ฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„
kcnsmoothie Mar 13, 2026
15241fe
feat: ๋ฒ ํŒ… ๊ธˆ์•ก getter ์ถ”๊ฐ€
kcnsmoothie Mar 13, 2026
262573b
feat: ๋ฒ ํŒ… ๋ฐ ์ถœ๋ ฅ ์ปจํŠธ๋กค๋Ÿฌ ์ž‘์„ฑ
kcnsmoothie Mar 13, 2026
3fd51eb
docs: ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์‚ฌํ•ญ ์—…๋ฐ์ดํŠธ
kcnsmoothie Mar 13, 2026
1a28213
Merge remote-tracking branch 'upstream/step1' into step2
kcnsmoothie Mar 13, 2026
ba853bb
Merge branch 'kcnsmoothie' into step2
kcnsmoothie Mar 13, 2026
a6366c5
refactor: Dealer ์ด๋ฆ„์„ ๊ณ ์ • ์ƒ์ˆ˜๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ƒ์„ฑ์ž ํŒŒ๋ผ๋ฏธํ„ฐ ์ œ๊ฑฐ
kcnsmoothie Mar 15, 2026
6dee305
feat: ๊ฒŒ์ž„ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์•„์„œ ๊ด€๋ฆฌํ•˜๋Š” Results ํด๋ž˜์Šค ์ถ”๊ฐ€
kcnsmoothie Mar 15, 2026
109c86c
refactor: ๋ธ”๋ž™์žญ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋ถ„๋ฆฌ
kcnsmoothie Mar 15, 2026
9447709
refactor: ๊ฒฐ๊ณผ์™€ ์ตœ์ข… ์ˆ˜์ต ๊ฐ„์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ์œ„ํ•ด Results ๊ตฌ์กฐ ๋ณ€๊ฒฝ
kcnsmoothie Mar 15, 2026
8cac4f9
test: ์ดˆ๊ธฐ ๋‘์žฅ์ด 21์ด๋ฉด ๋ธ”๋ž™์žญ์ธ์ง€ ํ…Œ์ŠคํŠธ
kcnsmoothie Mar 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 16 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@
- [x] ์ •์ƒ์ ์ธ ์ด๋ฆ„ ์•ž๋’ค์˜ ๊ณต๋ฐฑ ์ œ๊ฑฐ
- [x] `ใ…ใ…, ,ใ…‡ใ…‡` โ†’ ๋นˆ ๋ฌธ์ž์—ด์€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ

### ๋ฒ ํŒ… ๊ธˆ์•ก ์ž…๋ ฅ ๊ธฐ๋Šฅ
- [ ] ๊ฐ ํ”Œ๋ ˆ์ด์–ด์˜ ๋ฒ ํŒ… ๊ธˆ์•ก์„ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค

### ๊ฐ ํ”Œ๋ ˆ์ด์–ด, ๋”œ๋Ÿฌ์—๊ฒŒ ์นด๋“œ๋ฅผ ๋žœ๋ค์œผ๋กœ 2์žฅ ๋ฐฐ๋ถ„ํ•˜๋Š” ๊ธฐ๋Šฅ

- [x] ๋”œ๋Ÿฌ๋Š” 2๋ฒˆ์งธ ์นด๋“œ๋Š” ์ถœ๋ ฅํ•˜์ง€ ์•Š์Œ
Expand All @@ -51,8 +54,19 @@

### ์นด๋“œ ์ ์ˆ˜ ํ•ฉ ๊ณ„์‚ฐ ๊ธฐ๋Šฅ

- [x] rank ๊ฐ’๋งŒ ์ถ”์ถœํ•˜์—ฌ ํ•ฉ์‚ฐ
- [x] ์ดํ•ฉ ๊ณ„์‚ฐ ๋กœ์ง ๊ตฌํ˜„
- [xx] rank ๊ฐ’๋งŒ ์ถ”์ถœํ•˜์—ฌ ํ•ฉ์‚ฐ
- [] ์ดํ•ฉ ๊ณ„์‚ฐ ๋กœ์ง ๊ตฌํ˜„


### ํ”Œ๋ ˆ์ด์–ด ์ˆ˜์ต ๊ณ„์‚ฐ ๊ธฐ๋Šฅ

- [x] Result.WIN : ๋ฒ ํŒ… ๊ธˆ์•ก๋งŒํผ ์ˆ˜์ต(+)
- [x] Result.LOSE : ๋ฒ ํŒ… ๊ธˆ์•ก๋งŒํผ ์†์‹ค(-)
- [x] Result.TIE : ๋ฒ ํŒ… ๊ธˆ์•ก - ๋ฒ ํŒ… ๊ธˆ์•ก(0)
- [x] [ํŠน์ˆ˜] ์ฒ˜์Œ 2์žฅ์˜ ํ•ฉ์ด 21์ผ ๋•Œ : ๋ฒ ํŒ… ๊ธˆ์•ก * 1.5๋งŒํผ ์ˆ˜์ต(+)

### ๋”œ๋Ÿฌ ์ˆ˜์ต ๊ณ„์‚ฐ ๊ธฐ๋Šฅ
- [x] ํ”Œ๋ ˆ์ด์–ด์˜ ์ˆ˜์ต์— ๋”ฐ๋ผ ๋”œ๋Ÿฌ ์ˆ˜์ต์„ ๊ณ„์‚ฐ

### ๊ฒฐ๊ณผ ์ถœ๋ ฅ

Expand All @@ -62,5 +76,4 @@
- [x] ํ”Œ๋ ˆ์ด์–ด ์นด๋“œ ์ ์ˆ˜ ํ•ฉ ์ถœ๋ ฅ

### ์ŠนํŒจ ์ถœ๋ ฅ

- [x] ๊ณ„์‚ฐ๋œ ํ•ฉ์— ๋”ฐ๋ผ ์ŠนํŒจ ํŒ๋ณ„
45 changes: 30 additions & 15 deletions src/main/java/controller/BlackjackController.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import domain.Players;
import domain.Referee;
import domain.Result;
import domain.Results;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
Expand All @@ -24,21 +25,18 @@ public BlackjackController(InputView inputView, OutputView outputView) {

Copy link

Choose a reason for hiding this comment

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

๋“ค์–ด๊ฐ€๋ฉฐ
step1์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋Šฆ๊ฒŒ PR์„ ์˜ฌ๋ ค ์‹œ๊ฐ„์— ์ซ“๊ธฐ๋“ฏ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ๊ทธ ๊ณผ์ •์—์„œ ์•„์„œ์˜ ํ”ผ๋“œ๋ฐฑ์„ ์ถฉ๋ถ„ํžˆ ์†Œํ™”ํ•˜๊ฑฐ๋‚˜ ๊ถ๊ธˆํ•œ ๋ถ€๋ถ„์„ ๊นŠ๊ฒŒ ๊ณ ๋ฏผํ•˜์ง€ ๋ชปํ•œ ์ ์ด ์•„์‰ฌ์› ์Šต๋‹ˆ๋‹ค.
๋˜ ํ•œํŽธ์œผ๋กœ๋Š” PR์„ ๋„ˆ๋ฌด ๋Šฆ๊ฒŒ ์˜ฌ๋ฆฌ๊ฒŒ ๋˜๋ฉด ๋ฆฌ๋ทฐ์–ด ์ž…์žฅ์—์„œ๋„ ํ”ผ๋“œ๋ฐฑ์ด ์ง€์—ฐ๋˜๊ณ  ๋ถˆํŽธํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ํ•˜๋Š” ๊ณ ๋ฏผ๋„ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ PR์„ ์˜ฌ๋ฆฌ๋ฉด์„œ๋„, ์ œ ๊ณ ๋ฏผ์„ ์ถฉ๋ถ„ํžˆ ์ฝ”๋“œ๋กœ ์‹คํ—˜ํ•˜๊ฑฐ๋‚˜ ๋ฐ˜์˜ํ•˜์ง€ ๋ชปํ•œ ์ƒํƒœ์—์„œ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด ๊ดœ์ฐฎ์€์ง€ ๊ณ ๋ฏผ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๋ฆฌ๋ทฐ์–ด ์ž…์žฅ์—์„œ๋Š” ํ˜„์žฌ์ฒ˜๋Ÿผ ๊ธฐ๋Šฅ์ด ๋™์ž‘ํ•˜๋Š” ์ƒํƒœ์˜ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ๋น ๋ฅด๊ฒŒ ๊ณต์œ ํ•˜๊ณ , ์ดํ›„ ์ˆ˜์ •๋˜๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์ถ”๊ฐ€ ํ”ผ๋“œ๋ฐฑ์„ ํ•˜๋Š” ๋ฐฉ์‹์ด ๋” ๊ดœ์ฐฎ์€์ง€, ์•„๋‹ˆ๋ฉด ์กฐ๊ธˆ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋”๋ผ๋„ ์ƒ๊ฐํ•  ์ง€์ ์ด ๋งŽ์€ PR์„ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด ๋‚˜์€์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

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

์ตœ์ข… ์ˆ˜์ต์€ ์–ด๋–ค ๋„๋ฉ”์ธ์˜ ์˜ํ–ฅ์„ ๋ฐ›๊ณ , ๋ˆ„๊ฐ€ ๊ฐ€์ ธ์•ผํ• ๊นŒ?
์ตœ์ข… ์ˆ˜์ต์€ Player, Dealer๊ฐ€ ๊ณตํ†ต์œผ๋กœ ๊ฐ€์ง€๋Š” ๊ฐ’์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ตœ์ข… ์ˆ˜์ต์€ ์ƒ์„ฑ ์‹œ์ ์— ๊ฒฐ์ •๋˜๋Š” ๊ฐ’์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ โ€˜Participant์—์„œ ์ตœ์ข… ์ˆ˜์ต์„ ํ•„๋“œ๋กœ ๊ฐ€์ง€๊ธฐ์—๋Š” ๋ถ€์ ํ•ฉํ•˜์ง€ ์•Š๋‚˜?โ€™ ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
์•ž์„œ ๋งํ–ˆ๋“ฏ **โ€˜Dealer์˜ ์ตœ์ข… ์ˆ˜์ต์€ Player์˜ ๋ฒ ํŒ… ๊ธˆ์•ก๊ณผ Result์— ์˜ํ•ด ๊ฒฐ์ •๋˜๋Š” ๊ฐ’โ€™**์ด๋ผ๋Š” ์ ์—์„œ **โ€˜Dealer๊ฐ€ ์ตœ์ข… ์ˆ˜์ต ํ•„๋“œ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๋ฉด Player์— ์˜์กดํ•˜๋Š” ๊ฒŒ ์•„๋‹๊นŒ?โ€™**ํ•˜๋Š” ๊ณ ๋ฏผ๋„ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.
ํŠนํžˆ 2๋ฒˆ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์„ ํ•˜๋ฉด์„œ ์ตœ์ข… ์ˆ˜์ต์„ ํ•„๋“œ๋กœ ๋‘๋Š” ๊ฒƒ์ด ์ ์ ˆํ•œ์ง€, ์•„๋‹ˆ๋ฉด ๊ณ„์‚ฐ์„ ํ†ตํ•ด ๋„์ถœ๋˜๋Š” ๊ฐ’์œผ๋กœ ๋‘๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€์ง€ ๊ณ ๋ฏผ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ๋ถˆ๋ณ€ ๊ฐ์ฒด๋‚˜ ๋ฐฉ์–ด์  ๋ณต์‚ฌ ๊ฐ™์€ ์„ค๊ณ„ ๋ฐฉํ–ฅ๋„ ๊ณ ๋ คํ•ด๋ณด์•˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ์ ‘๊ทผ์ด ์ด ์ƒํ™ฉ์—์„œ ์ ์ ˆํ•œ ๋ฐฉํ–ฅ์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ ์ตœ์ข… ์ˆ˜์ต๊ณผ ๊ด€๋ จ๋œ ์ฑ…์ž„์„ ์–ด๋–ค ๋„๋ฉ”์ธ์ด ๊ฐ€์ง€๋Š” ๊ฒƒ์ด ๋” ์ž์—ฐ์Šค๋Ÿฌ์šด์ง€์— ๋Œ€ํ•ด์„œ๋„ ์กฐ์–ธ์„ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

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

ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ
domain ์•ˆ์— Result, Referee ๋“ฑ.. ๋‹ค์–‘ํ•œ ํด๋ž˜์Šค๊ฐ€ ์ถ”๊ฐ€ ๋˜๋‹ค ๋ณด๋‹ˆ ํ•œ ๋ˆˆ์— ๋„๋ฉ”์ธ์„ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ˜น์‹œ domain ํŒจํ‚ค์ง€ ๋‚ด์—์„œ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ํŒจํ‚ค์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ „๋žต์ด๋‚˜ ์ปจ๋ฒค์…˜ ํ˜น์€.. ๊ธฐ์ค€์ด ์žˆ์„๊นŒ์š”?

์ œ ์ƒ๊ฐ์—๋Š” ํ˜„์žฌ ๊ทธ๋ ‡๊ฒŒ ๊ฐ์ฒด๊ฐ€ ๋งŽ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์•„์„œ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋งŒ์•ฝ ๊ทผ๋ฐ domain์ด ๋” ์ปค์ง„๋‹ค๋ฉด domain ์•ˆ์— ํŒจํ‚ค์ง€๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ์‹ถ์Šต๋‹ˆ๋‹ค.

public void run() {
List<String> names = inputView.inputPlayers();
Players players = new Players(names);
Dealer dealer = new Dealer("๋”œ๋Ÿฌ");
List<Integer> betAmounts = inputView.inputBetAmount(names);
Players players = new Players(names,betAmounts);
Dealer dealer = new Dealer();
Deck deck = new Deck();
dealInitialCards(dealer, players, deck);
dealInitialCards(dealer, players, deck);
printInitialState(dealer, players, names);
playAllPlayerTurns(players, deck);
playDealerTurn(dealer, deck);
printFinalState(dealer, players);
}

private void playAllPlayerTurns(Players players, Deck deck) {
for (Player player : players.getGamePlayers()) {
playPlayerTurn(player, deck);
}
printResult(dealer, players);
printProfit(dealer, players);
}

private void dealInitialCards(Dealer dealer, Players players, Deck deck) {
Expand All @@ -57,15 +55,16 @@ private void printInitialState(Dealer dealer, Players players, List<String> name
System.out.println();
}

private void playAllPlayerTurns(Players players, Deck deck) {
for (Player player : players.getGamePlayers()) {
playPlayerTurn(player, deck);
}
}

private void playPlayerTurn(Player player, Deck deck) {
boolean cardShown = false;
while (player.canHit() && inputView.askHit(player.getName())) {
player.addCard(deck.draw());
outputView.printPlayerCards(player);
cardShown = true;
}
if (!cardShown) {
outputView.printPlayerCards(player);
}
}

Expand All @@ -82,11 +81,27 @@ private void printFinalState(Dealer dealer, Players players) {
for (Player player : players.getGamePlayers()) {
outputView.printFinalCards(player);
}
}

private void printResult(Dealer dealer, Players players) {
Referee referee = new Referee();
Map<Player, Result> results = new LinkedHashMap<>();
Results results = new Results();
for (Player player : players.getGamePlayers()) {
results.put(player, referee.judge(player.getScore(), dealer.getScore()));
results.add(player, referee.judge(player.getScore(), dealer.getScore()));
}
outputView.printFinalResult(dealer, results);
}

private void printProfit(Dealer dealer, Players players) {
Referee referee = new Referee();
Map<Player, Integer> profit = new LinkedHashMap<>();
double dealerProfit = 0;
for (Player player : players.getGamePlayers()) {
Result result = referee.judge(player.getScore(), dealer.getScore());
int playerProfit = (int) referee.calculateProfit(result, player.getBetAmount());
dealerProfit -= playerProfit;
profit.put(player, playerProfit);
}
outputView.printFinalProfit(dealer, dealerProfit, profit);
}
}
5 changes: 3 additions & 2 deletions src/main/java/domain/Dealer.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@

public class Dealer extends Participant {
private static final int HIT_THRESHOLD = 16;
private static final String DEALER_NAME = "๋”œ๋Ÿฌ";

public Dealer(String name) {
super(name);
public Dealer() {
super(DEALER_NAME);
}

@Override
Expand Down
8 changes: 7 additions & 1 deletion src/main/java/domain/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,19 @@

public class Player extends Participant {
private static final int BUST_THRESHOLD = 21;
private final int betAmount;

public Player(String name) {
public Player(String name, int betAmount) {
super(name);
this.betAmount = betAmount;
}

@Override
public boolean canHit() {
return getScore() <= BUST_THRESHOLD;
}

public int getBetAmount() {
return betAmount;
}
}
4 changes: 2 additions & 2 deletions src/main/java/domain/Players.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
public class Players {
private final List<Player> playerList;

public Players(List<String> names) {
public Players(List<String> names,List<Integer> betAmounts) {
Copy link

Choose a reason for hiding this comment

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

์ „๋‹ฌํ•  ์ •๋ณด๋“ค์ด ๋งŽ์•„์กŒ๋Š”๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•  ๋•Œ ์›์‹œํƒ€์ž…์˜ List ๋ณด๋‹ค ๊ฐ์ฒด๋กœ ์ „๋‹ฌํ•ด์ฃผ๋ฉด ์–ด๋–จ๊นŒ์š”?

validateDuplicate(names);
playerList = new ArrayList<>();
for (String name : names) {
playerList.add(new Player(name));
playerList.add(new Player(name, betAmounts.get(names.indexOf(name))));
Copy link

Choose a reason for hiding this comment

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

indexOf๋ฅด ์“ฐ๋ฉด ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์žˆ์„๊นŒ์š”? ์–ด๋–ป๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

}
}

Expand Down
9 changes: 9 additions & 0 deletions src/main/java/domain/Referee.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
public class Referee {
private static final int BUST_THRESHOLD = 21;

public boolean isBlackJack(int playerScore) {
return playerScore == BUST_THRESHOLD;
}

public Result judge(int playerScore, int dealerScore) {
if (playerScore > BUST_THRESHOLD) {
return Result.LOSE;
Expand All @@ -18,4 +22,9 @@ public Result judge(int playerScore, int dealerScore) {
}
Copy link

Choose a reason for hiding this comment

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

judge ๋ฉ”์„œ๋“œ์˜ if ๋ถ„๊ธฐ๋ฌธ์„ ์ข€ ์ฃผ์—ฌ๋ณผ ์ˆ˜ ์žˆ์„๊นŒ์š”? Player์™€ Dealer๋ฅผ ์ „๋‹ฌ๋ฐ›์•„์„œ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๋„๋ก ๊ตฌํ˜„ํ•ด๋ณด๋ฉด ์ค„์ผ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ์š”?

return Result.LOSE;
}

public double calculateProfit(Result result, int betAmount) {
return result.getProfitRate() * betAmount;
}

}
15 changes: 14 additions & 1 deletion src/main/java/domain/Result.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
package domain;

public enum Result {
WIN, LOSE, TIE
BLACKJACK(1.5),
WIN(1),
LOSE(-1),
TIE(0);

private final double profitRate;

Result(double profitRate) {
this.profitRate = profitRate;
}

public double getProfitRate() {
return profitRate;
}
}
16 changes: 16 additions & 0 deletions src/main/java/domain/Results.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package domain;

import java.util.HashMap;
import java.util.Map;

public class Results {
private final Map<Player, Result> results = new HashMap<>();

public void add(Player player, Result result) {
results.put(player, result);
}

public Result findByPlayer(Player player) {
return results.get(player);
}
}
12 changes: 12 additions & 0 deletions src/main/java/view/InputView.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package view;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
Expand All @@ -16,6 +17,17 @@ public List<String> inputPlayers() {
return playerName;
}

public List<Integer> inputBetAmount(List<String> names) {
List<Integer> betAmounts = new ArrayList<>();
for (String name : names) {
System.out.println(name + "์˜ ๋ฐฐํŒ… ๊ธˆ์•ก์€?");
int rawBetAmount = sc.nextInt();
sc.nextLine();
betAmounts.add(rawBetAmount);
}
return betAmounts;
}

public boolean askHit(String playerName) {
System.out.println(playerName + "๋Š” ํ•œ์žฅ์˜ ์นด๋“œ๋ฅผ ๋” ๋ฐ›๊ฒ ์Šต๋‹ˆ๊นŒ?(์˜ˆ๋Š” y, ์•„๋‹ˆ์˜ค๋Š” n)");
return sc.nextLine().equals("y");
Expand Down
29 changes: 23 additions & 6 deletions src/main/java/view/OutputView.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package view;

import domain.Card;
import domain.Dealer;
import domain.Participant;
import domain.Player;
import domain.Rank;
Expand Down Expand Up @@ -59,12 +60,34 @@ public void printFinalResult(Participant dealer, Map<Player, Result> results) {
printPlayerResults(results);
}

private void printPlayerResults(Map<Player, Result> results) {
for (Map.Entry<Player, Result> entry : results.entrySet()) {
System.out.println(entry.getKey().getName() + ": " + RESULT_NAME.get(entry.getValue()));
}
}

private void printDealerResult(Participant dealer, Map<Player, Result> results) {
int dealerWin = countResult(results, Result.LOSE);
int dealerLose = countResult(results, Result.WIN);
System.out.println(dealer.getName() + ": " + dealerWin + "์Šน " + dealerLose + "ํŒจ");
}
Comment on lines 69 to 73
Copy link

Choose a reason for hiding this comment

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

Dealer์˜ ์Šน์ˆ˜๋ฅผ ์„ธ๋Š”๋ฐ Player์˜ Lose ๋ฅผ ํ†ตํ•ด์„œ ์—ญ์œผ๋กœ ๊ณ„์‚ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ํ†ตํ•ด์„œ ๊ฐ€๋…์„ฑ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.


public void printFinalProfit(Dealer dealer, double dealerProfit, Map<Player, Integer> results) {
System.out.println("\n## ์ตœ์ข… ์ˆ˜์ต");
printDealerProfit(dealer, (int) dealerProfit);
printPlayerProfit(results);
}

private void printPlayerProfit(Map<Player, Integer> results) {
for (Map.Entry<Player, Integer> entry : results.entrySet()) {
System.out.println(entry.getKey().getName() + ": " + entry.getValue());
}
}

private void printDealerProfit(Dealer dealer, int profit) {
System.out.println(dealer.getName() + ": " + profit);
}

private int countResult(Map<Player, Result> results, Result target) {
int count = 0;
for (Result result : results.values()) {
Expand All @@ -75,12 +98,6 @@ private int countResult(Map<Player, Result> results, Result target) {
return count;
}

private void printPlayerResults(Map<Player, Result> results) {
for (Map.Entry<Player, Result> entry : results.entrySet()) {
System.out.println(entry.getKey().getName() + ": " + RESULT_NAME.get(entry.getValue()));
}
}

private String formatCards(List<Card> cards) {
List<String> cardNames = new ArrayList<>();
for (Card card : cards) {
Expand Down
58 changes: 58 additions & 0 deletions src/test/java/domain/CardBundleTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package domain;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

public class CardBundleTest {

private CardBundle cardBundle;

@BeforeEach
void beforeEach() {
cardBundle = new CardBundle();
}

@DisplayName("์ผ๋ฐ˜ ์นด๋“œ์˜ ์ ์ˆ˜๋ฅผ ํ•ฉ์‚ฐํ•œ๋‹ค")
@Test
void ์ผ๋ฐ˜_์นด๋“œ์˜_์ ์ˆ˜๋ฅผ_ํ•ฉ์‚ฐํ•œ๋‹ค() {
cardBundle.addCard(new Card(Rank.KING, Suit.SPADE)); // 10
cardBundle.addCard(new Card(Rank.FIVE, Suit.HEART)); // 5
assertThat(cardBundle.calculateScore()).isEqualTo(15);
}

@DisplayName("ACE๊ฐ€ ์žˆ๊ณ  ๋ฒ„์ŠคํŠธ๊ฐ€ ์•„๋‹ˆ๋ฉด 11๋กœ ๊ณ„์‚ฐํ•œ๋‹ค")
@Test
void ACE๊ฐ€_์žˆ๊ณ _๋ฒ„์ŠคํŠธ๊ฐ€_์•„๋‹ˆ๋ฉด_11๋กœ_๊ณ„์‚ฐํ•œ๋‹ค() {
cardBundle.addCard(new Card(Rank.ACE, Suit.SPADE)); // 11
cardBundle.addCard(new Card(Rank.KING, Suit.HEART)); // 10
assertThat(cardBundle.calculateScore()).isEqualTo(21);
}

@DisplayName("ACE๊ฐ€ ์žˆ๊ณ  ๋ฒ„์ŠคํŠธ๋ฉด 1๋กœ ๊ณ„์‚ฐํ•œ๋‹ค")
@Test
void ACE๊ฐ€_์žˆ๊ณ _๋ฒ„์ŠคํŠธ๋ฉด_1๋กœ_๊ณ„์‚ฐํ•œ๋‹ค() {
cardBundle.addCard(new Card(Rank.ACE, Suit.SPADE)); // 1
cardBundle.addCard(new Card(Rank.KING, Suit.HEART)); // 10
cardBundle.addCard(new Card(Rank.FIVE, Suit.DIAMOND)); // 5
assertThat(cardBundle.calculateScore()).isEqualTo(16);
}

@DisplayName("ACE๊ฐ€ ์—ฌ๋Ÿฌ ์žฅ์ด๋ฉด ํ•˜๋‚˜๋งŒ 11๋กœ ๊ณ„์‚ฐํ•œ๋‹ค")
@Test
void ACE๊ฐ€_์—ฌ๋Ÿฌ_์žฅ์ด๋ฉด_ํ•˜๋‚˜๋งŒ_11๋กœ_๊ณ„์‚ฐํ•œ๋‹ค() {
cardBundle.addCard(new Card(Rank.ACE, Suit.SPADE)); // 11
cardBundle.addCard(new Card(Rank.ACE, Suit.HEART)); // 1
assertThat(cardBundle.calculateScore()).isEqualTo(12);
}

@Test
void ์ดˆ๊ธฐ_๋‘์žฅ์ด_21์ด๋ฉด_๋ธ”๋ž™์žญ์ด๋‹ค() {
cardBundle.addCard(new Card(Rank.KING, Suit.HEART)); // 10
cardBundle.addCard(new Card(Rank.ACE, Suit.SPADE)); // 11

assertThat(cardBundle.isBlackjack()).isTrue();
}
}
14 changes: 13 additions & 1 deletion src/test/java/domain/CardTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

import org.junit.jupiter.api.Test;

class CardTest {
public class CardTest {
@Test
void ์นด๋“œ์˜_์ ์ˆ˜๋ฅผ_๋ฐ˜ํ™˜ํ•œ๋‹ค() {
Card card = new Card(Rank.KING, Suit.SPADE);
Expand All @@ -16,4 +16,16 @@ class CardTest {
Card card = new Card(Rank.ACE, Suit.HEART);
assertThat(card.getScore()).isEqualTo(1);
}

@Test
void ACE_์นด๋“œ๋Š”_isAce๊ฐ€_true์ด๋‹ค() {
Card card = new Card(Rank.ACE, Suit.HEART);
assertThat(card.isAce()).isTrue();
}

@Test
void ACE๊ฐ€_์•„๋‹Œ_์นด๋“œ๋Š”_isAce๊ฐ€_false์ด๋‹ค() {
Card card = new Card(Rank.KING, Suit.SPADE);
assertThat(card.isAce()).isFalse();
}
}
Loading