Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 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
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
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
dd01040
refactor: ํ…Œ์ŠคํŠธ ์ผ๊ด€์„ฑ ๋ฐ ์ผ€์ด์Šค ๋ณด๊ฐ•
picetea44 Mar 12, 2026
496bd15
fix: ๋ถˆํ•„์š”ํ•œ ํ”Œ๋ž˜๊ทธ ์ œ๊ฑฐ
picetea44 Mar 12, 2026
e0ed3a9
feat: ๋ฐฐํŒ… ๊ธˆ์•ก VO ์ƒ์„ฑ
picetea44 Mar 13, 2026
5f39da1
docs: ์ถฉ๋Œ ํ•ด๊ฒฐ
picetea44 Mar 13, 2026
282a2f7
refactor: ๋„๋ฉ”์ธ ํŒจํ‚ค์ง€ ๋ถ„๋ฆฌ
picetea44 Mar 13, 2026
a767b97
refactor: ENUM ๊ด€๋ก€์— ๋งž๊ฒŒ ์ˆ˜์ •
picetea44 Mar 13, 2026
36f2851
refactor: CardBundle๋‚ด calculateScore ๋ฉ”์„œ๋“œ ์ฑ…์ž„ ๋ถ„๋ฆฌ
picetea44 Mar 13, 2026
688c160
refactor: getCards ๋ฐ˜ํ™˜๊ฐ’ ๋ฐฉ์–ด์  ๋ณต์‚ฌ๋กœ ๋ณ€๊ฒฝ
picetea44 Mar 13, 2026
f07c141
refactor: OutputView๋‚ด ์ŠนํŒจ ๊ณ„์‚ฐ ๋กœ์ง ์ฑ…์ž„ ๋ถ„๋ฆฌ
picetea44 Mar 14, 2026
5f8f1c7
refactor: Deck์˜ ์˜๋„์— ๋งž๊ฒŒ ์ž๋ฃŒ๊ตฌ์กฐ ๋ณ€๊ฒฝ
picetea44 Mar 14, 2026
4cb6da4
feat: CardBundle์— ๋ธ”๋ž™์žญ ๋ฐ ๋ฒ„์ŠคํŠธ ํŒ๋‹จ ๋ฉ”์„œ๋“œ ์ž‘์„ฑ
picetea44 Mar 14, 2026
4494c5c
feat: Participant์— ์ƒํƒœ ๊ด€๋ จ ์œ„์ž„๋ฉ”์„œ๋“œ ์ถ”๊ฐ€ ๋ฐ ๋ฒ ํŒ… VO ์ถ”๊ฐ€
picetea44 Mar 14, 2026
a619629
feat: Referee์— ์ƒํƒœ๊ฐ’์— ๋”ฐ๋ฅธ ๋ถ„๊ธฐ ์ถ”๊ฐ€ ๋ฐ ์กฐ๊ฑด๋ฌธ ๊ฐœ์„ 
picetea44 Mar 14, 2026
fb52804
feat: Referee.judge() ์‹œ๊ทธ๋‹ˆ์ฒ˜ ๋ณ€๊ฒฝ
picetea44 Mar 14, 2026
0befc31
test: ํŒ์ •์— ๋”ฐ๋ฅธ ๋ฒ ํŒ… ์ˆ˜์ต ํ…Œ์ŠคํŠธ
picetea44 Mar 14, 2026
12e45c1
feat: ์ˆ˜์ต ์ถœ๋ ฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„
picetea44 Mar 14, 2026
8f0f62d
refactor: BlackjackController.printFinalCards() ๋ฉ”์„œ๋“œ ์ฑ…์ž„ ๋ถ„๋ฆฌ
picetea44 Mar 14, 2026
e614644
refactor: run ๋ฉ”์„œ๋“œ ๊ฐ€๋…์„ฑ ๊ฐœ์„ 
picetea44 Mar 14, 2026
083ab13
fix: ํ…Œ์ŠคํŠธ ๋ณด๊ฐ• ๋ฐ ๋ˆ„๋ฝ๋œ ํŒ์ • ๋กœ์ง ๊ฐœ์„ 
picetea44 Mar 14, 2026
2a13394
refactor: ๋„๋ฉ”์ธ ํŒจํ‚ค์ง€ ์žฌ๋ถ„๋ฅ˜ ๋ฐ ์ฑ…์ž„ ์žฌ๋ฐฐ์น˜
picetea44 Mar 14, 2026
d4c3f6e
refactor: BlackjackController.calculateProfits ๋ฉ”์„œ๋“œ ์ฑ…์ž„ ๋ถ„๋ฆฌ
picetea44 Mar 14, 2026
8fbccba
docs: TODO ๋ฆฌ์ŠคํŠธ์— ๊ตฌํ˜„๋œ ๋‚ด์—ญ ๋ฐ˜์˜
picetea44 Mar 14, 2026
c740604
docs: ์งˆ๋ฌธ ์‚ฌํ•ญ ์ •๋ฆฌ
picetea44 Mar 14, 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
98 changes: 46 additions & 52 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,76 +18,70 @@
- [x] 4
- [ ] 5 (์™„๋ฒฝํ•˜๊ฒŒ ์ถฉ์กฑ)

### ์„ ํƒํ•œ ์ ์ˆ˜์˜ ์ด์œ ๋ฅผ ์ ์–ด์ฃผ์„ธ์š”.
์ฒ˜์Œ์œผ๋กœ TDD๋ฅผ ์ ์šฉํ•˜์—ฌ ์ง„ํ–‰ํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ์ „์ฒด์ ์ธ ์„ค๊ณ„ ์—†์ด ์ผ๋‹จ ๋Œ์•„๊ฐ€๋Š” ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ํ•œ๋‹ค๋Š” ๊ฐœ๋…์ด ๋งŽ์ด ์ƒ์†Œํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ทธ๋กœ์ธํ•ด ๋ถ€๋ถ„์ ์œผ๋กœ indent๋‚˜ ๋ฌธ์ž์—ด ํฌ์žฅ์ด ์™„๋ฒฝํ•˜๊ฒŒ ์ ์šฉ๋˜์ง€ ๋ชปํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
<!-- ์ด์œ  ์ž‘์„ฑ -->


## ์–ด๋–ค ๋ถ€๋ถ„์— ์ง‘์ค‘ํ•˜์—ฌ ๋ฆฌ๋ทฐํ•ด์•ผ ํ• ๊นŒ์š”?

---
### ์ฃผ์ œ1 - TDD ๊ด€๋ จ
๋ฏธ์…˜ ์ดˆ๊ธฐ, ์ „์ฒด์ ์ธ ์„ค๊ณ„๊ฐ€ ๋จธ๋ฆฟ์†์— ์™„๋ฒฝํžˆ ๊ทธ๋ ค์ง€์ง€ ์•Š์€ ์ƒํƒœ์—์„œ TDD๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๋‹ˆ ์ƒ๋‹นํ•œ ๋ง‰๋ง‰ํ•จ์„ ๋А๊ผˆ์Šต๋‹ˆ๋‹ค. ๋™์ž‘์„ ๊ธฐ์ค€์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ฉฐ ์ƒํ–ฅ์‹์œผ๋กœ ์ ‘๊ทผํ•˜๋ ค ํ–ˆ์œผ๋‚˜, ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋‚˜ ๋ฉ”์„œ๋“œ๊ฐ€ ๋ณต์žกํ•˜๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” ๊ทธ ๋™์ž‘์˜ ๋‹จ์œ„ ์ž์ฒด๊ฐ€ ๋ชจํ˜ธํ•˜๊ฒŒ ๋‹ค๊ฐ€์™”์Šต๋‹ˆ๋‹ค.
ํ˜„์žฌ ๊ตฌ์กฐ๋Š” Player โ†’ CardBundle โ†’ Card์ฒ˜๋Ÿผ ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ผ๋ถ€ ๋กœ์ง์—์„œ ์ด๋ฏธ Player ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ๋ฐ›๊ณ  ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  CardBundle์— ์ง์ ‘ ์ ‘๊ทผํ•ด ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
์ด ๊ฒฝ์šฐ ํŠน์ • ํด๋ž˜์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์™ธ๋ถ€์—์„œ CardBundle์— ์ง์ ‘ ์ ‘๊ทผํ•˜๋Š” ๋Œ€์‹ , Player์—๊ฒŒ ์ ์ˆ˜๋ฅผ ์š”์ฒญํ•˜๊ณ  Player๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ CardBundle์— ์œ„์ž„ํ•˜๋Š” ๊ตฌ์กฐ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์™ธ๋ถ€์—์„œ๋Š” Player์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์•Œ ํ•„์š”๊ฐ€ ์—†์–ด์ง€๊ณ , ๋‚˜์ค‘์— ์นด๋“œ ๊ด€๋ฆฌ ๋ฐฉ์‹์ด๋‚˜ ์ ์ˆ˜ ๊ณ„์‚ฐ ๋กœ์ง์ด ๋ฐ”๋€Œ๋”๋ผ๋„ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์ด๋‚˜ ๋ ˆ์ด์–ด์˜ ๋ณ€๊ฒฝ์„ ์ค„์ผ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
Copy link
Member

Choose a reason for hiding this comment

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

์ข‹์€ ์ ‘๊ทผ์ด๋„ค์š”. Tell, Don't Ask ๋ผ๋Š” ์ด์•ผ๊ธฐ๋„ ๊ฒฐ๊ตญ์—๋Š” ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์™”๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”. ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ๊ณผ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒƒ, ๋ณ€๊ฒฝ๋œ๋‹ค๊ณ  ํ•˜๋ฉด ๊ทธ ์ „ํŒŒ๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐฉํ–ฅ์„ ๊พธ์ค€ํžˆ ๊ณ ๋ฏผํ•ด๋ณด์‹œ๋Š” ๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค! ์ด๋•Œ ๋” ์ค‘์š”ํ•œ ๊ฑด ๋‹ค๋ฅธ ํŒ€์›๋“ค์—๊ฒŒ ๋‚˜์˜ ์ฃผ์žฅ์„ ์ž˜ ์„ค๋“ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๊ฒ ๋„ค์š”.

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

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

Choose a reason for hiding this comment

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

์ฝ”๋“œ๋ฅผ ์ฝ๋Š”๋ฐ์—๋Š” ์ „ํ˜€ ๋ถˆํŽธํ•˜์ง€ ์•Š์•˜๊ณ , ์š”๊ตฌ์‚ฌํ•ญ ์ถ”๊ฐ€์— ๋งž๊ฒŒ ์ž˜ ๋ฐœ์ „์‹œ์ผœ์ฃผ์…จ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”. ๊ถ๊ธˆํ•œ ๋‚ด์šฉ์€ ๊ฐ ์ฝ”๋ฉ˜ํŠธ์— ๋‚จ๊ฒจ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ‘๐Ÿป


์ฒ˜์Œ์—๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์— ๋”ฐ๋ผ ํฐ ๋‹จ์œ„์—์„œ ์ž‘์€ ๋‹จ์œ„๋กœ ๊ธฐ๋Šฅ์„ ์ •์˜ํ•˜๋ฉฐ ๋‚ด๋ ค์™”๋Š”๋ฐ, ์ด ๊ณผ์ •์ด ๋‹ค์†Œ ์ถ”์ƒ์ ์ด๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์—…์—์„œ๋Š” ์„ค๊ณ„๊ฐ€ ๋ถˆํ™•์‹คํ•œ ์ƒํ™ฉ์—์„œ ์–ด๋–ค ์ง€์ ์„ ์‹œ์ž‘์ ์œผ๋กœ ์žก๊ณ  ์„ค๊ณ„๋ฅผ ๊ตฌ์ฒดํ™”ํ•ด ๋‚˜๊ฐ€๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ฐ์ฒด ๊ฐ„์˜ ํ˜‘๋ ฅ์ด ํ•„์ˆ˜์ ์ธ ์ƒํ™ฉ์—์„œ TDD์˜ ๋ฆฌ๋“ฌ์„ ์–ด๋–ป๊ฒŒ ์œ ์ง€ํ•˜์‹œ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

### ์ฃผ์ œ2 - ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ
ํ…Œ์ŠคํŠธ ๊ฐ€๋…์„ฑ๊ณผ ๊ฒ€์ฆ์„ ์œ„ํ•ด ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ฅผ ์–ด๋””๊นŒ์ง€ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋„ ๊นŠ์ด ๊ณ ๋ฏผํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์นด๋“œ ๋ฑ์—์„œ ์นด๋“œ๊ฐ€ ์ œ๋Œ€๋กœ ๋ฝ‘ํ˜”๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‹ค์ œ ๋กœ์ง์—์„œ๋Š” ์“ฐ์ด์ง€ ์•Š๋Š” deck.size()์™€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด 1) ๋ฌด์‹ํ•˜๊ฒŒ 52๋ฒˆ์˜ draw()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์˜ˆ์™ธ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹, 2) ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ์šฐํšŒํ•˜์—ฌ ๊ฒ€์ฆํ•˜๋Š” ๋ฐฉ์‹, 3) ์ž„์‹œ๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์ถ”ํ›„ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ์‹ ๋“ฑ์„ ๊ณ ๋ คํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ €๋Š” ํ˜„์žฌ ํ…Œ์ŠคํŠธ์˜ ๋ช…ํ™•์„ฑ์„ ์œ„ํ•ด ๋ฉ”์„œ๋“œ๋ฅผ ์œ ์ง€ํ•˜๋Š” ์ชฝ์„ ํƒํ–ˆ์ง€๋งŒ, ์ด๊ฒƒ์ด ์ ์ ˆํ•œ ๋ฐฉํ–ฅ์ด ๋งž์„์ง€ ์šฐ๋ ค๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋ฆฌ๋ทฐ์–ด๋‹˜์€ ์–ด๋–ค ๊ธฐ์ค€์„ ๊ฐ€์ง€๊ณ  ๊ณ„์‹ ๊ฐ€์š”?

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

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

๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์„ค๊ณ„๋Š”์ปค๋…• ์ง€์‹์˜ ํŒŒํŽธํ™”๋กœ ์ธํ•ด ๊ณณ๊ณณ์— ๋นˆํ‹ˆ์ด ์žˆ๋‹ค๋Š” ๋А๋‚Œ์„ ๋งŽ์ด ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๋ฆฌ๋ทฐ์–ด๋‹˜์ด ๋ณด์‹œ๊ธฐ์— ํ˜„์žฌ ์ œ ์ˆ˜์ค€์—์„œ ์–ด๋–ค ๋ถ€๋ถ„์„ ๊ฐ€์žฅ ์šฐ์„ ์ˆœ์œ„์— ๋‘๊ณ  ํ•™์Šตํ•ด์•ผ ํ• ๊นŒ์š”? ๋‹จ์ˆœํžˆ ํŒจํ„ด์„ ์™ธ์šฐ๋Š” ๊ฒƒ๋ณด๋‹ค, ์ œ๊ฐ€ ๋†“์น˜๊ณ  ์žˆ๋Š” ๊ธฐ๋ณธ๊ธฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ฆฌ๋ทฐ์–ด๋‹˜์˜ ์‹œ์„ ์—์„œ ๋ƒ‰์ฒ ํ•˜๊ฒŒ ์งš์–ด์ฃผ์‹œ๊ณ  ์•ž์œผ๋กœ์˜ ๊ณต๋ถ€ ๋ฐฉํ–ฅ์„ ์ œ์‹œํ•ด ์ฃผ์‹ค ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •๋ง ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
## โœ… ๊ฒŒ์ž„ ๊ธฐ๋Šฅ TO-DO

### ๊ฒŒ์ž„์— ์ฐธ์—ฌํ•  ์‚ฌ๋žŒ์˜ ์ด๋ฆ„ ์ž…๋ ฅ
---

- [x] ์‰ผํ‘œ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌ
- [x] ์ •์ƒ์ ์ธ ์ด๋ฆ„ ์•ž๋’ค์˜ ๊ณต๋ฐฑ ์ œ๊ฑฐ
- [x] `ใ…ใ…, ,ใ…‡ใ…‡` โ†’ ๋นˆ ๋ฌธ์ž์—ด์€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ
## ๋ฒ ํŒ… ๊ธฐ๋Šฅ TO-DO

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

- [x] ๋”œ๋Ÿฌ๋Š” 2๋ฒˆ์งธ ์นด๋“œ๋Š” ์ถœ๋ ฅํ•˜์ง€ ์•Š์Œ
- [x] ์ด๋ฏธ ์ •ํ•ด์ง„ ๋ฑ์—์„œ ๋žœ๋ค ๋ถ„๋ฐฐ
- [x] ๊ฐ ํ”Œ๋ ˆ์ด์–ด์˜ ๋ฒ ํŒ… ๊ธˆ์•ก์„ ์ž…๋ ฅ๋ฐ›๋Š” ๊ธฐ๋Šฅ
- [x] ๋ฒ ํŒ… ๊ธˆ์•ก ๊ฒ€์ฆ (์–‘์ˆ˜๋งŒ ํ—ˆ์šฉ)
- [x] `BettingMoney` ๊ฐ’ ๊ฐ์ฒด ์ƒ์„ฑ

### ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ์นด๋“œ๋ฅผ ๋” ๋ฐ›์„์ง€ ๋ฌป๋Š” ๊ธฐ๋Šฅ
### ๋ธ”๋ž™์žญ ํŒ๋ณ„

- [x] ์ด๋ฏธ ๋ฝ‘ํžŒ ์นด๋“œ๋Š” ๋‹ค์‹œ ๋‚˜์˜ค์ง€ ์•Š๊ฒŒ ์ฒ˜๋ฆฌ
- [x] ํ•œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ n์„ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ํ”Œ๋ ˆ์ด์–ด ์ข…๋ฃŒ
- [x] `CardBundle`์— `isBlackjack()` ์ถ”๊ฐ€ (์นด๋“œ 2์žฅ && ์ ์ˆ˜ 21)
- [x] `CardBundle`์— `isBust()` ์ถ”๊ฐ€ (์ ์ˆ˜ > 21)
- [x] `Participant`์— ์œ„์ž„ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€

### ๋”œ๋Ÿฌ๊ฐ€ ์นด๋“œ๋ฅผ ๋” ๋ฐ›๋Š”์ง€ ์ถœ๋ ฅ
### ์ŠนํŒจ ํŒ์ • ๊ฐœ์„ 

- [x] 16 ์ดํ•˜๋ผ ํ•œ ์žฅ ๋ฐ›์„ ๋•Œ๋งˆ๋‹ค ๋ฌธ์žฅ ์ถœ๋ ฅ
- [x] ์—ฌ๋Ÿฌ ์žฅ ๋ฐ›์„ ๊ฒฝ์šฐ ํ•œ ์žฅ์”ฉ ๋ฌธ์žฅ ๋ฐ˜๋ณต ์ถœ๋ ฅ
- [x] ์ฒ˜์Œ๋ถ€ํ„ฐ 17 ์ด์ƒ์ด๋ฉด ์นด๋“œ ์ถ”๊ฐ€ ์—†์ด ์•ˆ๋‚ด ๋ฌธ์žฅ ์ถœ๋ ฅ ์—ฌ๋ถ€ ๊ฒฐ์ •
- [x] `Outcome`์— `BLACKJACK_WIN` ์ถ”๊ฐ€ ๋ฐ ๋ฐฐ์œจ(profitRate) ํ•„๋“œ ๋„์ž…
- [x] `BlackjackRule` ๋ธ”๋ž™์žญ ํŒ์ • ๋กœ์ง ์ถ”๊ฐ€
- [x] ํ”Œ๋ ˆ์ด์–ด ๋ธ”๋ž™์žญ + ๋”œ๋Ÿฌ ๋ธ”๋ž™์žญ โ†’ ๋ฌด์Šน๋ถ€
- [x] ํ”Œ๋ ˆ์ด์–ด ๋ธ”๋ž™์žญ + ๋”œ๋Ÿฌ ์ผ๋ฐ˜ โ†’ ๋ธ”๋ž™์žญ ์Šน๋ฆฌ (1.5๋ฐฐ)
- [x] ๋”œ๋Ÿฌ๋งŒ ๋ธ”๋ž™์žญ โ†’ ํ”Œ๋ ˆ์ด์–ด ํŒจ๋ฐฐ
- [x] ๋”œ๋Ÿฌ ๋ฒ„์ŠคํŠธ โ†’ ๋‚จ์•„์žˆ๋Š” ํ”Œ๋ ˆ์ด์–ด ์Šน๋ฆฌ

### ์นด๋“œ ๊ฐ์ฒด ์„ค๊ณ„
### ์ˆ˜์ต ๊ณ„์‚ฐ

- [x] ์ „์ฒด ์นด๋“œ ๋ฑ์„ ๋ฏธ๋ฆฌ ์ƒ์„ฑ
- [x] deck์„ ๋žœ๋ค ์ถ”์ถœ ๊ธฐ๋Šฅ์œผ๋กœ ๊ตฌํ˜„
- [x] suit, rank๋ฅผ ๊ฐ๊ฐ Enum์œผ๋กœ ๊ด€๋ฆฌ
- [x] ์นด๋“œ ๋ฌธ์–‘, ํ‘œ๊ธฐ ์ ์ˆ˜ ๊ด€๋ฆฌ ๋ฐฉ์‹ ๊ฒฐ์ •
- [x] `BettingMoney`์— `calculateProfit(Outcome)` ๊ตฌํ˜„ (๊ธˆ์•ก ร— ๋ฐฐ์œจ)
- [x] ๋”œ๋Ÿฌ ์ˆ˜์ต ๊ณ„์‚ฐ (ํ”Œ๋ ˆ์ด์–ด ์ˆ˜์ต ํ•ฉ์‚ฐ์˜ ๋ถ€ํ˜ธ ๋ฐ˜์ „) โ€” `ProfitResult`

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

- [x] rank ๊ฐ’๋งŒ ์ถ”์ถœํ•˜์—ฌ ํ•ฉ์‚ฐ
- [x] ์ดํ•ฉ ๊ณ„์‚ฐ ๋กœ์ง ๊ตฌํ˜„
- [x] `Player`์— `BettingMoney` ํ•„๋“œ ์ถ”๊ฐ€
- [x] `Players` ์ƒ์„ฑ ๋ฐฉ์‹ ๋ณ€๊ฒฝ (์ด๋ฆ„ + ๊ธˆ์•ก)

### ๊ฒฐ๊ณผ ์ถœ๋ ฅ
### ์ž…์ถœ๋ ฅ ์ˆ˜์ •

- [x] ๋”œ๋Ÿฌ๊ฐ€ ๊ฐ€์ง„ ์นด๋“œ ๋ชฉ๋ก ์ถœ๋ ฅ
- [x] ๋”œ๋Ÿฌ ์นด๋“œ ์ ์ˆ˜ ํ•ฉ ์ถœ๋ ฅ
- [x] ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฐ€์ง„ ์นด๋“œ ๋ชฉ๋ก ์ถœ๋ ฅ
- [x] ํ”Œ๋ ˆ์ด์–ด ์นด๋“œ ์ ์ˆ˜ ํ•ฉ ์ถœ๋ ฅ
- [x] `InputView`์— ๋ฒ ํŒ… ๊ธˆ์•ก ์ž…๋ ฅ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€
- [x] `OutputView` ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๊ธˆ์•ก์œผ๋กœ ์ถœ๋ ฅํ•˜๋„๋ก ๋ณ€๊ฒฝ
- [x] `BlackjackController`์— ๋ฒ ํŒ… ์ž…๋ ฅ ๋‹จ๊ณ„ ๋ฐ ์ˆ˜์ต ์ถœ๋ ฅ ๋‹จ๊ณ„ ์ถ”๊ฐ€

### ์ŠนํŒจ ์ถœ๋ ฅ
### ํ…Œ์ŠคํŠธ

- [x] ๊ณ„์‚ฐ๋œ ํ•ฉ์— ๋”ฐ๋ผ ์ŠนํŒจ ํŒ๋ณ„
- [x] `BettingMoney` ๊ฒ€์ฆ ํ…Œ์ŠคํŠธ (์–‘์ˆ˜, 0, ์Œ์ˆ˜)
- [x] `CardBundle` ๋ธ”๋ž™์žญ/๋ฒ„์ŠคํŠธ ํŒ๋ณ„ ํ…Œ์ŠคํŠธ
- [x] `BlackjackRule` ๋ธ”๋ž™์žญ ์ผ€์ด์Šค ํŒ์ • ํ…Œ์ŠคํŠธ (8๊ฐœ ์ผ€์ด์Šค)
- [x] ์ˆ˜์ต ๊ณ„์‚ฐ ํ…Œ์ŠคํŠธ (๋ธ”๋ž™์žญ ์Šน๋ฆฌ, ์ผ๋ฐ˜ ์Šน๋ฆฌ, ๋ฌด์Šน๋ถ€, ํŒจ๋ฐฐ)
- [x] `ProfitResult` ๋”œ๋Ÿฌ ์ˆ˜์ต ์ง‘๊ณ„ ํ…Œ์ŠคํŠธ
68 changes: 44 additions & 24 deletions src/main/java/controller/BlackjackController.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package controller;

import domain.Dealer;
import domain.Deck;
import domain.Player;
import domain.Players;
import domain.Referee;
import domain.Result;
import domain.participant.Dealer;
import domain.card.Deck;
import domain.participant.Player;
import domain.participant.Players;
import domain.game.BlackjackRule;
import domain.game.Outcome;
import domain.game.ProfitResult;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
Expand All @@ -24,28 +25,32 @@ public BlackjackController(InputView inputView, OutputView outputView) {

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

private void playAllPlayerTurns(Players players, Deck deck) {
for (Player player : players.getGamePlayers()) {
playPlayerTurn(player, deck);
private Map<String, Integer> inputBets(List<String> names) {
Map<String, Integer> nameToBet = new LinkedHashMap<>();
for (String name : names) {
nameToBet.put(name, inputView.inputBettingAmount(name));
}
return nameToBet;
}

private void dealInitialCards(Dealer dealer, Players players, Deck deck) {
for (Player player : players.getGamePlayers()) {
player.addCard(deck.draw());
private void dealInitialTwoCards(Dealer dealer, Players players, Deck deck) {
for (int i = 0; i < 2; i++) {
Copy link
Member

Choose a reason for hiding this comment

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

2๋Š” ๋ธ”๋ž™์žญ์—์„œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋Š” ์ˆ˜๋„ค์š”!

for (Player player : players.getGamePlayers()) {
player.addCard(deck.draw());
}
dealer.addCard(deck.draw());
}
dealer.addCard(deck.draw());
}

private void printInitialState(Dealer dealer, Players players, List<String> names) {
Expand All @@ -54,7 +59,13 @@ private void printInitialState(Dealer dealer, Players players, List<String> name
for (Player player : players.getGamePlayers()) {
outputView.printPlayerCards(player);
}
System.out.println();
outputView.printNewLine();
}

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

private void playPlayerTurn(Player player, Deck deck) {
Expand All @@ -71,17 +82,26 @@ private void playDealerTurn(Dealer dealer, Deck deck) {
}
}

private void printFinalState(Dealer dealer, Players players) {
System.out.println();
private void printFinalCards(Dealer dealer, Players players) {
outputView.printNewLine();
outputView.printFinalCards(dealer);
for (Player player : players.getGamePlayers()) {
outputView.printFinalCards(player);
}
Referee referee = new Referee();
Map<Player, Result> results = new LinkedHashMap<>();
}

private ProfitResult calculateProfits(Dealer dealer, Players players) {
BlackjackRule rule = new BlackjackRule();
Map<Player, Integer> playerProfits = new LinkedHashMap<>();
for (Player player : players.getGamePlayers()) {
results.put(player, referee.judge(player.getScore(), dealer.getScore()));
Outcome outcome = rule.judge(player, dealer);
playerProfits.put(player, player.calculateProfit(outcome));
}
outputView.printFinalResult(dealer, results);
return new ProfitResult(playerProfits);
}

private void printProfitResult(Dealer dealer, Players players) {
ProfitResult profitResult = calculateProfits(dealer, players);
outputView.printProfitResult(dealer.getName(), profitResult);
}
}
14 changes: 0 additions & 14 deletions src/main/java/domain/Player.java

This file was deleted.

31 changes: 0 additions & 31 deletions src/main/java/domain/Players.java

This file was deleted.

21 changes: 0 additions & 21 deletions src/main/java/domain/Referee.java

This file was deleted.

5 changes: 0 additions & 5 deletions src/main/java/domain/Result.java

This file was deleted.

5 changes: 0 additions & 5 deletions src/main/java/domain/Suit.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package domain;
package domain.card;

import java.util.Objects;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package domain;
package domain.card;

import java.util.ArrayList;
import java.util.List;
Expand All @@ -13,21 +13,32 @@ public CardBundle() {
}

public int calculateScore() {
int score = 0;
boolean hasAce = false;
int basicScore = calculateBasicScore();
boolean hasAce = hasAce();

return applyAceBonus(basicScore, hasAce);
}

private int calculateBasicScore() {
int score = 0;
for (Card card : cards) {
score += card.getScore();
}
return score;
}

private boolean hasAce() {
for (Card card : cards) {
if (card.isAce()) {
hasAce = true;
return true;
}
}
return applyAceBonus(score, hasAce);
return false;
}
Comment on lines +22 to 37
Copy link
Member

Choose a reason for hiding this comment

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

Stream์˜ anyMatch, mapToInt ๋“ฑ์„ ํ•™์Šตํ•ด๋ณด๊ณ , ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ์šฉํ•ด๋ณผ๊นŒ์š”? ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ์‚ฌํ•ญ ์ค‘ ํ•˜๋‚˜์ธ indent ๊ด€๋ จ์„ ์ถฉ์กฑ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”.


private int applyAceBonus(int score, boolean hasAce) {
if (isSoftHand(score, hasAce)) {
return score + 10;
return score + ACE_BONUS;
}
return score;
}
Expand All @@ -40,7 +51,15 @@ public void addCard(Card card) {
cards.add(card);
}

public boolean isBlackjack() {
return cards.size() == 2 && calculateScore() == BUST_THRESHOLD;
}

public boolean isBust() {
return calculateScore() > BUST_THRESHOLD;
}

public List<Card> getCards() {
return cards;
return List.copyOf(cards);
}
}
Loading