Skip to content

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

Open
ParkJiYeoung8297 wants to merge 78 commits intowoowacourse:parkjiyeoung8297from
ParkJiYeoung8297:step2

Conversation

@ParkJiYeoung8297
Copy link

@ParkJiYeoung8297 ParkJiYeoung8297 commented Mar 13, 2026

์‚ฌ์ดํด 2

๊ธฐ๋Šฅ

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

์‚ฌ์ดํด1 ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜

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

To ๋ฆฌ๋ทฐ์–ด

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

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

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

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

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

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

์‚ฌ์ดํด 1์˜ PR

๋งํฌ: #956


๋ฏธ์…˜ ์ค‘ ๊ธฐ๋ก

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 ๋“ฑ ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์— ๊ฑธ์ณ์„œ ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด ๋ถˆํŽธํ–ˆ๋‹ค.
ํ…Œ์ŠคํŠธ ๊ตฌํ˜„์„ ํ†ตํ•ด ๋„๋ฉ”์ธ์˜ ์ฑ…์ž„ ๋ถ„๋ฆฌ์— ๋Œ€ํ•œ ์žฌ๊ตฌ์„ฑ ํ•„์š” ์‹ ํ˜ธ๋ฅผ ํฌ์ฐฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ์„ค๊ณ„์— ๋„์›€์ด ๋˜์—ˆ๋‹ค.

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

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

ParkJiYeoung8297 and others added 30 commits March 5, 2026 10:32
# Conflicts:
#	src/main/java/controller/BlackjackController.java
#	src/main/java/domain/BlackjackResult.java
#	src/main/java/domain/Dealer.java
#	src/main/java/domain/Player.java
#	src/main/java/domain/Players.java
#	src/main/java/service/BlackjackService.java
#	src/main/java/validator/Validator.java
#	src/main/java/view/InputView.java
#	src/main/java/view/OutputView.java
#	src/test/java/domain/BlackjackResultTest.java
Copy link

@jurlring jurlring left a comment

Choose a reason for hiding this comment

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

์•„ํ‹ฐ ์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿฐ
์งˆ๋ฌธ ์ฃผ์‹  ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์ƒ๊ฐ๋“ค๊ณผ ์ฝ”๋ฉ˜ํŠธ ๋ช‡๊ฐ€์ง€ ๋‚จ๊ฒจ๋‘์—ˆ์–ด์š”.
์‹œ๊ฐ„ ๊ดœ์ฐฎ์œผ์‹ค ๋•Œ ํ™•์ธํ•ด์ฃผ์„ธ์š”~!
์ฆ๊ฑฐ์šด ์ฃผ๋ง ๋˜์„ธ์š”~~

Comment on lines +34 to +43
// 1. ์ฐธ๊ฐ€์ž๋“ค์ด ๋ชจ๋‘ burst๋ฉด ๋”œ๋Ÿฌ๊ฐ€ ์Šน๋ฆฌํ•œ๋‹ค.
if (players.isAllPlayerBurst()) {
return getPlayersAllBurstCase(matchResult);
}
// 2. ๋”œ๋Ÿฌ๊ฐ€ burst์ด๋ฉด ์‚ด์•„๋‚จ์€ ์ฐธ๊ฐ€์ž๋Š” ์šฐ์Šน์ด๋‹ค.
if (dealer.isBust()) {
return getDealerBurstCase(matchResult);
}
// 3. ๋”œ๋Ÿฌ๊ฐ€ burst๊ฐ€ ์•„๋‹ˆ๋ฉด, ๋”œ๋Ÿฌ๋ณด๋‹ค ํฌ๋ฉด ์Šน, ์ž‘์œผ๋ฉด ํŒจ, ๊ฐ™์€๋ฉด ๋ฌด์Šน๋ถ€์ด๋‹ค.
return getGeneralCase(matchResult);

Choose a reason for hiding this comment

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

์ฃผ์„์— ๋Œ€ํ•ด์„œ๋Š” ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹œ๋‚˜์š”~?
์ข‹์€ ๋„ค์ด๋ฐ๊ณผ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ์ฝ”๋“œ๋Š” ์ฃผ์„์ด ์—†์–ด๋„ ์ถฉ๋ถ„ํžˆ ์ดํ•ด๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค :)

Comment on lines +96 to +98
() -> {
return inputView.readBettingPrice(name);
}

Choose a reason for hiding this comment

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

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

import testutil.PlayerTestUtil;
import utils.generator.CardsGenerator;

class GameTest {

Choose a reason for hiding this comment

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

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

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

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

}
}

static int validateInteger(String input){

Choose a reason for hiding this comment

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

์ ‘๊ทผ์ œํ•œ์ž๋Š” ํ•„์š” ์—†์„๊นŒ์š”?

Player player = new Player("AAAA");
public static Player createPlayer(String name, List<Card> cards) {
Player player = new Player(name);
cards.forEach(player::add);

Choose a reason for hiding this comment

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

stream์˜ forEach์™€ for๋ฌธ์€ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ์„๊นŒ์š”?

return players.stream().allMatch(Player::isBust);
}

public Player getPlayer(int index){

Choose a reason for hiding this comment

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

ํ…Œ์ŠคํŠธ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์„œ๋“œ๋กœ ๋ณด์—ฌ์š” ๐Ÿ˜ฟ

Comment on lines +63 to +64
public void betMoney(int money) {
bettingScore = money;

Choose a reason for hiding this comment

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

ํ”Œ๋ ˆ์ด์–ด ์ƒ์„ฑ ์‹œ์ ์— bettingScore๋ฅผ ์ดˆ๊ธฐํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ์š”? ๊ทธ๋Ÿผ ์žฅ์ ์€ ์–ด๋–ค๊ฒŒ ์žˆ์„๊นŒ์š”?

Comment on lines +28 to 53
public MatchCase calculateMatchCase(int dealerTotal) {
if (cards.getFinalScore() > dealerTotal) {
return MatchCase.WIN;
}
if (cards.getFinalScore() == dealerTotal) {
return MatchCase.DRAW;
}
if (cards.getFinalScore() < dealerTotal) {
return MatchCase.LOSE;
}
throw new IllegalArgumentException("[ERROR] ์ผ์น˜ํ•˜๋Š” enum์ด ์—†์Šต๋‹ˆ๋‹ค.");
}

private int calculateAceScore() {
if (!isAceExist() || calculateScore() > 11) {
return ACE_ADDITION_NONE_SCORE;
public void calculateMoney(MatchCase matchCase, boolean isDealerBlackjack) {
if (cards.isBlackjack() && !isDealerBlackjack) {
bettingScore = (int) ((int) bettingScore * Game.BLACKJACK_BONUS);
return;
}
if (matchCase.equals(MatchCase.LOSE)) {
loseMoney();
return;
}

if (matchCase.equals(MatchCase.WIN)) {
return;
}

Choose a reason for hiding this comment

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

ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋„ˆ๋ฌด ๊ณผ๋„ํ•œ ์ฑ…์ž„์„ ๊ฐ€์ง„๊ฒŒ ์•„๋‹๊นŒ์š”~?
๋‹จ์ผ์ฑ…์ž„์›์น™์„ ์ง€ํ‚ค๊ณ  ์žˆ์ง€ ์•Š์•„๋ณด์—ฌ์š”.

import domain.dto.MatchResultDto;
import domain.enums.MatchCase;

public final class OutputView {

Choose a reason for hiding this comment

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

Dealer๋ฅผ ํ”Œ๋ ˆ์ด์–ด๋กœ ์ƒ์„ฑํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋˜์–ด, view๋‹จ์—์„œ ๋„๋ฉ”์ธ ์ •์ฑ…์— ๋Œ€ํ•œ ๊ตฌํ˜„์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ ๊ฐ™์•„์š” ๐Ÿ˜ฟ

Choose a reason for hiding this comment

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

์ง€๊ธˆ ๋„๋ฉ”์ธ ๊ทœ๋ชจ๋ฅผ ๋ณด์•˜์„ ๋•Œ๋Š” Aggregate Root๊นŒ์ง€ ๋‚˜๋ˆ„์–ด ์„ค๊ณ„ํ•ด์•ผ ํ•  ์ •๋„๋กœ ๋ณต์žกํ•œ ๊ตฌ์กฐ๋Š” ์•„๋‹Œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋ง์”€ํ•ด์ฃผ์‹  ๊ฒƒ์ฒ˜๋Ÿผ Game์ด ์ „์ฒด ํ๋ฆ„์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ตฌ์กฐ ์ž์ฒด๊ฐ€ ํฌ๊ฒŒ ์–ด์ƒ‰ํ•ด ๋ณด์ด์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

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

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