Skip to content

[๐Ÿš€ ์‚ฌ์ดํด2 - ๋ฏธ์…˜ (๋ธ”๋ž™์žญ ๋ฐฐํŒ…)] ๋‹ฌ์ˆ˜ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค.#1125

Open
soohyun1904 wants to merge 23 commits intowoowacourse:soohyun1904from
soohyun1904:step2
Open

Conversation

@soohyun1904
Copy link

@soohyun1904 soohyun1904 commented Mar 14, 2026

์ฒดํฌ ๋ฆฌ์ŠคํŠธ

  • ๋ฏธ์…˜์˜ ํ•„์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ชจ๋‘ ๊ตฌํ˜„ํ–ˆ๋‚˜์š”?
  • Gradle test๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ, ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ํ†ต๊ณผํ–ˆ๋‚˜์š”?
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋‚˜์š”?

1. ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•œ ์ปจํŠธ๋กค๋Ÿฌ-๋„๋ฉ”์ธ ๋ถ„๋ฆฌ

๊ธฐ์กด์—๋Š” ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ธ๋ฑ์Šค๋กœ Players๋ฅผ ์ง์ ‘ ์ˆœํšŒํ•˜๋ฉฐ ์กฐ์ž‘ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

for (int i = 0; i < game.playerCount(); i++) {
    while (game.canPlayerHit(i)) { ... }
}

์ด๋ฅผ HitDecision, TurnDisplay, BetDecision ๊ฐ™์€ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ฐ”๊ฟ”์„œ
ํ„ด ์ˆœํšŒ์™€ ๊ฒŒ์ž„ ๋กœ์ง์„ Game ๋‚ด๋ถ€๋กœ ์ด๋™์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

game.betPlayers(name -> InputView.readBetAmount(name));
game.playPlayerTurns(
    name -> Parser.parseDrawInput(readYesOrNo(name)).isHit(),
    OutputView::printPlayerHand
);

์ด ๋ฐฉํ–ฅ์ด ๋งž๋Š”์ง€, ์˜คํžˆ๋ ค ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด์„œ ๋ณต์žกํ•ด์ง„ ๊ฑด ์•„๋‹Œ์ง€ ํ”ผ๋“œ๋ฐฑ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

2. ์ถœ๋ ฅ ์ฝœ๋ฐฑ์˜ ๋„๋ฉ”์ธ ๊ฒฐํ•ฉ ๋ฌธ์ œ

hitํ•  ๋•Œ๋งˆ๋‹ค ์ค‘๊ฐ„ ์นด๋“œ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋Š” ์š”๊ตฌ์‚ฌํ•ญ ๋•Œ๋ฌธ์— TurnDisplay ์ฝœ๋ฐฑ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
์ž…๋ ฅ์€ ์ฝœ๋ฐฑ์œผ๋กœ, ์ถœ๋ ฅ์€ ๊ฒฐ๊ณผ ๊ฐ์ฒด๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋‹น๊ฒจ๊ฐ€๋Š” ๋ฐฉ์‹์ด ๊น”๋”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ํ„ด ์ค‘๊ฐ„ ์ถœ๋ ฅ์€ ๋‹น๊ฒจ๊ฐˆ ์ˆ˜ ์—†์–ด์„œ ์ฝœ๋ฐฑ์œผ๋กœ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋งŒ ์ถœ๋ ฅ ํ˜•์‹์ด ๋ฐ”๋€Œ๋ฉด ์ฝœ๋ฐฑ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋„ ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.
ํ˜„์žฌ๋Š” (String name, List<String> cardNames)๋งŒ ๋„˜๊ธฐ๊ณ  ์žˆ๋Š”๋ฐ, ์ด ์ •๋„๋ฉด ๊ดœ์ฐฎ์€ ๊ฑด์ง€, ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ์˜๊ฒฌ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

3. ์˜์กด ๊ด€๊ณ„ โ€” "์•„๋Š” ๊ฒƒ"์˜ ๊ธฐ์ค€

ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ฐ˜ํ™˜๊ฐ’, ํ•„๋“œ, ๋‚ด๋ถ€ ์ƒ์„ฑ ๋“ฑ ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜์— ํƒ€์ž…์ด ๋“ฑ์žฅํ•˜๋ฉด ์˜์กด์ด ์ƒ๊ธฐ๋Š” ๊ฒƒ์œผ๋กœ ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ์ค€์œผ๋กœ Players์— ์žˆ๋˜ hitPlayer(int index, TrumpCard card) ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  forEach(Consumer<Player>)๋กœ ๋ฐ”๊ฟจ์Šต๋‹ˆ๋‹ค.
Players๋Š” TrumpCard์™€ ์ง์ ‘ ํ˜‘๋ ฅํ•  ์ด์œ ๊ฐ€ ์—†๊ณ  ์ „๋‹ฌ๋งŒ ํ•˜๋Š” ์ค‘๊ฐ„์ž์˜€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ•œํŽธ BlackjackGame์˜ forEach ๋žŒ๋‹ค ์•ˆ์—์„œ player.hit(deck.deal())์„ ํ˜ธ์ถœํ•˜๋Š”๋ฐ, ์ด๋•Œ TrumpCard๋ฅผ ์•„๋Š” ๊ฑด ๋žŒ๋‹ค๋ฅผ ์ž‘์„ฑํ•œ Game์ด์ง€ ์‹คํ–‰ํ•˜๋Š” Players๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.
"์ง์ ‘ ํ˜‘๋ ฅํ•˜๋ฉด ์•Œ์•„๋„ ๋˜๊ณ , ์ „๋‹ฌ๋งŒ ํ•˜๋ฉด ์•Œ ํ•„์š” ์—†๋‹ค"๋Š” ๊ธฐ์ค€์ด ๋งž๋Š”์ง€ ํ”ผ๋“œ๋ฐฑ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

4. ๊ธฐ๋Šฅ ๋ณ€๊ฒฝ ์‹œ ํ…Œ์ŠคํŠธ๊ฐ€ ๊นจ์ง€๋Š” ๋ฒ”์œ„

Hand์˜ isBust()๋ฅผ Player๊ฐ€ ์œ„์ž„ํ•˜๋„๋ก ๋ฆฌํŒฉํ† ๋งํ–ˆ๋Š”๋ฐ, ๊ทธ๋ž˜๋„ Hand์˜ ํ–‰์œ„๊ฐ€ ๋ฐ”๋€Œ๋ฉด PlayerTest, DealerTest์˜ canHit() ํ…Œ์ŠคํŠธ๋„ ํ•จ๊ป˜ ๊นจ์ง‘๋‹ˆ๋‹ค. ์œ„์ž„์„ ํ•˜๋”๋ผ๋„ ํ•˜์œ„ ๊ฐ์ฒด์˜ ํ–‰์œ„ ์ž์ฒด๊ฐ€ ๋ฐ”๋€Œ๋ฉด ์ƒ์œ„ ํ…Œ์ŠคํŠธ๋„ ์˜ํ–ฅ์„ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ•˜์œ„ ๋ณ€๊ฒฝ์ด ์ง์ ‘ ์˜์กดํ•˜๋Š” ์ƒ์œ„ ํ…Œ์ŠคํŠธ๊นŒ์ง€ ๊นจ๋œจ๋ฆฌ๋Š” ๊ฒŒ ์ž์—ฐ์Šค๋Ÿฌ์šด ๊ฑด์ง€, ์•„๋‹ˆ๋ฉด ์ƒ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์•ˆ ๊นจ์ง€๋„๋ก ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑด์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
์–ด๋””๊นŒ์ง€ ๊นจ์ง€๋Š” ๊ฒŒ ์ •์ƒ์ด๊ณ  ์–ด๋””๋ถ€ํ„ฐ๊ฐ€ ์„ค๊ณ„ ๋ฌธ์ œ์˜ ์‹ ํ˜ธ์ธ์ง€ ๊ธฐ์ค€์ด ์žˆ์„๊นŒ์š”?

5. ์ƒํƒœ ํŒจํ„ด(State Pattern) ์ ์šฉ

ํ˜„์žฌ hit ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ canHit()์˜ if๋ฌธ์œผ๋กœ ํŒ๋‹จํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ƒํƒœ ํŒจํ„ด์„ ์ ์šฉํ•˜๋ฉด Player์˜ ์ƒํƒœ(ํžˆํŒ… ์ค‘, ์Šคํ…Œ์ด, ๋ฒ„์ŠคํŠธ, ๋ธ”๋ž™์žญ)์— ๋”ฐ๋ผ ํ–‰์œ„๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„์— ์ ํ˜€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ฏธ์…˜์— ์ƒํƒœ ํŒจํ„ด์„ ์ ์šฉํ•œ๋‹ค๋ฉด ์–ด๋–ค ๊ตฌ์กฐ๊ฐ€ ์ข‹์„์ง€ ๋ฐฉํ–ฅ์„ ์žก๊ณ  ์‹ถ์–ด์„œ ์กฐ์–ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

6. ์ƒ์œ„ ๊ธฐ๋Šฅ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ํ•˜์œ„ ์ˆ˜์ • ๋ฒ”์œ„

๋ฐฐํŒ… ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜๋ฉด์„œ ๊ธฐ์กด MatchResult์˜ ์—ญํ• ์ด ์• ๋งคํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์ŠนํŒจ ํŒ์ •์€ ์—ฌ์ „ํžˆ ํ•„์š”ํ•˜์ง€๋งŒ ์ถœ๋ ฅ์—๋Š” ์ˆ˜์ต ๊ธˆ์•ก๋งŒ ๋‚˜์˜ค๊ณ ,
์ˆ˜์ต ๊ณ„์‚ฐ์„ ์œ„ํ•ด์„œ๋Š” MatchResult + ๋ฐฐํŒ… ๊ธˆ์•ก์ด ํ•จ๊ป˜ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด MatchResult๋ฅผ ์ˆ˜์ •ํ•ด์„œ ์ˆ˜์ต ๊ณ„์‚ฐ๊นŒ์ง€ ๋‹ด๋‹นํ•˜๊ฒŒ ํ• ์ง€, ๋ณ„๋„์˜ ์ˆ˜์ต ๊ณ„์‚ฐ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ• ์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กด matchResults()๋ฅผ ํ˜ธ์ถœํ•˜๋˜ ์ปจํŠธ๋กค๋Ÿฌ์™€ View๋„ ํ•จ๊ป˜ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š”๋ฐ ์ด๋Ÿฐ ์—ฐ์‡„ ์ˆ˜์ •์„ ์ตœ์†Œํ™”ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•˜๋Š” ๊ฒŒ ์ข‹์€์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ๋ณ„๋„์˜ ์ˆ˜์ต ๊ณ„์‚ฐ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ธด ํ–ˆ์Šต๋‹ˆ๋‹ค.

7. ๋ฆฌํŒฉํ† ๋ง ๋ฒ”์œ„ ๊ด€๋ฆฌ

์ด๋ฒˆ์— ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ + ์ฑ…์ž„ ๋ถ„๋ฆฌ + ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค ๋„์ž…์„ ๋™์‹œ์— ์ง„ํ–‰ํ•˜๋‹ค ๋ณด๋‹ˆ ๋ณ€๊ฒฝ ๋ฒ”์œ„๊ฐ€ ๋„“์–ด์ ธ์„œ ํ•œ ์ปค๋ฐ‹์— ๋งŽ์€ ํŒŒ์ผ์ด ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋ฅผ ๊ณ ์น˜๋ฉด ์—ฐ์‡„์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ณณ๋„ ์ˆ˜์ •ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋Œ์ด์ผœ๋ณด๋ฉด "๋„ค์ด๋ฐ ๋จผ์ € โ†’ ์ฑ…์ž„ ๋ถ„๋ฆฌ โ†’ ์ธํ„ฐํŽ˜์ด์Šค ๋„์ž…" ์ˆœ์„œ๋กœ ๋‚˜๋ˆด์œผ๋ฉด ์ข‹์•˜์„ ๊ฒƒ ๊ฐ™์€๋ฐ, ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ์ปค๋ฐ‹์„ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆ„๋Š” ๊ฒŒ ์ข‹์€์ง€ ์กฐ์–ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

8. ์ด์ „ ํ”ผ๋“œ๋ฐฑ ๊ด€๋ จ

์ „ ์‚ฌ์ดํด ํ”ผ๋“œ๋ฐฑ ์ค‘ ๋ฐ˜์˜ํ•˜์ง€ ๋ชปํ•œ ๋ถ€๋ถ„์ด ์žˆ์„ ์ˆ˜ ์žˆ์–ด์„œ, ๋ฆฌ๋ทฐ ํ›„ ํ™•์ธํ•˜์—ฌ ๋ฐ˜์˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
์ถ”๊ฐ€๋กœ ์‚ฌ์ดํด 1์—์„œ Suit, Rank ๊ด€๋ จ ์ฝ”๋ฉ˜ํŠธ์™€ ์„œ๋น„์Šค ๋ ˆ์ด์–ด ๊ด€๋ จ ์งˆ๋ฌธ์— ๋Œ€ํ•ด ์•„์ง ๋‹ต๋ณ€์„ ๋ฐ›์ง€ ๋ชปํ•ด์„œ ํ™•์ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

- dealerWith, handWith, card ํ—ฌํผ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€
- BeforeEach ์ œ๊ฑฐ, ๊ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์ƒํƒœ ์ƒ์„ฑ
- Hand isBust, cardNames ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- Players ๊ฒ€์ฆ ๋ฐ forEach ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- ํ…Œ์ŠคํŠธ ์ด๋ฆ„๊ณผ ๊ฒ€์ฆ ๋‚ด์šฉ ๋ถˆ์ผ์น˜ ์ˆ˜์ •
- ๋„๋ฉ”์ธ ์šฉ์–ด ํ†ต์ผ: popโ†’deal, drawโ†’add, receiveโ†’hit
- Deck deal(int count) ์ œ๊ฑฐ, ๋‹จ์ผ deal()๋งŒ ์œ ์ง€
- Hand์— isBust, cardNames ์œ„์ž„ํ•˜์—ฌ ์ฑ…์ž„ ๊ฐ•ํ™”
- Player getCards() ์ œ๊ฑฐ๋กœ ๋‚ด๋ถ€ ๋…ธ์ถœ ๋ฐฉ์ง€
- Players ์ธ๋ฑ์Šค ๊ธฐ๋ฐ˜ ๋ฉ”์„œ๋“œ ์ œ๊ฑฐ, forEach๋งŒ ์œ ์ง€
- Participant ์ถ”์ƒ ํด๋ž˜์Šค ์ถ”๊ฐ€
- ๊ทธ ํ›„ Dealer์™€ Player์— ์ƒ์† ์ถ”๊ฐ€
- ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ธ๋ฑ์Šค๋กœ Players๋ฅผ ์กฐ์ž‘ํ•˜๋˜ ๊ฒƒ ์ œ๊ฑฐ
- HitDecision ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค ๋„์ž…
- Players์—์„œ Deck์˜ ์˜์กด์„ฑ ์ œ๊ฑฐ
- ํ”Œ๋ ˆ์ด์–ด ์ถ”๊ฐ€ ๋“œ๋กœ์šฐ ํ„ด ๋ฉ”์†Œ๋“œ ๋ถ„๋ฆฌ
- ๋”œ๋Ÿฌ ์ˆ˜์ต ๊ณ„์‚ฐ ๋ฉ”์†Œ๋“œ ์—๋Ÿฌ ์ˆ˜์ •
- ๋ฐฐํŒ… ๊ธˆ์•ก ์ž…๋ ฅ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- deal() ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- ํ”Œ๋ ˆ์ด์•„ ์ถ”๊ฐ€ ์ˆ˜๋ น ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
- ๋”œ๋Ÿฌ ์ถ”๊ฐ€ ์ˆ˜๋ น ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€
๊ธฐ์กด์—๋Š” ์œ ํ‹ธ ํด๋ž˜์Šค์ฒ˜๋Ÿผ static์œผ๋กœ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ,
View๋Š” ์œ ํ‹ธ์ด ์•„๋‹ˆ๋ผ ์ž…์ถœ๋ ฅ์ด๋ผ๋Š” ์—ญํ• ์„ ๊ฐ€์ง„ ๊ฐ์ฒด๋ผ๊ณ  ํŒ๋‹จ
- Parser์—์„œ ๋ฌธ์ž์—ด๊นŒ์ง€ ๊ฒ€์ฆํ•˜๊ณ  ์žˆ์–ด ๋ถ„๋ฆฌ
- StringUtils์—์„œ ๋ฌธ์ž์—ด null, isBlank() ๊ฒ€์ฆ
@soohyun1904 soohyun1904 changed the title [๐Ÿš€ ์‚ฌ์ดํด2 - ๋ฏธ์…˜ (๋ธ”๋ž™์žญ ๊ฒŒ์ž„ ์‹คํ–‰)] ๋‹ฌ์ˆ˜ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. [๐Ÿš€ ์‚ฌ์ดํด2 - ๋ฏธ์…˜ (๋ธ”๋ž™์žญ ๋ฐฐํŒ…)] ๋‹ฌ์ˆ˜ ๋ฏธ์…˜ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค. Mar 15, 2026
Copy link

@Rok93 Rok93 left a comment

Choose a reason for hiding this comment

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

๋‹ฌ์ˆ˜ ์‚ฌ์ดํด2 ๋ฏธ์…˜๋„ ํ›Œ๋ฅญํ•˜๊ฒŒ ์ž˜ ์ง„ํ–‰ํ•ด์ฃผ์…จ๋„ค์š”. ๐Ÿ‘๐Ÿ‘
์ „์ฒด์ ์œผ๋กœ ๊น”๋”ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด์ฃผ์…”์„œ ์ฝ”๋“œ ํŒŒ์•…๋„ ํ•œ๊ฒฐ ๋” ์‰ฌ์› ๋˜ ๊ฒƒ ๊ฐ™์•„์š”. ๐Ÿ˜Š

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

Comment on lines +12 to +18
public InputView inputView() {
return new InputView();
}

public OutputView outputView() {
return new OutputView();
}
Copy link

Choose a reason for hiding this comment

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

๋ฉ”์„œ๋“œ๋กœ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ์ถฉ๋ถ„ํžˆ ๋™์ผํ•œ ์˜๋„๋ฅผ ๋“œ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”. ๐Ÿ˜Š


public GameResultDto generateGameResult() {
return GameResultDto.from(players, dealer);
public int getDealerProfit(List<GameResult> gameResults) {
Copy link

Choose a reason for hiding this comment

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

get ๊ฐ™์€ prefix๋ฅผ ๋‹จ์ˆœ getter(๋ณ„๋„ ๊ณ„์‚ฐ ์—†์ด, ๋‹จ์ˆœํžˆ ๊ฐ’์„ ๊บผ๋‚ด์˜ค๋Š” ๋ฉ”์„œ๋“œ)๋กœ ์ฐฉ๊ฐํ•˜ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”. ๐Ÿค”

์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” dealer profit์„ ๊ณ„์‚ฐํ•˜๋Š” ํ–‰์œ„๋ฅผ ๋“œ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ๋„๋ก get๋ณด๋‹ค๋Š” calculate ๊ฐ™์€ ํ‘œํ˜„์ด ์–ด๋–จ๊นŒ ์‹ถ์–ด์š”. ๐Ÿ˜

public void dealerDraw() {
TrumpCard drawn = deck.draw();
dealer.receive(drawn);
public List<GameResult> gameResults(){
Copy link

Choose a reason for hiding this comment

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

์ž๋ฐ” ์ฝ”๋“œ ์ปจ๋ฒค์…˜์—์„œ๋Š” ๋ฉ”์„œ๋“œ ๋„ค์ด๋ฐ ๊ทœ์น™์œผ๋กœ ๋™์‚ฌ or ๋™์‚ฌ๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ๊ฐ€์ด๋“œํ•˜๊ณ ์žˆ์–ด์š”.

}

public Map<String, Long> getDealerFinalResult(Map<Player, MatchResult> playerResult) {
public Map<String, Long> getDealerFinalResult(Map<String, MatchResult> playerResult) {
Copy link

Choose a reason for hiding this comment

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

์ด ๋ฉ”์„œ๋“œ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋„ค์š”. ๐Ÿ‘€
์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ๋Š” ๊ณผ๊ฐํžˆ ์ œ๊ฑฐํ•ด์ฃผ์„ธ์š”. ๐Ÿ˜Š

.flatMap(suit -> Arrays.stream(Rank.values())
.map(rank -> TrumpCard.of(suit, rank)))
.collect(Collectors.toList());
List<TrumpCard> cards = new ArrayList<>(TrumpCard.CARDS);
Copy link

Choose a reason for hiding this comment

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

TrumpCard.CARDS << ๋ณด๋‹ค๋Š” TrumpCard.ALL_CARD (ํ˜น์€ CARDS)๊ฐ€ ์กฐ๊ธˆ ๋” ์ƒ์ˆ˜ ์˜๋ฏธ๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์„๊นŒ์š”? ๐Ÿค”


public int countCards() {
return cards.size();
public boolean isBlackjack(){
Copy link

Choose a reason for hiding this comment

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

๋ธ”๋ž™์žญ ์€ ๋‹จ์ˆœํžˆ ์ ์ˆ˜๋กœ๋งŒ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋Š”๊ฑด๊ฐ€์š”? ๐Ÿค”

Copy link
Author

Choose a reason for hiding this comment

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

์นด๋“œ ์ˆ˜๋Š” ์ฐธ๊ฐ€์ž ๋กœ์ง์— ์ถ”๊ฐ€ํ–ˆ์—ˆ๋Š”๋ฐ, Hand์— ์žˆ๋Š”๊ฒŒ ๋งž๋Š”๊ฑฐ ๊ฐ™๋„ค์š”

@@ -0,0 +1,12 @@
package blackjack.domain.vo;

import blackjack.domain.Players;
Copy link

Choose a reason for hiding this comment

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

๋ถˆํ•„์š”ํ•œ import๋ฌธ์œผ๋กœ ๋ณด์—ฌ์š”.
์ œ๊ฑฐ ๋ถ€ํƒ๋“œ๋ฆด๊ฒŒ์š”. ๐Ÿ˜Š

public Map<String, MatchResult> matchResults() {
Map<String, MatchResult> results = new LinkedHashMap<>();
players.forEach(player ->
results.put(player.getName(), MatchResult.playerResult(player, dealer))
Copy link

Choose a reason for hiding this comment

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

ํ˜„์žฌ MatchResult์—์„œ ์ •์ ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋กœ player์™€ delaer๋ฅผ ๋ฐ›๊ณ ์žˆ๋Š”๋ฐ์š”.
์‹ค์ œ ๋ธ”๋ž™์žญ ๊ฒŒ์ž„๋„ ์Šน,ํŒจ ํŒ๋‹จ์„ dealer๊ฐ€ ํ•˜๋‹ˆ, ์ŠนํŒจ๋ฅผ ํŒ๋‹จํ•˜๋Š” ์—ญํ• ์„ dealer ๊ฐ์ฒด์—๊ฒŒ ์œ„์ž„ํ•ด๋ณด๋ฉด ์–ด๋–จ๊นŒ์š”?

Copy link
Author

Choose a reason for hiding this comment

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

์ŠนํŒจ ํŒ์ •์„ Dealer์— ๋‘๋Š” ๊ฒƒ๋„ ๊ณ ๋ฏผํ–ˆ๋Š”๋ฐ, Dealer ์ž์‹ ๋„ ํŒ์ • ๋Œ€์ƒ์ด๋ผ ์ž๊ธฐ๊ฐ€ ํŒ์ •ํ•˜๋Š” ๊ฒŒ ์–ด์ƒ‰ํ•˜๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.
ํŒ์ •์€ ๊ฒŒ์ž„ ๊ทœ์น™์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์„œ BlackjackRule๋กœ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ˜น์‹œ ๊ณ ์น˜๋Š”๊ฒŒ ์ข‹์„๊นŒ์š”?

this.earningRate = earningRate;
}

public static Payoff playerResult(Player player, Dealer dealer) {
Copy link

Choose a reason for hiding this comment

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

๋ฐฐ๋‹น ๋ฐฐ์ˆ˜์— ๋Œ€ํ•œ enum ์„ ๋ณ„๋„๋กœ ๋งŒ๋“œ์…จ๊ตฐ์š”? ๐Ÿ‘๐Ÿ‘

์ด ์ˆ˜์ต์„ ๊ณ„์‚ฐํ•˜๋Š” ๋กœ์ง์„๋ณด๋‹ค๋ณด๋‹ˆ, ์‚ฌ์‹ค์ƒ ๋ธ”๋ž™์žญ ์Šน๋ฆฌ ์ผ€์ด์Šค๋งŒ ์ œ์™ธํ•˜๋ฉด ๊ธฐ์กด์˜ GameResult์™€ 1:1๋กœ ๋งค์นญ๋˜๋Š” ๊ฒƒ ๊ฐ™์ง€ ์•Š๋‚˜์š”?

๋ณ„๋„ enum class๋ฅผ ๋งŒ๋“ค ํ•„์š” ์—†์ด, GameResult์— ๊ฐ enum ์š”์†Œ์— ๋ฐฐ๋‹น๋ฅ ์„ ๋‘” ํ›„, ๊ธฐ์กด์ฒ˜๋Ÿผ ๊ฒŒ์ž„ ์ŠนํŒจ๋ฅผ ํŒ๋‹จํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ์Šน,๋ฌด,ํŒจ๋ฅผ ๊ฐ€์ง€๊ณ  ๋ฐฐ๋‹น๋ฅ (?)์„ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์•˜์„๊นŒ ์‹ถ์–ด์š”.


์ง€๊ธˆ์˜ ๋ฐฉ์‹์ด ๋‚˜์˜๋‹ค๋Š” ์–˜๊ธฐ๋Š”์•„๋‹ˆ๊ณ  ์ด๋ ‡๊ฒŒ๋„ ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ...? ํ•˜๋Š” ๊ด€์  ๊ณต์œ ์ฐจ์›์œผ๋กœ ๋‚จ๊ธด ์ฝ”๋ฉ˜ํŠธ์—์š”.
๊ผญ ๋ฐ˜์˜ํ•ด๋‹ฌ๋ผ๋Š” ์–˜๊ธฐ๋Š” ์•„๋‹ˆ๋‹ˆ ์ฐธ๊ณ ๋งŒํ•ด์ฃผ์„ธ์š”. ๐Ÿ™‚

@@ -0,0 +1,19 @@
package blackjack.config;
Copy link

Choose a reason for hiding this comment

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

PR๋กœ ๋‚จ๊ธด ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์€ ์—ฌ๊ธฐ์— ๋‚จ๊ฒจ๋ณผ๊ฒŒ์š”.

  1. ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•œ ์ปจํŠธ๋กค๋Ÿฌ-๋„๋ฉ”์ธ ๋ถ„๋ฆฌ
    ๊ธฐ์กด์—๋Š” ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ธ๋ฑ์Šค๋กœ Players๋ฅผ ์ง์ ‘ ์ˆœํšŒํ•˜๋ฉฐ ์กฐ์ž‘ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ HitDecision, TurnDisplay, BetDecision ๊ฐ™์€ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ฐ”๊ฟ”์„œ
ํ„ด ์ˆœํšŒ์™€ ๊ฒŒ์ž„ ๋กœ์ง์„ Game ๋‚ด๋ถ€๋กœ ์ด๋™์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

์ด ๋ฐฉํ–ฅ์ด ๋งž๋Š”์ง€, ์˜คํžˆ๋ ค ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด์„œ ๋ณต์žกํ•ด์ง„ ๊ฑด ์•„๋‹Œ์ง€ ํ”ผ๋“œ๋ฐฑ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.


์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ Players๋ฅผ ์ง์ ‘ ์ˆœํšŒํ•˜๋ฉฐ ๊ฒŒ์ž„ ์ง„ํ–‰์„ ์กฐ์ž‘ํ•˜๋˜ ๊ตฌ์กฐ๋ณด๋‹ค, ํ„ด ์ง„ํ–‰ ์ž์ฒด๋ฅผ Game์ด ์ฑ…์ž„์ง€๋„๋ก ์˜ฎ๊ธด ๋ฐฉํ–ฅ์€ ๋” ์ž์—ฐ์Šค๋Ÿฝ๋‹ค๊ณ  ๋ด…๋‹ˆ๋‹ค. ํŠนํžˆ โ€œ๋ˆ„๊ฐ€ ์นด๋“œ๋ฅผ ๋” ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š”์ง€โ€, โ€œํ„ด์„ ์–ธ์ œ ์ข…๋ฃŒํ•˜๋Š”์ง€โ€ ๊ฐ™์€ ๊ทœ์น™์€ ๋„๋ฉ”์ธ์— ๊ฐ€๊นŒ์šด ์ฑ…์ž„์ด๋ผ ์ปจํŠธ๋กค๋Ÿฌ์— ๋‚จ์•„ ์žˆ์œผ๋ฉด ๊ด€๋ จ ํŒ๋‹จ ์ฝ”๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์— ํฉ์–ด์งˆ ์ˆ˜ ์žˆ์–ด์š”. (์ถ”ํ›„ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง€๊ฒ ์ฃ  ๐Ÿฅฒ)

๋‹ค๋งŒ HitDecision, TurnDisplay, BetDecision์ฒ˜๋Ÿผ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋Š˜์–ด๋‚œ ๋งŒํผ ์ถ”์ƒํ™” ๋น„์šฉ๋„ ๋ถ„๋ช…ํžˆ ์ƒ๊ธฐ๋Š”๋ฐ, ๊ทธ๋ž˜์„œ ์ด ๊ตฌ์กฐ๊ฐ€ ์„ค๋“๋ ฅ์„ ๊ฐ€์ง€๋ ค๋ฉด, ๋‹จ์ˆœํžˆ ์ปจํŠธ๋กค๋Ÿฌ ์ฝ”๋“œ๋ฅผ ๋„๋ฉ”์ธ ๊ฐ์ฒด๋กœ ๋ฐ€์–ด ๋„ฃ์€ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ โ€œ์ž…๋ ฅ ๊ฒฐ์ •โ€๊ณผ โ€œ๊ฒŒ์ž„ ๊ทœ์น™โ€์„ ๋ถ„๋ฆฌํ–ˆ๋‹ค๋Š” ์ ์ด ๋“œ๋Ÿฌ๋‚˜์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”.
์ง€๊ธˆ์ฒ˜๋Ÿผ ์™ธ๋ถ€์—์„œ๋Š” ๊ฒฐ์ •๋งŒ ๋„˜๊ธฐ๊ณ , ์‹ค์ œ ์ง„ํ–‰์€ Game์ด ๋‹ด๋‹นํ•œ๋‹ค๋ฉด ๋ฐฉํ–ฅ ์ž์ฒด๋Š” ๊ดœ์ฐฎ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”!

Copy link

Choose a reason for hiding this comment

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

  1. ์ถœ๋ ฅ ์ฝœ๋ฐฑ์˜ ๋„๋ฉ”์ธ ๊ฒฐํ•ฉ ๋ฌธ์ œ
    hitํ•  ๋•Œ๋งˆ๋‹ค ์ค‘๊ฐ„ ์นด๋“œ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋Š” ์š”๊ตฌ์‚ฌํ•ญ ๋•Œ๋ฌธ์— TurnDisplay ์ฝœ๋ฐฑ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
    ์ž…๋ ฅ์€ ์ฝœ๋ฐฑ์œผ๋กœ, ์ถœ๋ ฅ์€ ๊ฒฐ๊ณผ ๊ฐ์ฒด๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋‹น๊ฒจ๊ฐ€๋Š” ๋ฐฉ์‹์ด ๊น”๋”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ํ„ด ์ค‘๊ฐ„ ์ถœ๋ ฅ์€ ๋‹น๊ฒจ๊ฐˆ ์ˆ˜ ์—†์–ด์„œ ์ฝœ๋ฐฑ์œผ๋กœ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋งŒ ์ถœ๋ ฅ ํ˜•์‹์ด ๋ฐ”๋€Œ๋ฉด ์ฝœ๋ฐฑ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋„ ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.
ํ˜„์žฌ๋Š” (String name, List cardNames)๋งŒ ๋„˜๊ธฐ๊ณ  ์žˆ๋Š”๋ฐ, ์ด ์ •๋„๋ฉด ๊ดœ์ฐฎ์€ ๊ฑด์ง€, ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ์˜๊ฒฌ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.


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

Copy link

Choose a reason for hiding this comment

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

  1. ์˜์กด ๊ด€๊ณ„ โ€” "์•„๋Š” ๊ฒƒ"์˜ ๊ธฐ์ค€
    ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ฐ˜ํ™˜๊ฐ’, ํ•„๋“œ, ๋‚ด๋ถ€ ์ƒ์„ฑ ๋“ฑ ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜์— ํƒ€์ž…์ด ๋“ฑ์žฅํ•˜๋ฉด ์˜์กด์ด ์ƒ๊ธฐ๋Š” ๊ฒƒ์œผ๋กœ ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ์ค€์œผ๋กœ Players์— ์žˆ๋˜ hitPlayer(int index, TrumpCard card) ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  forEach(Consumer)๋กœ ๋ฐ”๊ฟจ์Šต๋‹ˆ๋‹ค.
Players๋Š” TrumpCard์™€ ์ง์ ‘ ํ˜‘๋ ฅํ•  ์ด์œ ๊ฐ€ ์—†๊ณ  ์ „๋‹ฌ๋งŒ ํ•˜๋Š” ์ค‘๊ฐ„์ž์˜€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ•œํŽธ BlackjackGame์˜ forEach ๋žŒ๋‹ค ์•ˆ์—์„œ player.hit(deck.deal())์„ ํ˜ธ์ถœํ•˜๋Š”๋ฐ, ์ด๋•Œ TrumpCard๋ฅผ ์•„๋Š” ๊ฑด ๋žŒ๋‹ค๋ฅผ ์ž‘์„ฑํ•œ Game์ด์ง€ ์‹คํ–‰ํ•˜๋Š” Players๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.
"์ง์ ‘ ํ˜‘๋ ฅํ•˜๋ฉด ์•Œ์•„๋„ ๋˜๊ณ , ์ „๋‹ฌ๋งŒ ํ•˜๋ฉด ์•Œ ํ•„์š” ์—†๋‹ค"๋Š” ๊ธฐ์ค€์ด ๋งž๋Š”์ง€ ํ”ผ๋“œ๋ฐฑ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.


Players๊ฐ€ TrumpCard๋ฅผ ์ง์ ‘ ํ•ด์„ํ•˜๊ฑฐ๋‚˜ ํŒ๋‹จํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœ ์ „๋‹ฌ๋งŒ ํ•˜๋Š” ๊ตฌ์กฐ์˜€๋‹ค๋ฉด, ํ•ด๋‹น ํƒ€์ž… ์˜์กด์„ ์ œ๊ฑฐํ•œ ๋ฐฉํ–ฅ์€ ํƒ€๋‹นํ•ด ๋ณด์—ฌ์š”.
player.hit(deck.deal())์—์„œ ์‹ค์ œ๋กœ TrumpCard์™€ ํ˜‘๋ ฅํ•˜๋Š” ์ฃผ์ฒด๋Š” BlackjackGame๊ณผ Player์ด๋ฏ€๋กœ, Players๊ฐ€ ๊ทธ ํƒ€์ž…์„ ๋ชฐ๋ผ๋„ ๋œ๋‹ค๋Š” ํŒ๋‹จ์—๋„ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค๋งŒ forEach(Consumer)๋กœ ๋ฐ”๊พธ๋ฉด์„œ ํƒ€์ž… ์˜์กด์€ ์ค„์—ˆ์ง€๋งŒ ์ปฌ๋ ‰์…˜์˜ ํ–‰์œ„๋ฅผ ์™ธ๋ถ€์—์„œ ์กฐํ•ฉํ•˜๊ฒŒ ๋œ ๋ฉด๋„ ์žˆ์–ด, ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜์˜ ์ฑ…์ž„๊นŒ์ง€ ๊ฐ™์ด ์•ฝํ•ด์ง€์ง€ ์•Š์•˜๋Š”์ง€๋Š” ํ•จ๊ป˜ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”. ๐Ÿ™‚

Copy link

Choose a reason for hiding this comment

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

  1. ๊ธฐ๋Šฅ ๋ณ€๊ฒฝ ์‹œ ํ…Œ์ŠคํŠธ๊ฐ€ ๊นจ์ง€๋Š” ๋ฒ”์œ„
    Hand์˜ isBust()๋ฅผ Player๊ฐ€ ์œ„์ž„ํ•˜๋„๋ก ๋ฆฌํŒฉํ† ๋งํ–ˆ๋Š”๋ฐ, ๊ทธ๋ž˜๋„ Hand์˜ ํ–‰์œ„๊ฐ€ ๋ฐ”๋€Œ๋ฉด PlayerTest, DealerTest์˜ canHit() ํ…Œ์ŠคํŠธ๋„ ํ•จ๊ป˜ ๊นจ์ง‘๋‹ˆ๋‹ค. ์œ„์ž„์„ ํ•˜๋”๋ผ๋„ ํ•˜์œ„ ๊ฐ์ฒด์˜ ํ–‰์œ„ ์ž์ฒด๊ฐ€ ๋ฐ”๋€Œ๋ฉด ์ƒ์œ„ ํ…Œ์ŠคํŠธ๋„ ์˜ํ–ฅ์„ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ•˜์œ„ ๋ณ€๊ฒฝ์ด ์ง์ ‘ ์˜์กดํ•˜๋Š” ์ƒ์œ„ ํ…Œ์ŠคํŠธ๊นŒ์ง€ ๊นจ๋œจ๋ฆฌ๋Š” ๊ฒŒ ์ž์—ฐ์Šค๋Ÿฌ์šด ๊ฑด์ง€, ์•„๋‹ˆ๋ฉด ์ƒ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์•ˆ ๊นจ์ง€๋„๋ก ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑด์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
์–ด๋””๊นŒ์ง€ ๊นจ์ง€๋Š” ๊ฒŒ ์ •์ƒ์ด๊ณ  ์–ด๋””๋ถ€ํ„ฐ๊ฐ€ ์„ค๊ณ„ ๋ฌธ์ œ์˜ ์‹ ํ˜ธ์ธ์ง€ ๊ธฐ์ค€์ด ์žˆ์„๊นŒ์š”?


์ƒ๊ฐ ์ •๋ฆฌ์ค‘

Copy link

Choose a reason for hiding this comment

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

  1. ์ƒํƒœ ํŒจํ„ด(State Pattern) ์ ์šฉ
    ํ˜„์žฌ hit ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ canHit()์˜ if๋ฌธ์œผ๋กœ ํŒ๋‹จํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ƒํƒœ ํŒจํ„ด์„ ์ ์šฉํ•˜๋ฉด Player์˜ ์ƒํƒœ(ํžˆํŒ… ์ค‘, ์Šคํ…Œ์ด, ๋ฒ„์ŠคํŠธ, ๋ธ”๋ž™์žญ)์— ๋”ฐ๋ผ ํ–‰์œ„๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„์— ์ ํ˜€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
    ์ด ๋ฏธ์…˜์— ์ƒํƒœ ํŒจํ„ด์„ ์ ์šฉํ•œ๋‹ค๋ฉด ์–ด๋–ค ๊ตฌ์กฐ๊ฐ€ ์ข‹์„์ง€ ๋ฐฉํ–ฅ์„ ์žก๊ณ  ์‹ถ์–ด์„œ ์กฐ์–ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ƒํƒœ ํŒจํ„ด ์ž์ฒด๊ฐ€ ๋ธ”๋ž™์žญ ๋ฏธ์…˜์˜ ํ•„์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ์€ ์•„๋‹Œ ๊ฒƒ์œผ๋กœ ์•Œ๊ณ ์žˆ๊ณ ,
๋‹ค์Œ ๋‹จ๊ณ„์— ์ ํ˜€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค << ๋‹ค์Œ ๋‹จ๊ณ„๊ฐ€ ๋ฌด์—‡์„ ๋ง์”€ํ•˜์‹œ๋Š” ๊ฑด์ง€ ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ฆฌ๋Š”๋ฐ์š”.
๋ธ”๋ž™์žญ ๋ฏธ์…˜์ด ์‚ฌ์ดํด2๊นŒ์ง€ ์žˆ์–ด๋ณด์—ฌ์„œ, ๋‹ค์Œ ๋‹จ๊ณ„์˜ ์˜๋ฏธ๋ฅผ ์ž˜ ๋ชจ๋ฅด๊ฒ ์–ด์š”. ๐Ÿค”

์ถ”๊ฐ€์ ์œผ๋กœ ์ƒํƒœํŒจํ„ด์„ ๋„์ž…ํ•˜๋Š” ๊ฒƒ ๊นŒ์ง€๋Š” ๋‹ฌ์ˆ˜๊ฐ€ ํ•ด๋ณด๊ณ ์‹ถ๋‹ค๋ฉด ์ถ”๊ฐ€๋กœ ์ง„ํ–‰ํ•ด๋ด๋„ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค...๋งŒ!
์งˆ๋ฌธ์ด ์กฐ๊ธˆ ์ž˜๋ชป๋๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”.
๋ฐฉํ–ฅ์„ ์ œ๊ฐ€ ๋จผ์ € ์„ค๊ณ„๋ฅผ ํ•ด๋“œ๋ฆฌ๋Š”๊ฒŒ ์ข‹์€ ๋ฐฉํ–ฅ์€ ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ ์–ด๋„ ๋‹ฌ์ˆ˜๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ์ƒํƒœ ํŒจํ„ด ๋„์ž… ๋ฐฉํ–ฅ(or ์ฝ”๋“œ)์„ ๊ณ ๋ฏผ์— ๋ฐ˜์˜ํ•ด๋ณด์‹  ๋’ค, ํ”ผ๋“œ๋ฐฑ์„ ์š”์ฒญํ•˜์‹ ๋‹ค๋ฉด ๊ทธ์—๋Œ€ํ•ด์„œ ์ œ๊ฐ€ ๋ฐฉํ–ฅ์„ ๊ฐ™์ด ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ์ฒ˜์Œ๋ถ€ํ„ฐ ์ œ๊ฐ€ ๋ฐฉํ–ฅ์„ ์ œ์‹œํ•ด์ฃผ๋Š” ๋ฐฉ์‹์€ ์šฐํ…Œ์ฝ” ์ทจ์ง€์—๋„ ์กฐ๊ธˆ ๋ฒ—์–ด๋‚ฌ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”. ๐Ÿ™„

Copy link

Choose a reason for hiding this comment

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

  1. ์ƒ์œ„ ๊ธฐ๋Šฅ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ํ•˜์œ„ ์ˆ˜์ • ๋ฒ”์œ„
    ๋ฐฐํŒ… ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜๋ฉด์„œ ๊ธฐ์กด MatchResult์˜ ์—ญํ• ์ด ์• ๋งคํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์ŠนํŒจ ํŒ์ •์€ ์—ฌ์ „ํžˆ ํ•„์š”ํ•˜์ง€๋งŒ ์ถœ๋ ฅ์—๋Š” ์ˆ˜์ต ๊ธˆ์•ก๋งŒ ๋‚˜์˜ค๊ณ ,
    ์ˆ˜์ต ๊ณ„์‚ฐ์„ ์œ„ํ•ด์„œ๋Š” MatchResult + ๋ฐฐํŒ… ๊ธˆ์•ก์ด ํ•จ๊ป˜ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด MatchResult๋ฅผ ์ˆ˜์ •ํ•ด์„œ ์ˆ˜์ต ๊ณ„์‚ฐ๊นŒ์ง€ ๋‹ด๋‹นํ•˜๊ฒŒ ํ• ์ง€, ๋ณ„๋„์˜ ์ˆ˜์ต ๊ณ„์‚ฐ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ• ์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กด matchResults()๋ฅผ ํ˜ธ์ถœํ•˜๋˜ ์ปจํŠธ๋กค๋Ÿฌ์™€ View๋„ ํ•จ๊ป˜ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š”๋ฐ ์ด๋Ÿฐ ์—ฐ์‡„ ์ˆ˜์ •์„ ์ตœ์†Œํ™”ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•˜๋Š” ๊ฒŒ ์ข‹์€์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ๋ณ„๋„์˜ ์ˆ˜์ต ๊ณ„์‚ฐ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ธด ํ–ˆ์Šต๋‹ˆ๋‹ค.


๊ด€๋ จ ์ฝ”๋ฉ˜ํŠธ๋Š” ํ•ด๋‹น ์ฝ”๋ฉ˜ํŠธ์—์„œ ๋‚จ๊ฒจ๋‘์—ˆ๋Š”๋ฐ์š”.

์ €๋Š” ์ŠนํŒจ๊ฒฐ๊ณผ์™€ ๋ฐฐ๋‹น๋ฅ (?)์ด 1:1๋กœ ๋งค์นญ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ๋ฐฐ๋‹น๋ฅ ์ด๋ผ๋Š” ๊ฐœ๋…์„ ๋ณ„๋„ enum์ด ์•„๋‹ˆ๋ผ ์ŠนํŒจ๊ฒฐ๊ณผ์˜ ์ƒํƒœ๋กœ ๋‘์—ˆ์„ ๊ฒƒ ๊ฐ™์•„์š”. ๐Ÿ™‚

๋‹ฌ์ˆ˜๊ฐ€ ์ง„ํ–‰ํ•˜์‹  ๋ฐฉํ–ฅ๋„ ์ƒ๊ฐํ•ด๋ณด๋ฉด Payoff๊ฐ€ ์‹ค์งˆ์ ์œผ๋กœ WIN,DRAW, LOSE๋ฅผ ๊ฐ ์š”์†Œ๋กœ ๊ฐ–๊ณ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ฐํ•ด๋ณด๋ฉด ๊ธฐ์กด์˜ MatchResult์™€ ์œ ์‚ฌํ•ด๋ณด์ด์ง€ ์•Š๋‚˜์š”? ๐Ÿ˜Š

์ €๋Š” ๊ธฐ์กด MatchResult๋ฅผ ์ˆ˜์ •ํ•˜๋”๋ผ๋„ ๊ณ„์‚ฐ์„ ๋‹ด๋‹นํ•˜๊ฒŒํ•˜์ง€๋Š” ์•Š์„ ๊ฒƒ ๊ฐ™์•„์š”.

๊ธฐ์กด MatchResult๋ฅผ ์ˆ˜์ •ํ•ด์„œ ์ˆ˜์ต ๊ณ„์‚ฐ๊นŒ์ง€ ๋‹ด๋‹นํ•˜๊ฒŒ ํ• ์ง€, ๋ณ„๋„์˜ ์ˆ˜์ต ๊ณ„์‚ฐ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ• ์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กด matchResults()๋ฅผ ํ˜ธ์ถœํ•˜๋˜ ์ปจํŠธ๋กค๋Ÿฌ์™€ View๋„ ํ•จ๊ป˜ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š”๋ฐ ์ด๋Ÿฐ ์—ฐ์‡„ ์ˆ˜์ •์„ ์ตœ์†Œํ™”ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•˜๋Š” ๊ฒŒ ์ข‹์€์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜์ต ๊ณ„์‚ฐ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ ๊ฐ™๊ณ  ๊ณ„์‚ฐ์€ ๋ณ„๋„๋กœ ์ˆ˜์ต์„ ๊ณ„์‚ฐํ•˜๋Š” ์—ญํ• ์„ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋‘˜ ๊ฒƒ ๊ฐ™๊ธฐ๋Š”ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿค”

์ €๋ผ๋ฉด GameResult๋ฅผ Map<Player, MatchResult>์˜ ์ผ๊ธ‰์ปฌ๋ ‰์…˜์œผ๋กœ ๋‘๊ณ 
์ด ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜ ๊ฐ์ฒด์—๊ฒŒ ์ˆ˜์ต์„ ๊ณ„์‚ฐํ•˜๋Š” ์—ญํ• ์„ ์œ„์ž„ํ–ˆ์„ ๊ฒƒ ๊ฐ™์•„์š”. ๐Ÿค”

Copy link

Choose a reason for hiding this comment

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

  1. ๋ฆฌํŒฉํ† ๋ง ๋ฒ”์œ„ ๊ด€๋ฆฌ
    ์ด๋ฒˆ์— ๋„ค์ด๋ฐ ๋ณ€๊ฒฝ + ์ฑ…์ž„ ๋ถ„๋ฆฌ + ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค ๋„์ž…์„ ๋™์‹œ์— ์ง„ํ–‰ํ•˜๋‹ค ๋ณด๋‹ˆ ๋ณ€๊ฒฝ ๋ฒ”์œ„๊ฐ€ ๋„“์–ด์ ธ์„œ ํ•œ ์ปค๋ฐ‹์— ๋งŽ์€ ํŒŒ์ผ์ด ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋ฅผ ๊ณ ์น˜๋ฉด ์—ฐ์‡„์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ณณ๋„ ์ˆ˜์ •ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋Œ์ด์ผœ๋ณด๋ฉด "๋„ค์ด๋ฐ ๋จผ์ € โ†’ ์ฑ…์ž„ ๋ถ„๋ฆฌ โ†’ ์ธํ„ฐํŽ˜์ด์Šค ๋„์ž…" ์ˆœ์„œ๋กœ ๋‚˜๋ˆด์œผ๋ฉด ์ข‹์•˜์„ ๊ฒƒ ๊ฐ™์€๋ฐ, ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ์ปค๋ฐ‹์„ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆ„๋Š” ๊ฒŒ ์ข‹์€์ง€ ์กฐ์–ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.


์ปค๋ฐ‹ ๋‹จ์œ„๋ฅผ ์˜์‹์ ์œผ๋กœ ๋ณด๋Š” ํŽธ์ด๋ผ, ์กฐ๊ธˆ ์œ ๋™์ ์ธ ๊ฒƒ ๊ฐ™์•„์š”.

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

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

์–ด์จ‹๊ฑฐ๋‚˜ ์ปค๋ฐ‹ ๋‹จ์œ„๋Š” ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์žฅ์ ์ด ํฌ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์—
ํ•ต์‹ฌ์€ ์ปค๋ฐ‹๋‹จ์œ„๋ฅผ ์ž‘๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”. ๐Ÿ˜Š

Copy link

@Rok93 Rok93 Mar 15, 2026

Choose a reason for hiding this comment

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

  1. ์ด์ „ ํ”ผ๋“œ๋ฐฑ ๊ด€๋ จ
    ์ „ ์‚ฌ์ดํด ํ”ผ๋“œ๋ฐฑ ์ค‘ ๋ฐ˜์˜ํ•˜์ง€ ๋ชปํ•œ ๋ถ€๋ถ„์ด ์žˆ์„ ์ˆ˜ ์žˆ์–ด์„œ, ๋ฆฌ๋ทฐ ํ›„ ํ™•์ธํ•˜์—ฌ ๋ฐ˜์˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
    ์ถ”๊ฐ€๋กœ ์‚ฌ์ดํด 1์—์„œ Suit, Rank ๊ด€๋ จ ์ฝ”๋ฉ˜ํŠธ์™€ ์„œ๋น„์Šค ๋ ˆ์ด์–ด ๊ด€๋ จ ์งˆ๋ฌธ์— ๋Œ€ํ•ด ์•„์ง ๋‹ต๋ณ€์„ ๋ฐ›์ง€ ๋ชปํ•ด์„œ ํ™•์ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

DM์œผ๋กœ ์ด์ „ ํ”ผ๋“œ๋ฐฑ์ด ์–ด๋”œ๋ถ€๋ถ„์„ ๋ง์”€ํ•˜์‹ ๊ฑด์ง€ ๋ฌธ์˜๋“œ๋ ธ์—ˆ๋Š”๋ฐ์š”..!

์•„๋งˆ๋„ ์•„๋ž˜ 2๊ฐœ ์ฝ”๋ฉ˜ํŠธ์— ๋Œ€ํ•ด์„œ ๋‹ต๋ณ€์„ ์•ˆ๋“œ๋ฆฐ ๊ฒƒ ๊ฐ™์•„์š”.

  1. Suit, Rank ๊ด€๋ จ ์ฝ”๋ฉ˜ํŠธ
  2. ์„œ๋น„์Šค ๋ ˆ์ด์–ด ๊ด€๋ จ ์งˆ๋ฌธ

๊ฐ ์งˆ๋ฌธ์ด ์–ด๋””๋ฅผ ๋ง์”€ํ•˜์‹  ๊ฒƒ์ธ์ง€, ๋งํฌ ๊ณต์œ ํ•ด์ฃผ์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”. ๐Ÿฅฒ
์ฝ”๋ฉ˜ํŠธ์— ๋ฌปํ˜€์„œ ์ฐพ๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š๋„ค์š”.

(์—…๋ฐ์ดํŠธ)

  1. Suit, Rank ๊ด€๋ จ ์ฝ”๋ฉ˜ํŠธ

์ฐพ์œผ์‹  ๊ฒƒ์ฒ˜๋Ÿผ ์ €๋Š” ์ง€๊ธˆ์˜ ๊ฒฝ์šฐ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์„ ๋•Œ๋Š” NoSuchElementException ์„ ์˜ˆ์™ธ๋กœ ๋˜์ ธ์ฃผ๋Š”๊ฒŒ ์กฐ๊ธˆ ๋” ์ ์ ˆํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์–ด์š”.

try-catch๋กœ ๊ฐ์‹ผ ๋ฐฉ์‹์„ ์˜ˆ์‹œ๋กœ ๋“ค์–ด์ฃผ์…จ๋Š”๋ฐ...!

์ „ ๋‹จ์ˆœํžˆ ์•„๋ž˜์™€ ๊ฐ™์ด IllegalArgumentExceptuon ๋Œ€์‹ ์— NoSuchElementException์„ ๋˜์ง€๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์–ด์š”. ๐Ÿ˜Š

           return Optional.ofNullable(SUIT_MAP.get(koreanName))
                .orElseThrow(() -> new NoSuchElementException("์กด์žฌํ•˜์ง€ ์•Š๋Š” ์นด๋“œ์ž…๋‹ˆ๋‹ค. cardName:" + koreanName));

ํ•œ ๊ฐ€์ง€ ๊ถ๊ธˆํ•œ ์ ์ด ์ƒ๊ฒจ์„œ ์งˆ๋ฌธ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ใ€Ž์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”ใ€ ์˜ˆ์™ธ ํŒŒํŠธ์™€ ๊ด€๋ จ ์ž๋ฃŒ๋ฅผ ์ฐพ์•„๋ณด๋‹ˆ, of ๋ฉ”์„œ๋“œ์˜ ํ˜ธ์ถœ์ž ์ž…์žฅ์—์„œ๋Š” ์œ ํšจํ•˜์ง€ ์•Š์€ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•œ ๊ฒƒ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์–ด IllegalArgumentException์ด ๋” ์ ์ ˆํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.
ํ˜น์‹œ ์ด๋ฒˆ ์ƒํ™ฉ์—์„œ ๋” ์ ์ ˆํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹  ํ‘œ์ค€ ์˜ˆ์™ธ๊ฐ€ ์žˆ์œผ์‹ ๊ฐ€์š”? ํŒ๋‹จํ•˜์‹  ๊ตฌ์ฒด์ ์ธ ๋ฐฐ๊ฒฝ์ด๋‚˜ ํ”„๋กœ์ ํŠธ ์ปจ๋ฒค์…˜์ด ์žˆ์„์ง€ ๋กœํ‚ค๋‹˜์˜ ์ƒ๊ฐ์ด ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค..

์ €๋„ ์ด ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์œ ์‹ฌํžˆ ์‚ดํŽด๋ณด๋ฉฐ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ๋ง์”€ํ•˜์‹  ํ•ด์„์— ์ €๋„ ๋™์˜ํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์š”!
of ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ์ ์˜ ๋ฌธ์ œ๋ฅผ ๋ณด๋ฉด, ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’์„ ์กฐํšŒํ–ˆ๋‹ค๊ธฐ๋ณด๋‹ค ์œ ํšจํ•˜์ง€ ์•Š์€ ์ธ์ž๋ฅผ ์ „๋‹ฌํ•œ ์ƒํ™ฉ์ด๋ผ IllegalArgumentException์ด ๋” ์ ์ ˆํ•ด ๋ณด์ด๋Š”๊ฒŒ ๋งž๋Š” ๊ฒƒ ๊ฐ™์•„์š”.
์ œ๊ฐ€ ๋‚จ๊ธด ์ฝ”๋ฉ˜ํŠธ๋Š” โ€œํ‘œ์ค€ ์˜ˆ์™ธ๋ฅผ ํ•œ ๋ฒˆ ๋” ๊ฒ€ํ† ํ•ด๋ณด๋ฉด ์ข‹๊ฒ ๋‹คโ€๋Š” ์ทจ์ง€์˜€๋Š”๋ฐ, ๋‹ค์‹œ ์‚ดํŽด๋ณด๋‹ˆ ์ด๋ฒˆ ์ผ€์ด์Šค์—์„œ๋Š” IllegalArgumentException์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ํŒ๋‹จ์ด ํƒ€๋‹นํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ‘๐Ÿ‘

ํŒ๋‹จํ•˜์‹  ๊ตฌ์ฒด์ ์ธ ๋ฐฐ๊ฒฝ์ด๋‚˜ ํ”„๋กœ์ ํŠธ ์ปจ๋ฒค์…˜ ์€ ์ œ๊ฐ€ ์•Œ๊ธฐ๋กœ๋Š” ์ด๋Ÿฐ ์ •์˜๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ๋ช…ํ™•ํ•˜์ง€๋Š” ์•Š์€ ๊ฒƒ ๊ฐ™์•„์š”.
์ด๋ฒˆ ํŒ๋‹จ์€ ๊ฐœ์ธ์ ์œผ๋กœ ์ด๋Ÿฐ ์ผ€์ด์Šค๊ฐ€ ์˜์†ํ™” ๊ณ„์ธต์—์„œ ์ฐพ์•„์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค๋ณด๋‹ˆ ์Šต๊ด€์ ์œผ๋กœ NoSuchElementException์„ ๋จผ์ € ๋– ์˜ฌ๋ ธ๋˜ ๊ฒƒ ๊ฐ™์•„์š”. ๐Ÿค”

  1. ์„œ๋น„์Šค ๋ ˆ์ด์–ด ๊ด€๋ จ ์งˆ๋ฌธ

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

๋‹ค๋งŒ ์„œ๋น„์Šค/๋„๋ฉ”์ธ ๊ตฌ๋ถ„ ๊ธฐ์ค€์„ ๋‹จ์ˆœํžˆ ์ƒํƒœ ์œ ๋ฌด๋ณด๋‹ค ์œ ์Šค์ผ€์ด์Šค ์กฐ์œจ์ธ์ง€, ๋„๋ฉ”์ธ ์ž์ฒด ํ‘œํ˜„์ธ์ง€๋กœ ๊ฐ€์ ธ๊ฐ€๋ฉด ๋” ๋‹จ๋‹จํ•œ ์„ค๋ช…์ด ๋  ๊ฒƒ ๊ฐ™๊ณ , ๊ทธ๋Ÿฐ ์˜๋ฏธ์—์„œ BlackjackGame์€ ๋„๋ฉ”์ธ ์ชฝ์— ๋” ๊ฐ€๊นŒ์›Œ ๋ณด์ž…๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ ์œ„์น˜๋„ ๊ทธ ์˜๋„์— ๋งž๊ฒŒ ์ •๋ฆฌ๋˜๋Š”๊ฒŒ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์–ด์š”. ๐Ÿ™‚ (์ˆ˜์ •ํ•ด์ฃผ์‹  ๊ฒƒ๋„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ™)

- matchResults(), getDealerFinalResult() ์‚ญ์ œ
- gameResults() โ†’ calculatePlayerProfits()๋กœ ๋ณ€๊ฒฝ
- getDealerProfit() โ†’ calculateDealerProfit()๋กœ ๋ณ€๊ฒฝ
- Dealer์— openFirstCard() ์ถ”๊ฐ€
- DTO์—์„œ ์ง์ ‘ ์นด๋“œ๋ฅผ ๊บผ๋‚ด๋˜ ๋กœ์ง ์ œ๊ฑฐ
- "์ฒซ ํŒจ๋งŒ ๊ณต๊ฐœ"๋Š” ๋„๋ฉ”์ธ ๊ทœ์น™์ด๋ฏ€๋กœ Dealer๊ฐ€ ์ฑ…์ž„
- ๋ธ”๋ž™์žญ ํŒ๋‹จ์ด 21๋กœ๋งŒ ๋˜์—ˆ๋Š”๋ฐ, ์นด๋“œ ์ˆ˜๋„ ํ™•์ธํ•˜๋Š” ๋กœ์ง ์ถ”๊ฐ€
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants