Skip to content

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

Open
frombunny wants to merge 76 commits intowoowacourse:frombunnyfrom
frombunny:step2
Open

Conversation

@frombunny
Copy link

@frombunny frombunny commented Mar 13, 2026

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

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

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

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

๋ฒ ํŒ… ๊ธˆ์•ก์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ๋”ฐ๋กœ ํ•„์š”ํ• ๊นŒ์š”?

์ €๋Š” ๋ฒ ํŒ… ๊ธˆ์•ก ๊ฐ์ฒด๋ฅผ ๋ณ„๋„๋กœ ์ƒ์„ฑํ• ๊นŒ ๊ณ ๋ฏผ์„ ํ•˜๋‹ค๊ฐ€ ๋”ฐ๋กœ ์ƒ์„ฑํ•˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค!

์ผ๋‹จ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ด์œ ๋Š” ์—ญํ• ์„ ๋ถ€์—ฌํ•˜๊ณ  ๊ทธ์— ๋งž๋Š” ์ฑ…์ž„์„ ๋‹คํ•˜๋„๋ก ํ•˜๋Š” ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•ด์š”.
์ œ ์ƒ๊ฐ์—๋Š” ์ง€๊ธˆ ๋‹จ๊ณ„์—์„œ ๋ฒ ํŒ… ๊ธˆ์•ก ์ž์ฒด๊ฐ€ ๊ฐ€์ ธ์•ผ ํ•  ์ฑ…์ž„์ด ๊ทธ๋ ‡๊ฒŒ ๋งŽ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์•„์š”.
๋ฒ ํŒ… ๊ธˆ์•ก ํ›„ ์ตœ์ข… ์ˆ˜์ต ๊ณ„์‚ฐ ๋กœ์ง ์™ธ์—๋Š” ๋ฒ ํŒ… ๊ธˆ์•ก์— ๋Œ€ํ•œ ๊ทœ์น™๋„ ์—†๊ณ ,
GameResult์—์„œ calculatePlayerProfit ํ•จ์ˆ˜๋กœ๋„ ํ˜„์žฌ ๊ธฐ๋Šฅ์„ ์ถฉ๋ถ„ํžˆ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค!

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

ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ์€ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ์ž˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑธ๊นŒ์š”?

๋ฌผ๋ก  ์ด์ œ ๋ง‰ TDD๋ฅผ ๊ฒจ์šฐ ์‹œ์ž‘ํ•œ ๋‹จ๊ณ„์—์„œ ๋ฒŒ์จ ์ž˜ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๋Š” ๊ฑด ์กฐ๊ธˆ ์š•์‹ฌ์ด๊ฒ ์ง€๋งŒ, ์•„์ง๋„ TDD๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ต๊ณ  ๋‚ฏ์„ค๊ฒŒ ๋А๊ปด์ง€๋Š” ๊ฒƒ ๊ฐ™์•„์š”.

์˜ˆ๋ฅผ ๋“ค์–ด ๊ตฌํ˜„์„ ํ•˜๋‹ค ๋ณด๋ฉด ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ•ด๋„ ์–ด๋–ค ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ •ํ•˜๊ณ  ์ž‘์„ฑํ•ด์•ผ ํ• ์ง€ ๋ง‰ํžˆ๋Š” ์ˆœ๊ฐ„์ด ์žˆ์—ˆ๊ณ , ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•œ ๋’ค์—๋„ ๊ตฌํ˜„ ๋˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๋งŽ์ด ์ˆ˜์ •ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์–ด์„œ
์ด ๊ณผ์ •์ด ์ œ๋Œ€๋กœ ๋œ TDD ์‚ฌ์ดํด์ธ์ง€ ๊ณ ๋ฏผ์ด ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค..!

๊ทธ๋ž˜์„œ ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•  ๋•Œ ์–ด๋А ์ˆ˜์ค€๊นŒ์ง€ ์„ค๊ณ„๋ฅผ ๊ฐ€์ •ํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•œ์ง€
์‹ค์ œ๋กœ TDD๋ฅผ ์ž˜ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์—ฐ์Šตํ•˜๊ฑฐ๋‚˜ ์˜์‹์ ์œผ๋กœ ์‹ ๊ฒฝ ์“ฐ๋ฉด ์ข‹์€ ๋ถ€๋ถ„์ด ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค!

leejaeheon added 30 commits March 1, 2026 21:15
Signed-off-by: leejaeheon <jaeheon@leejaeheons-MacBook-Air.local>
Signed-off-by: leejaeheon <jaeheon@leejaeheons-MacBook-Air.local>
Signed-off-by: leejaeheon <jaeheon@leejaeheons-MacBook-Air.local>
Signed-off-by: leejaeheon <jaeheon@leejaeheons-MacBook-Air.local>
Signed-off-by: leejaeheon <jaeheon@leejaeheons-MacBook-Air.local>
Signed-off-by: leejaeheon <jaeheon@leejaeheons-MacBook-Air.local>
์„ธ๋ถ€์‚ฌํ•ญ:
- ๋ฑ์— ์นด๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์˜ˆ์™ธ ๋ฐœ์ƒ
์„ธ๋ถ€์‚ฌํ•ญ:
- ACE๋Š” ๊ธฐ๋ณธ 11
- ACE๊ฐ€ ์กด์žฌํ•˜๊ณ  ํ•ฉ๊ณ„๊ฐ€ 21์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ 1๋กœ ๋ณ€๊ฒฝ
- Cards ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜ ๋„์ž…
- Participant์˜ Card ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜์€ Hand๋กœ ์ •์˜, Deck์˜ ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜์€ Cards๋กœ ์ •์˜
Copy link
Member

@Choi-JJunho Choi-JJunho left a comment

Choose a reason for hiding this comment

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

๋ฐ”๋‹ˆ~! step2 ๋ฏธ์…˜๋„ ์ž˜ ์ˆ˜ํ–‰ํ•ด์ฃผ์…จ๋„ค์š” ๐Ÿ‘
๋ช‡๊ฐ€์ง€ ์ฝ”๋ฉ˜ํŠธ ๋‚จ๊ฒผ์œผ๋‹ˆ ํ™•์ธ ๋ถ€ํƒ๋“œ๋ฆด๊ฒŒ์š” ๐Ÿ™
step2๋„ ํ™”์ดํŒ…์ž…๋‹ˆ๋‹ค! ๐Ÿ’ช

Comment on lines +19 to +20
BigDecimal profit = calculatePlayerProfit(player, dealer);
playersProfitSum = playersProfitSum.add(calculatePlayerProfit(player, dealer));
Copy link
Member

Choose a reason for hiding this comment

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

calculatePlayerProfit ์„ ๋‘๋ฒˆ ํ˜ธ์ถœํ•˜์‹œ๋Š” ์ด์œ ๊ฐ€ ์žˆ์„๊นŒ์š”?

Copy link
Author

Choose a reason for hiding this comment

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

ํ—‰๐Ÿ˜ฎ ์ด ๋ถ€๋ถ„์€ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์—์„œ ์‹ค์ˆ˜ํ–ˆ๋„ค์š”..! ์ˆ˜์ •ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค..!

Comment on lines +57 to +61
private ParticipantResultInfo participantResultInfo(Participant participant) {
return participantResultInfos.stream()
.filter(participantResultInfo -> participantResultInfo.name().equals(participant.name()))
.findFirst()
.orElseThrow(IllegalStateException::new);
Copy link
Member

Choose a reason for hiding this comment

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

์ด๋ฆ„์œผ๋กœ ์ฐธ๊ฐ€์ž๋ฅผ ์ฐพ๊ณ ์žˆ๊ตฐ์š”!
์ด๋ฆ„์ด์•„๋‹Œ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ํ™•์ธํ•ด์•ผํ•œ๋‹ค๋ฉด ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ์„๊นŒ์š”?
ex) ๊ฐ€์žฅ ๋ˆ์„ ๋งŽ์ด ๋ฒˆ ์‚ฌ๋žŒ

Copy link
Author

@frombunny frombunny Mar 15, 2026

Choose a reason for hiding this comment

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

๋ง์”€ํ•ด์ฃผ์‹  ๊ฒƒ์ฒ˜๋Ÿผ ์ด๋ฆ„์„ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ๋ญ”๊ฐ€ ์–ด์ƒ‰ํ•˜๊ฒŒ ๋А๊ปด์ง€๋”๋ผ๊ตฌ์š”..!
๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ, Map ๊ตฌ์กฐ๋กœ ๊ด€๋ฆฌํ•˜๋ฉด ์ฐธ๊ฐ€์ž ๊ฐ์ฒด ์ž์ฒด๋ฅผ key๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ข‹๊ฒ ์–ด์š” ๐Ÿฐ

++) ์ถ”๊ฐ€๋กœ ๋„๋ฉ”์ธ์ด dto๋ฅผ ๋“ค๊ณ  ์žˆ๋Š” ๋กœ์ง๋„ ์ด์ƒํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์—ฌ ์ด ๋ถ€๋ถ„๋„ ์ˆ˜์ •ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค..!

));
}

participantResultInfos.add(new ParticipantResultInfo(dealer.name(), playersProfitSum.negate()));
Copy link
Member

Choose a reason for hiding this comment

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

๋”œ๋Ÿฌ๋ฅผ 3๋ฒˆ์งธ์— ์ถœ๋ ฅํ•ด์•ผํ•œ๋‹ค ๋ผ๊ณ  ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ๋˜๋ฉด, ๋„๋ฉ”์ธ ๋กœ์ง์„ ๋ณ€๊ฒฝํ•ด์•ผํ• ๊นŒ์š”?
List์˜ ๋งˆ์ง€๋ง‰์— ๋”œ๋Ÿฌ๋ฅผ ๋‘”๋‹ค๋Š” ํ–‰์œ„๊ฐ€ ์ถœ๋ ฅ์— ์˜์กด์ ์ผ ์ˆ˜ ์žˆ์ง€ ์•Š๋‚˜ ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“œ๋Š”๋ฐ ๋ฐ”๋‹ˆ์˜ ์ƒ๊ฐ์€ ์–ด๋– ์‹ ๊ฐ€์š”?

Copy link
Author

@frombunny frombunny Mar 15, 2026

Choose a reason for hiding this comment

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

์ฃผ๋…ธ์˜ ๋ง์— ์™„์ „ ๋™์˜ํ•ด์š”.. ๊ทธ ๋ถ€๋ถ„์„ ์ „ํ˜€ ๊ณ ๋ คํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ์—ˆ๋„ค์š”!
GameResult๊ฐ€ ๋”œ๋Ÿฌ์™€ ํ”Œ๋ ˆ์ด์–ด ์ตœ์ข… ๊ฒฐ๊ณผ ์ •๋ณด๋ฅผ ๊ฐ๊ฐ ํ•„๋“œ๋กœ ๋“ค๊ณ  ์žˆ๋„๋ก ์ˆ˜์ •ํ•˜๋Š” ๊ฒŒ ์ข‹๊ฒ ์–ด์š” ๐Ÿ‘€

++) ์œ„์™€ ๊ฐ™์ด ๋จผ์ € ๋‹ตํ–ˆ์—ˆ๋Š”๋ฐ, Map์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ตณ์ด ํ•„๋“œ๋ฅผ ๋ถ„๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์„ ๊ฒƒ ๊ฐ™์•„์š” ๐Ÿ˜ฎ
๊ทธ๋ž˜์„œ Map ๊ตฌ์กฐ๋กœ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค!

return TIE;
}

return null;
Copy link
Member

Choose a reason for hiding this comment

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

๋ฉ”์„œ๋“œ๊ฐ€ null์„ ๋ฐ˜ํ™˜ํ•˜๋Š”๊ตฐ์š” ๐Ÿ‘€
null์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์„๋•Œ ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?
Optional์„ ํ™œ์šฉํ•ด๋ณด์‹œ๋Š”๊ฒƒ๋„ ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ‘

Copy link
Author

@frombunny frombunny Mar 15, 2026

Choose a reason for hiding this comment

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

null์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด NPE๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ชจ๋“  ๊ณณ์—์„œ null ์ฒดํฌ๋ฅผ ํ•ด์ค˜์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์ƒ๊น๋‹ˆ๋‹ค..!
์ œ๊ฐ€ Optional์„ ํ™œ์šฉํ•  ์ƒ๊ฐ์„ ๋ชปํ–ˆ๋„ค์š”..๐Ÿ˜ข Optional์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ˆ˜์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

import static domain.BlackjackRule.BLACK_JACK;

public class Player extends Participant {
private BigDecimal betAmount = BigDecimal.ZERO;
Copy link
Member

Choose a reason for hiding this comment

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

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

์ข‹์€ ๊ธฐ์ค€์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค! ์ €๋„ ๋ฐ”๋‹ˆ์˜ ์˜๊ฒฌ์— ๋™์˜ํ•ด์š” :)
์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ๋ˆ์ด๋ผ๋Š” ๋„๋ฉ”์ธ์„ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋Š” ํŽธ์ด๋ผ ๋ˆ์„ ๋‹ค๋ฃจ๋Š” ๊ฐ’์€ ๋ฐ˜๋“œ์‹œ ๋ž˜ํ•‘ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ํŽธ์ด์—์š”
1์›์ด๋ผ๋„ ์˜ค์ฐจ๊ฐ€ ๋‚˜๋ฉด ์•ˆ๋˜๋Š” ๋„๋ฉ”์ธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ฑฐ๋“ ์š”!

์ด๊ฑด ์ œ ๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ์ด๊ณ , ๋ฐ”๋‹ˆ์˜ ์ฃผ์žฅ๊ณผ ๊ทผ๊ฑฐ๋„ ํƒ€๋‹นํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค!

Copy link
Author

@frombunny frombunny Mar 15, 2026

Choose a reason for hiding this comment

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

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

.map(Player::new).toList()
);

players.getPlayers().forEach(player -> player.bet(inputView.getBetAmount(player.name())));
Copy link
Member

Choose a reason for hiding this comment

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

์ผ๊ธ‰์ปฌ๋ ‰์…˜์—์„œ์˜ ์š”์†Œ๋ฅผ ๋ฐ›์€ ๋’ค ๊ทธ ์š”์†Œ๊ฐ€ player๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ตฌ์กฐ๋„ค์š”!
๊ตฌ์กฐ์ ์œผ๋กœ ๋ถˆ์•ˆ์ •ํ•œ ํ˜•ํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ ์–ด๋–ป๊ฒŒ ์•ˆ์ •์ ์ธ ํ˜•ํƒœ๋กœ๋งŒ๋“ค์–ด ๋ณผ ์ˆ˜ ์žˆ์„๊นŒ์š”?
๋ฐฉ์–ด์  ๋ณต์‚ฌ๋ฅผ ์ ์šฉํ•ด๋ณด์‹œ์ฃ !

Copy link
Author

@frombunny frombunny Mar 15, 2026

Choose a reason for hiding this comment

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

๋ง์”€ํ•ด์ฃผ์‹  ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ players๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ๋ฐฉ์–ด์  ๋ณต์‚ฌ๋ฅผ ์ ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค!

๊ทธ๋Ÿฐ๋ฐ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๊ฐ€ ํ•œ ๊ฐ€์ง€ ๊ณ ๋ฏผํ–ˆ๋˜ ๋ถ€๋ถ„์ด ์ƒ๊ฐ๋‚ฌ์Šต๋‹ˆ๋‹ค.
[์ด๋ฆ„์„ ์ž…๋ ฅ ๋ฐ›์•„ Player ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ํ›„, ๋ฒ ํŒ… ๊ธˆ์•ก์„ ์ž…๋ ฅ ๋ฐ›๋Š” ๋ฐฉ์‹] VS [์ด๋ฆ„๊ณผ ๋ฒ ํŒ… ๊ธˆ์•ก์„ ๋ชจ๋‘ ์ž…๋ ฅ ๋ฐ›์€ ํ›„ Player ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹] ์ค‘ ๋ฌด์—‡์ด ๋” ์ ์ ˆํ• ์ง€ ๊ณ ๋ฏผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค..!

๊ฐœ์ธ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋‹น์‹œ์—๋Š” ์ด๋ฆ„์„ ์ž…๋ ฅ๋ฐ›์•„ Player ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ๋ฒ ํŒ… ๊ธˆ์•ก์„ ์ž…๋ ฅ ๋ฐ›๋Š” ๊ฒƒ์ด ์‹ค์ œ ๊ฒŒ์ž„ ํ๋ฆ„๊ณผ ๋” ์œ ์‚ฌํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ, ๊ทธ๋กœ ์ธํ•ด ์ €๋Ÿฐ ์ฝ”๋“œ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ ๊ฒƒ ๊ฐ™์•„์š”!

ํ˜น์‹œ ์ด๋ฆ„๊ณผ ๋ฒ ํŒ… ๊ธˆ์•ก์„ ๋ชจ๋‘ ์ž…๋ ฅ๋ฐ›์€ ๋’ค Player ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹์ด ๋” ์ ์ ˆํ•œ ์„ค๊ณ„์ผ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค!

Comment on lines +13 to +20
public class GameResult {
private final Map<Player, WinningStatus> playerWinningStatus = new LinkedHashMap<>();
private final List<ParticipantResultInfo> participantResultInfos = new ArrayList<>();

public GameResult(Players players, Dealer dealer) {
BigDecimal playersProfitSum = BigDecimal.ZERO;
for (Player player : players.getPlayers()) {
playerWinningStatus.put(player, WinningStatus.of(player, dealer));
BigDecimal profit = calculatePlayerProfit(player, dealer);
playersProfitSum = playersProfitSum.add(calculatePlayerProfit(player, dealer));
Copy link
Member

Choose a reason for hiding this comment

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

GameResult์˜ ์ฑ…์ž„์ด ๋งŽ์•„์ง„๊ฒƒ ๊ฐ™์•„์š”!

์ˆ˜์ต๊ณ„์‚ฐ, ๊ฒฐ๊ณผ์ €์žฅ, ์กฐํšŒ์˜ ์ฑ…์ž„์„ ๊ฐ€์ง€๊ณ ์žˆ๋Š”๋ฐ calculatePlayerProfit ์™€ ๊ฐ™์€ ๋กœ์ง์ด GameResult ์ฑ…์ž„์ด ๋งž์„๊นŒ์š”?

Copy link
Author

Choose a reason for hiding this comment

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

์ œ๊ฐ€ ๋ณด๊ธฐ์—๋„ ์ˆ˜์ต ๊ณ„์‚ฐ์€ ํ™•์‹คํžˆ GameResult์˜ ์—ญํ• ์€ ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค..!
ProfitCalculator๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๋”ฐ๋กœ ๋‘์–ด ์ˆ˜์ต ๊ณ„์‚ฐ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿฐ

}

@Test
void ํ”Œ๋ ˆ์ด์–ด๊ฐ€_์ฒ˜์Œ_๋ฐ›์€_์นด๋“œ_๋‘_์žฅ์˜_ํ•ฉ์ด_21์ด๊ณ _๋”œ๋Ÿฌ๋Š”_์•„๋‹_๊ฒฝ์šฐ_ํ”Œ๋ ˆ์ด์–ด๊ฐ€_์Šน๋ฆฌํ•œ๋‹ค(){
Copy link
Member

Choose a reason for hiding this comment

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

ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ์€ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ์ž˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑธ๊นŒ์š”?
๊ทธ๋ž˜์„œ ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•  ๋•Œ ์–ด๋А ์ˆ˜์ค€๊นŒ์ง€ ์„ค๊ณ„๋ฅผ ๊ฐ€์ •ํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•œ์ง€
์‹ค์ œ๋กœ TDD๋ฅผ ์ž˜ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์—ฐ์Šตํ•˜๊ฑฐ๋‚˜ ์˜์‹์ ์œผ๋กœ ์‹ ๊ฒฝ ์“ฐ๋ฉด ์ข‹์€ ๋ถ€๋ถ„์ด ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค!

TDD๋ฅผ ํ•œ๋‹ค๊ณ ํ•˜๋ฉด ๋ณดํ†ต Red-Green-Refactor ๋‹จ๊ณ„๋กœ ์ง„ํ–‰์„ํ•˜์ฃ !
๊ทผ๋ฐ ์ด Red ๋‹จ๊ณ„๋ฅผ ์ž‘์„ฑํ•˜๋Š”๊ฒŒ ๋ถˆ์•ˆํ•ด์„œ Green ์˜์—ญ์„ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•œ๋‹ค๋Š” ๋“ฑ์˜ ํ–‰๋™๋„ ์ž์ฃผ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„์š”
์ €๋„ ์ด TDD๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์šด ๊ณผ์ •์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด์š”

ํ…Œ์ŠคํŠธ ์ž‘์„ฑํ• ๋•Œ๋Š” ๋‹น์žฅ ํ•„์š”ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋‹จ์œ„๋กœ ์ž‘์„ฑํ•ด๋ณด๋Š”๊ฒŒ ๊ฐ€์žฅ ํ˜„์‹ค์ ์ธ๊ฒƒ ๊ฐ™์•„์š”. ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๊ทธ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋” ์ž˜๊ฐœ ์ชผ๊ฐœ๋ณด๋Š”๊ฑฐ์ฃ 

์‹ค์ œ๋กœ TDD๋ฅผ ๋” ์ž˜ ํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ์Šต์œผ๋กœ ์ถ”์ฒœ๋“œ๋ ค๋ณผ๋งŒํ•œ๊ฑด ๋ฏธ์…˜์ด ๋๋‚œ ๋’ค์— ๊ตฌํ˜„๋ถ€๋ฅผ ๋‹ค ์ง€์šฐ๊ณ , ํ…Œ์ŠคํŠธ๋งŒ ๋ณด๊ณ  ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์„ ์ง„ํ–‰ํ•ด๋ณด๋ฉด ๊ณ ํ†ต์Šค๋Ÿฝ์ง€๋งŒ ์„ฑ์žฅํ• ์ˆ˜๋Š” ์žˆ๋Š” ์—ฐ์Šต์ด ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š” ใ…Žใ…Ž

Copy link
Author

Choose a reason for hiding this comment

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

์ข‹์€ ์กฐ์–ธ ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ™‡
์ €๋„ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๊ฐ€ ๋„์ค‘์— green ์˜์—ญ์„ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•ด๋ฒ„๋ฆฌ๋Š” ์ผ๋“ค์ด ๋งŽ์•˜๋˜ ๊ฒƒ ๊ฐ™์•„์š”..!
์ฃผ๋…ธ์˜ ์กฐ์–ธ๋Œ€๋กœ ๋ฏธ์…˜์ด ๋๋‚œ ํ›„์—๋Š” ํ…Œ์ŠคํŠธ๋งŒ ๋ณด๊ณ  ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์„ ํ•œ๋ฒˆ ๊ฑฐ์ณ๋ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค!


@Test
void ๋ฌด์Šน๋ถ€์ผ_๊ฒฝ์šฐ_ํ”Œ๋ ˆ์ด์–ด๋Š”_์ž์‹ ์ด_๋ฒ ํŒ…ํ•œ_๊ธˆ์•ก์„_๋Œ๋ ค๋ฐ›๋Š”๋‹ค() {
Cards playerCards = new Cards(List.of(new Card(Rank.ACE, Suit.HEART), new Card(Rank.JACK, Suit.HEART)));
Copy link
Member

Choose a reason for hiding this comment

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

ํ…Œ์ŠคํŠธ์ฝ”๋“œ์—์„œ new Cards(...) ์™€ ๊ฐ™์€ ํŒจํ„ด์ด ๋ฐ˜๋ณต๋˜๊ณ ์žˆ๋„ค์š”!
Fixture๋ฅผ ๋งŒ๋“ค์–ด๋‘๋ฉด ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ํ‘œํ˜„ํ•ด๋ณผ ์ˆ˜ ์žˆ์„๊ฒƒ ๊ฐ™์•„์š” :)

Copy link
Author

Choose a reason for hiding this comment

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

fixture๋ฅผ ๋งŒ๋“ค์–ด์„œ ์นด๋“œ ์ƒ์„ฑ ๋กœ์ง์„ ์กฐ๊ธˆ ๋” ๊ฐ„์†Œํ™” ์‹œ์ผœ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

private final List<ParticipantResultInfo> participantResultInfos = new ArrayList<>();

public GameResult(Players players, Dealer dealer) {
BigDecimal playersProfitSum = BigDecimal.ZERO;
Copy link
Member

Choose a reason for hiding this comment

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

BigDecimal์„ ์‚ฌ์šฉํ•ด์ฃผ์…จ๊ตฐ์š”!
์™œ BigDecimal์„ ์‚ฌ์šฉํ•˜์…จ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค

Copy link
Author

Choose a reason for hiding this comment

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

float, double ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋ถ€๋™์†Œ์ˆ˜์ ์„ ์ด์šฉํ•ด ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ, ์ด ๊ณผ์ •์—์„œ ์˜ค์ฐจ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ˆ์€ ๋ฏธ์„ธํ•œ ์˜ค์ฐจ๋„ ํ—ˆ์šฉ๋˜๋ฉด ์•ˆ๋œ๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ, BigDecimal๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค ๐Ÿฐ

@frombunny
Copy link
Author

์•ˆ๋…•ํ•˜์„ธ์š”, ์ฃผ๋…ธ!
์ฃผ๋ง์€ ์ž˜ ๋ณด๋‚ด์…จ๋‚˜์š”? ๋ฆฌ๋ทฐํ•ด์ฃผ์‹  ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ˆ˜์ •์„ ์ง„ํ–‰ํ–ˆ์–ด์š” ๐Ÿ˜„
์ด๋ฒˆ ์ฃผ๋„ ์ฆ๊ฑฐ์šด ํ•œ ์ฃผ ๋ณด๋‚ด์…จ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿฐ

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.

3 participants