Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
e791dae
feat: ์‚ฌ์ „ํ•™์Šต Ace ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
ParkJiYeoung8297 Mar 5, 2026
23b6f2f
feat(domain): ์นด๋“œ ๊ด€๋ จ enum ๋„๋ฉ”์ธ ์ถ”๊ฐ€
ParkJiYeoung8297 Mar 5, 2026
c842532
feat: Dealer, Player ๋„๋ฉ”์ธ ํ…œํ”Œ๋ฆฟ ์ƒ์„ฑ
Sauter001 Mar 5, 2026
0827d8f
feat(Controller): ํ”Œ๋ ˆ์ด์–ด ์ด๋ฆ„ ์ž…๋ ฅ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
ParkJiYeoung8297 Mar 5, 2026
cfa77d3
test: Controller ํ…Œ์ŠคํŠธ ๊ธฐ๋ณธ ์„ธํŒ… ์ถ”๊ฐ€
ParkJiYeoung8297 Mar 5, 2026
390b538
docs: ์ฐธ๊ฐ€์ž ์ž…๋ ฅ ๊ธฐ๋Šฅ ๋ช…์„ธ
Sauter001 Mar 5, 2026
ee81344
feat: ์ถ”๊ฐ€ ์นด๋“œ ์—ฌ๋ถ€ ์ž…๋ ฅ ๊ตฌํ˜„
ParkJiYeoung8297 Mar 5, 2026
b018db5
docs: Readme ๊ธฐ๋Šฅ ์ถ”๊ฐ€
ParkJiYeoung8297 Mar 5, 2026
d25051c
feat(sauter001): ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ์นด๋“œ 2 ์žฅ์”ฉ ๋ฐฐ๋ถ„
Sauter001 Mar 5, 2026
7b596d6
feat(sauter001): ๋”œ๋Ÿฌ ์นด๋“œ ๋ฐฐ๋ถ„
Sauter001 Mar 5, 2026
015b0b9
feat: ์ฐธ๊ฐ€์ž ์ด๋ฆ„๊ณผ ์นด๋“œ ๊ฐœ์ˆ˜, ์นด๋“œ ์ถœ๋ ฅ
ParkJiYeoung8297 Mar 5, 2026
4f24260
docs: Readme update
ParkJiYeoung8297 Mar 5, 2026
12be3c5
feat(sauter001): ๋”œ๋Ÿฌ๊ฐ€ ์ถ”๊ฐ€ ์นด๋“œ๋ฅผ ๋ฐ›์•„์•ผ ํ•  ๋•Œ ์ฒ˜๋ฆฌ
Sauter001 Mar 5, 2026
f7b4483
refactor: Controller์—์„œ ์ดˆ๊ธฐํ™” ๊ธฐ๋Šฅ Servcie ์ฝ”๋“œ๋กœ ๋ถ„๋ฆฌ
ParkJiYeoung8297 Mar 5, 2026
b691c7a
refactor: ์นด๋“œ ์‚ฌ์ด์ฆˆ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€
ParkJiYeoung8297 Mar 5, 2026
94cf2f9
test(service): ์นด๋“œ ์ƒ์„ฑ ๋ฐ ์‚ฌ์ด์ฆˆ ๊ฒ€์ฆ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
ParkJiYeoung8297 Mar 5, 2026
9c1765e
docs: Readme update
ParkJiYeoung8297 Mar 5, 2026
c954cf6
feat(domain): ์นด๋“œ ํ•ฉ๊ณ„ ๊ธฐ๋Šฅ ๊ตฌํ˜„
ParkJiYeoung8297 Mar 6, 2026
e8b4052
test(domain) : ํ•ฉ๊ณ„ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์ •์ƒ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
ParkJiYeoung8297 Mar 6, 2026
a8fa42d
test: ์—์ด์Šค ๊ณ ๋ คํ•œ ์นด๋“œ ์ ์ˆ˜ ํ•ฉ๊ณ„ ํ…Œ์ŠคํŠธ
Sauter001 Mar 6, 2026
ab9e634
feat(sauter001): Ace 1/11 ๊ทœ์น™ ๊ณ ๋ คํ•ด ์นด๋“œ ํ•ฉ๊ณ„ ๊ณ„์‚ฐ
Sauter001 Mar 6, 2026
f0c3269
feat: ๋ฒ„์ŠคํŠธ ํŒ๋‹จ ์—ฌ๋ถ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„
ParkJiYeoung8297 Mar 6, 2026
61d9f36
test(domain): ๋ฒ„์ŠคํŠธ ํŒ๋‹จ ์—ฌ๋ถ€ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
ParkJiYeoung8297 Mar 6, 2026
14a6ab1
docs: Readme update
ParkJiYeoung8297 Mar 6, 2026
1d2f59d
fix: ์—์ด์Šค 11์  ์ ์šฉ ์•ˆ๋˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ
Sauter001 Mar 6, 2026
b680504
refactor: ๋”œ๋Ÿฌ๊ฐ€ ์นด๋“œ๋ฅผ ๋ฝ‘๋Š” ๋ฉ”์†Œ๋“œ๋ช… ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณ€๊ฒฝ
Sauter001 Mar 6, 2026
f115217
feat: ์นด๋“œ ๊ฒฐ๊ณผ ํŒ๋‹จ ๊ธฐ๋Šฅ ๊ตฌํ˜„
ParkJiYeoung8297 Mar 6, 2026
cdaa334
docs: Readme update
ParkJiYeoung8297 Mar 6, 2026
6f32ee7
feat(sauter001): ๋ธ”๋ž™์žญ ์Šน๋ถ€ ๊ฒฐ๊ณผ ํด๋ž˜์Šค ์ƒ์„ฑ
Sauter001 Mar 6, 2026
66ade47
feat: ๋ธ”๋ž™์žญ ์Šน๋ถ€ ๊ณ„์‚ฐ (burst ๊ณ ๋ ค)
ParkJiYeoung8297 Mar 6, 2026
2996c91
docs: Readme update
ParkJiYeoung8297 Mar 6, 2026
218c546
feat(sauter001): ๋ฌด์Šน๋ถ€ ์ถ”๊ฐ€
Sauter001 Mar 6, 2026
340eb07
feat: ๋”œ๋Ÿฌ ์นด๋“œ ์ถœ๋ ฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„
ParkJiYeoung8297 Mar 6, 2026
f9bfc7a
feat: ๋ชจ๋“  player burst ํŒ๋‹จ ๋กœ์ง ์ถ”๊ฐ€
ParkJiYeoung8297 Mar 6, 2026
40f0a6e
docs: readme update
ParkJiYeoung8297 Mar 6, 2026
e5cbf54
fix: ์ปจํ”Œ๋ฆญํŠธ ํ•ด๊ฒฐ
Sauter001 Mar 6, 2026
5f4e26d
feat(sauter001): ํ”Œ๋ ˆ์ด์–ด ์ŠนํŒจ ์ง‘๊ณ„ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
Sauter001 Mar 6, 2026
7140bf6
feat: ์นด๋“œ 21 ์ดˆ๊ณผ์ด๋ฉด ํ„ด ๋„˜์–ด๊ฐ€๊ธฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
ParkJiYeoung8297 Mar 6, 2026
5e400dd
docs: Readme update
ParkJiYeoung8297 Mar 6, 2026
2c69996
test(sauter001): K Q J ๊ฐ๊ฐ 10์œผ๋กœ ๊ณ„์‚ฐ
Sauter001 Mar 6, 2026
d4ab913
refactor: ๋”œ๋Ÿฌ ์ƒ์„ฑ ๋กœ์ง์„ controller์—์„œ service๋กœ ์ด๋™
ParkJiYeoung8297 Mar 6, 2026
bb80e8d
test(domain): ๋”œ๋Ÿฌ ์ถ”๊ฐ€ ์นด๋“œ ๋ฐ›๊ธฐ ์—ฌ๋ถ€ ์ •์ƒ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
ParkJiYeoung8297 Mar 6, 2026
cfc0363
test: ๋”œ๋Ÿฌ/์ฐธ๊ฐ€์ž ์ŠนํŒจ ํŒ์ • ๋กœ์ง ํ…Œ์ŠคํŠธ
Sauter001 Mar 6, 2026
80ffeb9
chore: ๊ณต๋ฐฑ๊ณผ ๊ฐ™์€ ์ž๋ฐ” ์ปจ๋ฒค์…˜ ๋ฐ˜์˜
ParkJiYeoung8297 Mar 6, 2026
0190b35
docs: Readme update
ParkJiYeoung8297 Mar 6, 2026
47b252e
fix: ๋”œ๋Ÿฌ ์ด๋ฆ„ ์ƒ์ˆ˜ํ™”๋ฅผ Dealer ํด๋ž˜์Šค๋กœ ์ด๋™
ParkJiYeoung8297 Mar 10, 2026
521b513
test: ๋”œ๋Ÿฌ ์ด๋ฆ„ ์ƒ์ˆ˜ํ™”์— ๊ด€ํ•œ ํ…Œ์ŠคํŠธ ๋ณ€์ˆ˜ ์ˆ˜์ •
ParkJiYeoung8297 Mar 10, 2026
c65ffeb
refactor: PlayerList๋ฅผ Players ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜์œผ๋กœ ๋ชจ๋‘ ์ˆ˜์ •
ParkJiYeoung8297 Mar 10, 2026
ca90174
fix: ์นด๋“œ ์ƒ์„ฑ ๋กœ์ง์„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌ
ParkJiYeoung8297 Mar 10, 2026
aa54ea2
chore: ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” import ์ œ๊ฑฐ ๋ฐ ๊ณต๋ฐฑ ์ •๋ฆฌ
ParkJiYeoung8297 Mar 10, 2026
de2aee7
refactor: ๋”œ๋Ÿฌ ์ƒ์ˆ˜์˜ ์ฑ…์ž„์„ Dealer ํด๋ž˜์Šค๋กœ ์ด๋™
ParkJiYeoung8297 Mar 10, 2026
76a7600
refactor & test: ํ…Œ์ŠคํŠธ์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ ์‚ญ์ œ
ParkJiYeoung8297 Mar 10, 2026
efbdcd0
docs: Readme update
ParkJiYeoung8297 Mar 10, 2026
43b952d
feat: ๋ฐฐํŒ… ๊ธˆ์•ก ์ž…์ถœ๋ ฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„
ParkJiYeoung8297 Mar 11, 2026
51e71cb
feat: ์ „์ฒด ๋ฐฐํŒ… ๊ธˆ์•ก ๊ตฌํ•˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€
ParkJiYeoung8297 Mar 11, 2026
a5eac50
test: ๋ฐฐํŒ… ๊ธˆ์•ก ๊ตฌํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
ParkJiYeoung8297 Mar 11, 2026
299e57a
test: ์ฐธ๊ฐ€์ž burst๋ฉด ๋ฐฐํŒ… ๊ธˆ์•ก 0 ๋˜๋Š” ์ •์ƒ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
ParkJiYeoung8297 Mar 11, 2026
c0f8714
fix: burst์‹œ ๋ฐฐํŒ… ๊ธˆ์•ก ๋ฆฌ์…‹์ด ์•„๋‹ˆ๋ผ ๋งˆ์ด๋„ˆ์Šค๋กœ ์ˆ˜์ •
ParkJiYeoung8297 Mar 11, 2026
cc5b709
feat: ์ตœ์ข… ์ˆ˜์ต ์ถœ๋ ฅํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„
ParkJiYeoung8297 Mar 12, 2026
fb87774
feat: ๋ฐฐํŒ… ๊ธˆ์•ก ์˜ˆ์™ธ ์‹œ ์žฌ์ž…๋ ฅ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
ParkJiYeoung8297 Mar 12, 2026
4fa86c2
feat: ํ”Œ๋ ˆ์ด์–ด burst๋ฉด ์ƒ๊ธˆ ์žƒ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€
ParkJiYeoung8297 Mar 12, 2026
1a75855
feat: ๋”œ๋Ÿฌ ์ˆ˜์ต ๊ณ„์‚ฐ ๊ธˆ์•ก ๊ธฐ๋Šฅ ๊ตฌํ˜„
ParkJiYeoung8297 Mar 12, 2026
16c4615
test: ๋”œ๋Ÿฌ์™€ ํ”Œ๋ ˆ์ด์–ด ์ˆ˜์ต ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
ParkJiYeoung8297 Mar 12, 2026
f88f10a
Merge remote-tracking branch 'upstream/parkjiyeoung8297' into step2
ParkJiYeoung8297 Mar 12, 2026
224e4c0
docs: Readme update
ParkJiYeoung8297 Mar 13, 2026
4b2dafb
test: ์ƒ๊ธˆ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ถ”๊ฐ€
ParkJiYeoung8297 Mar 13, 2026
4147342
refactor: ์ „์ฒด ์นด๋“œ Deck ๋„๋ฉ”์ธ ์ถ”๊ฐ€ ๋ฐ Dealer ์‚ญ์ œ ๋ฆฌํŒฉํ† ๋ง
ParkJiYeoung8297 Mar 13, 2026
e7718ab
refactor: ์Šน๋ถ€ ๊ณ„์‚ฐ ๋กœ์ง ๋ฆฌํŒฉํ† ๋ง
ParkJiYeoung8297 Mar 13, 2026
d94b0cc
fix&refactor: ๋ฐฐํŒ… ์ƒ๊ธˆ ๊ตฌํ•˜๋Š” ๋กœ์ง ์ˆ˜์ • ๋ฐ ๋ฆฌํŒฉํ† ๋ง
ParkJiYeoung8297 Mar 13, 2026
980f6bb
chore: ๋ฉ”์„œ๋“œ ์ˆœ์„œ ๋ฐ ๊ณต๋ฐฑ ์ •๋ฆฌ
ParkJiYeoung8297 Mar 13, 2026
de30afc
fix: dealer๋ฅผ Game์™ธ๋ถ€์—์„œ ์ฃผ์ž…ํ•˜๋„๋ก ์ˆ˜์ •
ParkJiYeoung8297 Mar 13, 2026
5d425df
test: ๋ฆฌํŒฉํ† ๋ง ๋Œ€์ƒ ํ…Œ์ŠคํŠธ ์ˆ˜์ •
ParkJiYeoung8297 Mar 13, 2026
18ef51f
fix: ๋ธ”๋ž™์žญ ์—ฌ๋ถ€ ํŒ๋‹จ ์˜ค๋ฅ˜ ์ˆ˜์ •
ParkJiYeoung8297 Mar 13, 2026
b1d09ff
fix: ์ถ”๊ฐ€ ์นด๋“œ ๋ฐ›์€ ํ›„ ์ถœ๋ ฅํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์ •
ParkJiYeoung8297 Mar 13, 2026
3907f88
refactor: ํ•˜๋“œ ์ฝ”๋”ฉ ์ƒ์ˆ˜ํ™”
ParkJiYeoung8297 Mar 13, 2026
dacc0d0
test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ •
ParkJiYeoung8297 Mar 13, 2026
be40df3
docs: Readme update
ParkJiYeoung8297 Mar 13, 2026
081470b
docs: Readme update
ParkJiYeoung8297 Mar 13, 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
130 changes: 129 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,4 +149,132 @@ shuffle์€ ๋žœ๋ค ์ถ”์ถœ์ฒ˜๋Ÿผ ํ†ต์ œํ•  ์ˆ˜ ์—†๋Š” ๊ฐ’์ด๋ผ,
์ถ”๊ฐ€๋กœ, ์ง€๊ธˆ ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ด๋ฅผ ์ด์šฉํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์ž˜ ๊ตฌํ˜„๋˜์–ด์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค!
(์ฐธ๊ณ  ํ…Œ์ŠคํŠธ ์ฝ”๋“œ : BlackjackServiceTest์˜ ์…”ํ”Œ_์นด๋“œ_์ˆœ์„œ๋Œ€๋กœ_๋ฐฐ๋ถ€_์ •์ƒ_ํ…Œ์ŠคํŠธ())

3. ๋” ์ถ”๊ฐ€ํ•ด์•ผํ•  ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ์„์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
3. ๋” ์ถ”๊ฐ€ํ•ด์•ผํ•  ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ์„์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.


-----

## ์‚ฌ์ดํด 2

### ๊ธฐ๋Šฅ
- [x] ๋ฐฐํŒ… ๊ธˆ์•ก ์ž…์ถœ๋ ฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„
- [x] ์ „์ฒด ๋ฐฐํŒ… ๊ธˆ์•ก ๊ตฌํ•˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- [x] ์ตœ์ข… ์ˆ˜์ต ์ถœ๋ ฅํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„
- [x] ๋ฐฐํŒ… ๊ธˆ์•ก ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
- [x] ๋”œ๋Ÿฌ ์ˆ˜์ต ๊ณ„์‚ฐ ๊ธˆ์•ก ๊ธฐ๋Šฅ ๊ตฌํ˜„
- ํ”Œ๋ ˆ์ด์–ด burst๋ฉด ์ƒ๊ธˆ ์žƒ๋Š”๋‹ค.
- ๋ธ”๋ž™์žญ์ด๋ฉด 1.5๋ฐฐ๋ฅผ ๋ฐ›๋Š”๋‹ค.

*์ปค๋ฐ‹์ด ๊ผฌ์—ฌ์„œ ์ด์ „ ์ปค๋ฐ‹๊นŒ์ง€ ๋ชจ๋‘ ๋œจ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿฅฒ
"feat: ๋ฐฐํŒ… ๊ธˆ์•ก ์ž…์ถœ๋ ฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„" ๋ถ€ํ„ฐ ์‚ฌ์ดํด 2์˜ ์ปค๋ฐ‹์ž…๋‹ˆ๋‹ค.

๊ทœ์น™ :
1. ๋ฒ„์ŠคํŠธ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ, ๋”œ๋Ÿฌ๋ฅผ ์ด๊ธฐ๋ฉด ์ด๊ธด๋‹ค.
2. ๋”œ๋Ÿฌ๊ฐ€ ๋ฒ„์ŠคํŠธ ์ผ๊ฒฝ์šฐ, ๋ฒ„์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ด๊ธด๋‹ค.
3. ๋”œ๋Ÿฌ๊ฐ€ ๋ฒ„์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ, ๋”œ๋Ÿฌ๋ณด๋‹ค ์ˆซ์ž๊ฐ€ ํฌ๋ฉด ์Šน, ๊ฐ™์œผ๋ฉด ๋ฌด์Šน๋ถ€, ์ž‘๊ฑฐ๋‚˜ ๋ฒ„์ŠคํŠธ๋ฉด ํŒจ
์ด๋•Œ, ๋ธ”๋ž™์žญ์€ ์ƒ๊ธˆ์˜ 1.5๋ฐฐ๋ฅผ ๋ฐ›๋Š”๋‹ค.

๋ฆฌํŒฉํ† ๋ง์—์„œ ๊ณ ๋ คํ•  ํ”ผ๋“œ๋ฐฑ
1. ํ”Œ๋ ˆ์ด์–ด๋Š” ์นด๋“œ๋ฅผ ๊บผ๋‚ด๋Š” ํ–‰์œ„๋ฅผ ํ•˜๋Š”๋ฐ ์ƒ์†๋ฐ›๋Š” ๋”œ๋Ÿฌ๋Š” ๋ถˆํ•„์š”ํ•œ ํ–‰์œ„์ธ๋ฐ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋Š”๋ฐ์š”
๋”œ๋Ÿฌ๊ฐ€ ๋ถˆํ•„์š”ํ•œ ํ–‰์œ„๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์—ด์–ด๋‘๋Š”๊ฒŒ ๋งž์„๊นŒ์š”?
2. ๋„๋ฉ”์ธ์ด DTO๋ฅผ ์•Œ์•„๋„ ๋ ๊นŒ์š”? ๋„๋ฉ”์ธ๊ณผ DTO์— ๋Œ€ํ•ด์„œ ๊ฐ๊ฐ ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹œ๋Š”์ง€ ๊ถ๊ธˆํ•ด์š”


----

## ์‚ฌ์ดํด 2


### ๊ธฐ๋Šฅ
- [x] ๋ฐฐํŒ… ๊ธˆ์•ก ์ž…์ถœ๋ ฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„
- [x] ์ „์ฒด ๋ฐฐํŒ… ๊ธˆ์•ก ๊ตฌํ•˜๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- [x] ์ตœ์ข… ์ˆ˜์ต ์ถœ๋ ฅํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„
- [x] ๋ฐฐํŒ… ๊ธˆ์•ก ์˜ˆ์™ธ ์‹œ ์žฌ์ž…๋ ฅ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- [x] ํ”Œ๋ ˆ์ด์–ด burst๋ฉด ์ƒ๊ธˆ ์žƒ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- [x] ๋”œ๋Ÿฌ ์ˆ˜์ต ๊ณ„์‚ฐ ๊ธˆ์•ก ๊ธฐ๋Šฅ ๊ตฌํ˜„

### ์‚ฌ์ดํด1 ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์—ญ
- [x] Player์˜ ํ•„๋“œ List<Card>๋ฅผ ์ผ๊ธ‰์ปฌ๋ ‰์…˜ Cards๋กœ ๋ณ€๊ฒฝ
- ๊ธฐ์กด Cards๋Š” ์ „์ฒด ์นด๋“œ๋ฅผ ์˜๋ฏธํ•ด์„œ Player์—์„œ ์‚ฌ์šฉ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ ์ˆ˜์ • ๊ณผ์ •์—์„œ ์ „์ฒด ์นด๋“œ๋Š” Deck์ด๋ผ๋Š” ๋„๋ฉ”์ธ์„ ์ถ”๊ฐ€ํ•˜๊ณ , Cards๋Š” Player๊ฐ€ ๋“ค๊ณ ์žˆ๋Š” ์นด๋“œ ๋ญ‰์น˜๋กœ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
- [x] Dealer์™€ Player์˜ ์ƒ์† ๊ด€๊ณ„๋ฅผ ์ œ๊ฑฐ
- Dealer์™€ Player์˜ ์ƒ์† ๊ด€๊ณ„๋กœ ์ธํ•ด Dealer๊ฐ€ ๋ชฐ๋ผ๋„ ๋˜๋Š” Player์˜ ํ–‰๋™์„ ์ƒ์†๋ฐ›๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž Player์™€ ๊ฒน์น˜๋Š” ํ–‰๋™์€ Player์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋”œ๋Ÿฌ์˜ ๊ทœ์น™์€ ๊ณง ๊ฒŒ์ž„์˜ ๊ทœ์น™์ด๊ธฐ์— Game์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.
- [x] ๋„๋ฉ”์ธ์—์„œ DTO ์ง์ ‘ ์ƒ์„ฑํ–ˆ๋˜ ๊ฒƒ์„ Service์—๊ฒŒ ์ฑ…์ž„ ์ด๋™
- [x] Controller์—์„œ ์ถœ๋ ฅํ•˜๋Š” ์ฑ…์ž„์„ OutputView๋กœ ์ด๋™
- [x] ํ•˜๋“œ ์ฝ”๋”ฉ ์ƒ์ˆ˜ํ™”
- [x] ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” import ์ •๋ฆฌ

### To ๋ฆฌ๋ทฐ์–ด
1.Dealer - Player
๋”œ๋Ÿฌ์˜ ํ–‰๋™(ex. ์ž์‹ ์ด ๊ฐ€์ง„ ์นด๋“œ์˜ ํ•ฉ ๊ตฌํ•˜๊ธฐ)์€ Player์™€ ์ค‘๋ณต์ด๊ณ ,
๋”œ๋Ÿฌ์˜ ๊ทœ์น™(ex. 16์ดํ•˜์ด๋ฉด ์นด๋“œ๋ฅผ ์ถ”๊ฐ€๋กœ ๋ฐ›๋Š”๋‹ค.)์€ ๊ฒŒ์ž„์˜ ๊ทœ์น™์ด๊ธฐ์— Game์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ฐ์ฒด์—์„œ์˜ ์ฑ…์ž„์€ ํ˜„์‹ค์„ธ๊ณ„์™€ ์ฐจ์ด๊ฐ€ ์žˆ์–ด์„œ, ๊ผญ ๋”œ๋Ÿฌ๊ฐ€ ํ•˜๋Š” ํ–‰๋™์ด๋ผ๊ณ  Dealer์— ์žˆ์–ด์•ผํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์‘์ง‘๋„๋ฅผ ๊ณ ๋ คํ•ด ๋‹ค๋ฅธ ๊ณณ์— ์œ„์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ,
์ด๋Ÿฐ ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ํ”ผ๋“œ๋ฐฑ ๋ฐ›๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

(์ด๋Ÿฐ ๊ตฌ์กฐ โ†’ ์ฝ”๋“œ ์ค‘๋ณต์„ ์ค„์ด๊ธฐ ์œ„ํ•ด Dealer ๊ฐ์ฒด๋ฅผ ์—†์• ๊ณ , ๊ด€๋ จ ํ–‰๋™๊ณผ ๊ทœ์น™์„ ์ ์ ˆํ•œ ํด๋ž˜์Šค์— ๋‘”๋‹ค)

2. Domain
์ง€๊ธˆ ๋ณ€๊ฒฝํ•œ ๋„๋ฉ”์ธ ๊ตฌ์กฐ๊ฐ€ ์ž˜ ์งœ์—ฌ์ง„ ๊ฒƒ์ธ์ง€ ํ”ผ๋“œ๋ฐฑ ๋ฐ›๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์–ด์ฐŒ๋ณด๋ฉด Game์ด aggregate root์™€ ๊ฐ™๋‹ค๊ณ  ๋ณด์ด๋Š”๋ฐ, ์ด๋Ÿฐ ๊ตฌ์กฐ๊ฐ€ ์ ์ ˆํ• ๊นŒ์š”?


3. ํ…Œ์ŠคํŠธ ์ˆ˜์ •
๋„๋ฉ”์ธ์ด ๋Œ€๊ฑฐ ์ˆ˜์ •๋˜๋‹ˆ, ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ๋‹ค์‹œ ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
๋ณธ ์ฝ”๋“œ๋ž‘ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ์˜์กด์„ฑ์ด ํฐ๊ฑฐ ๊ฐ™์€๋ฐ, ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ๋ณ€๊ฒฝ์— ์œ ์—ฐํ•˜๊ฒŒ๋” ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ์š”?

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


*ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ˜์˜ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋„๋ฉ”์ธ ์žฌ๊ตฌ์„ฑ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์—์„œ ๋งŽ์€ ํŒŒ์ผ์ด ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค.๐Ÿฅฒ
*๊นƒ์„ ์ œ๋Œ€๋กœ ๋ชป ๋งŒ์ ธ์„œ, ์‚ฌ์ดํด 1์˜ ์ปค๋ฐ‹ ๋‚ด์šฉ๋„ ์ „๋ถ€ ๋œจ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (๋ณด๊ธฐ ํž˜๋“œ์‹ค๊ฑฐ ๊ฐ™์•„์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค..)
*์‚ฌ์ดํด 1์—์„œ ๋‹ฌ์•„์ฃผ์‹  ๋ฆฌ๋ทฐ ๋‹ต๊ธ€์€ 14์ผ(ํ† )๋‚ด๋กœ ์ž‘์„ฑํ•ด๋‘๊ฒ ์Šต๋‹ˆ๋‹ค!

------

## ๋ฏธ์…˜ ์ค‘ ๊ธฐ๋ก
### 1. ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋กœ ์ธํ•ด ์ˆ˜์ •ํ•œ ์œ„์น˜ ๊ฐœ์ˆ˜
๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ณผ์ •์—์„œ ํ˜„์žฌ ๊ตฌ์กฐ๋กœ ํ™•์žฅํ•˜๊ธฐ์— ์–ด๋ ค์›€์ด ์žˆ์—ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋Œ€๋ถ€๋ถ„์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋„๋ฉ”์ธ ์•ˆ์œผ๋กœ ๋„ฃ์–ด์„œ, ๋ณ€๊ฒฝ์— ์œ ์—ฐํ•˜๋„๋ก ๋„๋ฉ”์ธ์„ ์žฌ๊ตฌ์„ฑํ•˜์˜€๋‹ค.

1)BlackjackResult์‚ญ์ œ
์›๋ž˜๋Š” BlackjackResult์—์„œ ์ŠนํŒจ์™€ ๊ฐ™์€ ๊ฒŒ์ž„์˜ ๊ธฐ๋ก์„ ์ €์žฅํ–ˆ๋Š”๋ฐ,
๋ฐฐํŒ… ์ƒ๊ธˆ์ด๋ผ๋Š” ๊ฒฐ๊ณผ๊ฐ€ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ ๋˜๋ฉด์„œ, ์ถœ๋ ฅ ๊ฒฐ๊ณผ(response)๋ฅผ ๋„๋ฉ”์ธ์œผ๋กœ ๊ฐ–๋Š” ๊ฒƒ์€ ํ™•์žฅ์„ฑ์ด ์•ˆ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.
๊ทธ๋ž˜์„œ BlackjackResult๋ฅผ ์—†์• ๊ณ , Game์ด๋ผ๋Š” ๋„๋ฉ”์ธ์—์„œ ๊ทธ๋•Œ๊ทธ๋–„ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฉ”์„œ๋“œ๋งŒ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

2)Deck ๋„๋ฉ”์ธ ์ถ”๊ฐ€, Cards ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜ ์ˆ˜์ •
Cards๋ผ๋Š” ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜์„ ์นด๋“œ ์ „์ฒด(52์žฅ)๋ฅผ ํƒ€๊นƒ์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋‹ค ๋ณด๋‹ˆ, Player๊ฐ€ ๊ฐ–๋Š” ์นด๋“œ ๋”๋ฏธ๋Š” Cards๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.
์ „์ฒด ์นด๋“œ๋Š” ๋žœ๋ค ์ƒ์„ฑ, ์นด๋“œ ์ถ”์ถœ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ฑ…์ž„๋งŒ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฐ€์ง€๋Š” ์นด๋“œ ๋ญ‰์น˜ Cards์™€ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.
๊ทธ๋ž˜์„œ Player๊ฐ€ ์†Œ์œ ํ•œ ์นด๋“œ ๋ญ‰์น˜๋ฅผ Cards๋ผ๋Š” ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด, ์ „์ฒด ์นด๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Deck์ด๋ผ๋Š” ๋„๋ฉ”์ธ์„ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค.
CardGenerator๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„์„œ ์ „์ฒด ์นด๋“œ ์ƒ์„ฑ์— ๊ด€ํ•ด์„œ Deck์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜์˜€๋‹ค.
์นด๋“œ ์ƒ์„ฑ์„ ์ €๋ฒˆ์— ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ•ด์„œ ๋ถ„๋ฆฌํ•˜๋‹ˆ ์ด๋ถ€๋ถ„์— ๋Œ€ํ•œ ์ˆ˜์ •์€ ํŽธ๋ฆฌํ–ˆ๋‹ค.
(CardGenerator๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„์„œ ๋ฉ”์„œ๋“œ๋กœ๋งŒ ํ˜ธ์ถœํ•˜๋ฉด ๋˜๋‹ˆ๊นŒ.)

4)Game ๋„๋ฉ”์ธ ์ถ”๊ฐ€, Dealer ๋„๋ฉ”์ธ ์‚ญ์ œ
Game์— ๋Œ€ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด๋‚˜ ๊ทœ์น™๋“ค์ด Player, Dealer, Cards ๋“ฑ์— ํฉ์–ด์ ธ์žˆ์–ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์— ์–ด๋ ค์›€์ด ์žˆ์—ˆ๋‹ค.
๋”ฐ๋ผ์„œ, ๋ธ”๋ž™์žญ ๊ฒŒ์ž„ ๊ทœ์น™์— ๋Œ€ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ๋ชจ์•„๋‘๊ธฐ ์œ„ํ•ด Game์ด๋ผ๋Š” ๋„๋ฉ”์ธ์„ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค.

Game์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋‚˜๋‹ˆ Dealer์˜ ํ•„๋“œ๋Š” Player์™€ ๊ฒน์น˜๊ณ , Dealer์˜ ๊ทœ์น™์€ Game์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ๋ณด์•˜๋‹ค.
(16์ดํ•˜์ด๋ฉด ์นด๋“œ๋ฅผ ๋” ๋ฐ›๋Š”๋‹ค๋Š” Dealer์˜ ๊ทœ์น™์€ ๊ฒŒ์ž„์˜ ๊ทœ์น™์ด๋ผ๊ณ  ๋ณผ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.)
Game๊ณผ Dealer๋Š” ํ•ญ์ƒ 1๋Œ€ 1๋กœ ์กด์žฌํ•˜๊ธฐ ๋–„๋ฌธ์—, ๊ฐ์ฒด ์ƒ์„ฑ-์†Œ๋ฉธ ์ฃผ๊ธฐ๊ฐ€ ๊ฐ™๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ๊ด€๋ จ ๋กœ์ง์„ Game์— ๋‘์—ˆ๋‹ค.

์ถ”๊ฐ€๋กœ Dealer๋Š” ๊ฒŒ์ž„์„ ๋งŒ๋“ค ๋•Œ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ–ˆ๋‹ค. ๊ทธ๋ž˜์•ผ GameTest์—์„œ Dealer์˜ ์นด๋“œ๋ฅผ ์กฐ์ž‘ํ•ด์ค„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ฉฐ ์˜์กด์„ฑ์„ ์ค„์ด๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐœ๋ฐœ์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

### 2. ์‚ฌ์ดํด1 ๋•Œ๋ณด๋‹ค ์ˆ˜์ • ๋ฒ”์œ„๊ฐ€ ์ค„์—ˆ๋Š”๊ฐ€/๋Š˜์—ˆ๋Š”๊ฐ€
์‚ฌ์ดํด 1์—์„œ ๋‹จํŽธ์ ์ธ ๊ฒฐ๊ณผ ์ถœ๋ ฅ์—๋งŒ ์ง‘์ค‘ํ•ด์„œ ๋„๋ฉ”์ธ์„ ์„ค๊ณ„ํ•ด์„œ ๊ทธ๋Ÿฐ์ง€, ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋ฅผ ์œ„ํ•ด ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ๋ง‰๋ง‰ํ•˜๊ณ  ์–ด๋ ค์› ๋‹ค.
๊ทธ๋ž˜์„œ ๋„๋ฉ”์ธ์„ ์žฌ๊ตฌ์„ฑํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์—, ์‚ฌ์ดํด1 ๋•Œ๋ณด๋‹ค ์ˆ˜์ • ๋ฒ”์œ„๊ฐ€ ํ›จ์”ฌ ์ปธ๋‹ค.
๋ณ€๊ฒฝ๋œ ๊ตฌ์กฐ์—์„œ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์‹œ Game์— ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ์ ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋œ๋‹ค.

### 3. ๊ทœ์น™ ์ ์šฉ์œผ๋กœ ๋ณ€๊ฒฝํ•œ ์ฝ”๋“œ 1๊ณณ
(If-Then) ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๊ฐ’์ด ๋ณด์ธ๋‹ค๋ฉด, โ†’ ์ƒ์ˆ˜ํ™”ํ•œ๋‹ค.
๋„๋ฉ”์ธ์œผ๋กœ ๋กœ์ง์„ ์ด๋™ํ•˜๋ฉด์„œ, ์ƒ์ˆ˜๋„ ์ ์ ˆํ•œ ๋„๋ฉ”์ธ์œผ๋กœ ์ด๋™ํ•ด ์‘์ง‘์„ฑ ์žˆ๊ฒŒ ์ˆ˜์ •ํ•˜์˜€๋‹ค.

(If-Then) ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃจ๋Š” ํด๋ž˜์Šค์—ฌ๋„ ๋ชฉ์ ์ด ๋‹ค๋ฅด๋ฉด, โ†’ ํด๋ž˜์Šค๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค. (e.g. Cards -> Deck, Hand)
Cards๋ฅผ Cards(Player ์†Œ์œ  ์นด๋“œ), Deck(์ „์ฒด์นด๋“œ)์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๋ฆฌํŒฉํ† ๋งํ•˜์˜€๋‹ค.

### 4. ํ…Œ์ŠคํŠธ๊ฐ€ ์„ค๊ณ„๋ฅผ ๋„์šด ์ˆœ๊ฐ„ 1ํšŒ
๊ฒŒ์ž„ ๊ทœ์น™์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ,
์ด๋Ÿฐ ๊ทœ์น™์ด Player, Dealer, Cards ๋“ฑ ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์— ๊ฑธ์ณ์„œ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด ๋ถˆํŽธํ–ˆ๋‹ค.
ํ…Œ์ŠคํŠธ ๊ตฌํ˜„์„ ํ†ตํ•ด ๋„๋ฉ”์ธ์˜ ์ฑ…์ž„ ๋ถ„๋ฆฌ์— ๋Œ€ํ•œ ์žฌ๊ตฌ์„ฑ ํ•„์š” ์‹ ํ˜ธ๋ฅผ ํฌ์ฐฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ์„ค๊ณ„์— ๋„์›€์ด ๋˜์—ˆ๋‹ค.
5 changes: 0 additions & 5 deletions src/main/java/constant/GameConstant.java

This file was deleted.

106 changes: 56 additions & 50 deletions src/main/java/controller/BlackjackController.java
Original file line number Diff line number Diff line change
@@ -1,23 +1,21 @@
package controller;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;

import domain.BlackjackResult;
import domain.Cards;
import domain.Dealer;
import domain.Deck;
import domain.Game;
import domain.Player;
import domain.Players;
import domain.dto.CardContentDto;
import domain.dto.FinalCardDto;
import service.BlackjackService;
import utils.generator.ShuffledCardsGenerator;
import view.InputView;
import view.OutputView;

public class BlackjackController {
private static final int MAX_RETRY = 10;

private final InputView inputView;
private final BlackjackService blackjackService;

Expand All @@ -27,65 +25,64 @@ public BlackjackController(BlackjackService blackjackService) {
}

public void run() {
Cards cards = blackjackService.generateCards(new ShuffledCardsGenerator());
List<String> names = inputNames();
Game game = doInitialGameSetting();

Dealer dealer = blackjackService.createDealer(cards);
OutputView.displayCardDistribution(names);
Players playerList = blackjackService.createPlayers(names, cards);
addAdditionalCard(game);
addDealerAdditionalCard(game);

List<CardContentDto> firstCardContents = getCardContentDtos(dealer, playerList);
OutputView.displayCardContent(firstCardContents);
Players players = addAdditionalCard(playerList, cards);
List<FinalCardDto> finalCards = blackjackService.getFinalCardDtos(game);
OutputView.displayFinalCard(finalCards);

if (!players.isAllPlayerBurst()) {
blackjackService.determineAdditionalCardOfDealer(dealer, cards);
}
// ์ตœ์ข… ๊ฒฐ๊ณผ ์ถœ๋ ฅ
OutputView.displayMatchResult(blackjackService.getPlayerResultDto(game));
OutputView.displayBettingResult(blackjackService.getBettingScoreDto(game));
}

printFinalCards(dealer, players);
private Game doInitialGameSetting() {
Deck deck = blackjackService.generateCards();
List<String> names = inputNames();

// ์ตœ์ข… ์ŠนํŒจ
BlackjackResult blackjackResult = BlackjackResult.from(dealer, players);
OutputView.displayMatchResult(blackjackResult.toResultDto());
}
Players players = blackjackService.createPlayers(names, deck);
Game game = blackjackService.createGame(deck, players);
setPlayerBetting(players);
OutputView.displayCardDistribution(names);

public List<CardContentDto> getCardContentDtos(Dealer dealer, Players playerList) {
List<CardContentDto> firstCardContents = new ArrayList<>();
firstCardContents.add(new CardContentDto(dealer.getName(), List.of(dealer.getFirstCard())));
for (Player player : playerList) {
firstCardContents.add(new CardContentDto(player.getName(), player.getCards()));
}
return firstCardContents;
List<CardContentDto> firstCardContents = blackjackService.getCardContentDtos(game);
OutputView.displayCardContents(firstCardContents);
return game;
}

public Players addAdditionalCard(Players players, Cards cards) {
for (Player player : players) {
String name = player.getName();
boolean hasCard = hasAdditionalCard(name);
handCardWithRetry(player, hasCard, cards, name);
private void addDealerAdditionalCard(Game game) {
if (!game.isAllPlayerBurst()) {
while (game.needAdditionalCard()) {
game.addDealerAdditionalCard();
OutputView.displayDealerCard();
}
}
return players;
}

public void addAdditionalCard(Game game) {
OutputView.displayCardContents(blackjackService.getCardContentDtos(game));
for (Player player : game.getPlayers()) {
boolean hasCard = hasAdditionalCard(player.getName());

private void handCardWithRetry(Player player, boolean hasCard, Cards cards, String name) {
while (hasCard) {
if (player.isBust()) {
break;
while (hasCard) {
if (player.isBust()) {
break;
}
game.addCard(player);
OutputView.displayCardContent(blackjackService.getCardContentDto(player));
hasCard = hasAdditionalCard(player.getName());
}
player.add(cards.pop());
OutputView.displayCardContent(List.of(player.toCardContentDto()));
hasCard = hasAdditionalCard(name);
}
}

public void printFinalCards(Dealer dealer, Players players) {
List<FinalCardDto> finalCards = new ArrayList<>();
finalCards.add(dealer.toFinalCardDto());
for (Player player : players) {
finalCards.add(player.toFinalCardDto());

public void setPlayerBetting(Players playerList) {
for (Player player : playerList) {
int bettingScore = inputBettingPrice(player.getName());
player.betMoney(bettingScore);
}
OutputView.displayFinalCard(finalCards);
}

private List<String> inputNames() {
Expand All @@ -94,8 +91,18 @@ private List<String> inputNames() {
);
}

public int inputBettingPrice(String name) {
return doRetry(
() -> {
return inputView.readBettingPrice(name);
}
Comment on lines +96 to +98

Choose a reason for hiding this comment

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

๊ด„ํ˜ธ๋กœ ๋ฌถ์„ ์ด์œ ๊ฐ€ ์žˆ์„๊นŒ์š”~?

);
}

private boolean hasAdditionalCard(String name) {
return doRetry(() -> inputView.readAdditionalCard(name));
return doRetry(
() -> inputView.readAdditionalCard(name)
);
}

private <T> T doRetry(Supplier<T> action) {
Expand All @@ -105,8 +112,7 @@ private <T> T doRetry(Supplier<T> action) {
return action.get();
} catch (IllegalArgumentException e) {
retry++;
System.out.println(e.getMessage());

OutputView.printError(e.getMessage());
if (retry >= MAX_RETRY) {
throw new IllegalStateException("์ž…๋ ฅ ํšŸ์ˆ˜๋ฅผ ์ดˆ๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.");
}
Expand Down
77 changes: 0 additions & 77 deletions src/main/java/domain/BlackjackResult.java

This file was deleted.

3 changes: 3 additions & 0 deletions src/main/java/domain/Card.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

import java.util.Objects;

import domain.enums.CardRank;
import domain.enums.CardShape;

public class Card {
private final CardShape cardShape;
private final CardRank cardRank;
Expand Down
Loading