[๐ ์ฌ์ดํด2 - ๋ฏธ์ (๋ธ๋์ญ ๋ฐฐํ )] ๋ฌ์ ๋ฏธ์ ์ ์ถํฉ๋๋ค.#1125
[๐ ์ฌ์ดํด2 - ๋ฏธ์
(๋ธ๋์ญ ๋ฐฐํ
)] ๋ฌ์ ๋ฏธ์
์ ์ถํฉ๋๋ค.#1125soohyun1904 wants to merge 23 commits intowoowacourse:soohyun1904from
Conversation
- 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() ๊ฒ์ฆ
Rok93
left a comment
There was a problem hiding this comment.
๋ฌ์ ์ฌ์ดํด2 ๋ฏธ์
๋ ํ๋ฅญํ๊ฒ ์ ์งํํด์ฃผ์
จ๋ค์. ๐๐
์ ์ฒด์ ์ผ๋ก ๊น๋ํ๊ฒ ๊ตฌํํด์ฃผ์
์ ์ฝ๋ ํ์
๋ ํ๊ฒฐ ๋ ์ฌ์ ๋ ๊ฒ ๊ฐ์์. ๐
์ง๋ฌธ ์ฃผ์ ๋ด์ฉ์๋ํ ๋ต๋ณ๊ณผ ์ถ๊ฐ๋ก ๋ช๋ช ์ฝ๋ฉํธ ๋จ๊ฒจ๋์์ผ๋ ํ์ธ๋ถํ๋๋ฆด๊ฒ์. ๐
์ํํจํด์ ๊ฒฝ์ฐ ๋ฐฉํฅ์ฑ์ ๋จผ์ ์ง๋ฌธํ์๊ธฐ๋ณด๋ค๋, ๊ฐ๋ตํ๊ฒ๋ผ๋ ๋ฌ์๊ฐ ์๊ฐํ๋ ๋ฐฉํฅ์ฑ์ด๋ ํน์ ๋ฐฉํฅ์ฑ ์ค๋ช
์ด ์ด๋ ต๋ค๋ฉด ์ฝ๋๋ก ์์ฑํ ๋ค, ๋ฐฉํฅ์ฑ์ ์ง๋ฌธํด์ฃผ์๋ฉด ์ข๊ฒ ๋ค๊ณ ์๊ฐํ์ด์. ๐
| public InputView inputView() { | ||
| return new InputView(); | ||
| } | ||
|
|
||
| public OutputView outputView() { | ||
| return new OutputView(); | ||
| } |
There was a problem hiding this comment.
๋ฉ์๋๋ก ๋ถ๋ฆฌํ์ง ์์๋ ์ถฉ๋ถํ ๋์ผํ ์๋๋ฅผ ๋๋ฌ๋ผ ์ ์์ ๊ฒ ๊ฐ์์. ๐
|
|
||
| public GameResultDto generateGameResult() { | ||
| return GameResultDto.from(players, dealer); | ||
| public int getDealerProfit(List<GameResult> gameResults) { |
There was a problem hiding this comment.
get ๊ฐ์ prefix๋ฅผ ๋จ์ getter(๋ณ๋ ๊ณ์ฐ ์์ด, ๋จ์ํ ๊ฐ์ ๊บผ๋ด์ค๋ ๋ฉ์๋)๋ก ์ฐฉ๊ฐํ ์ ์๋ค๊ณ ์๊ฐํด์. ๐ค
์ด๋ฐ ๊ฒฝ์ฐ์๋ dealer profit์ ๊ณ์ฐํ๋ ํ์๋ฅผ ๋๋ฌ๋ผ ์ ์๋๋ก get๋ณด๋ค๋ calculate ๊ฐ์ ํํ์ด ์ด๋จ๊น ์ถ์ด์. ๐
| public void dealerDraw() { | ||
| TrumpCard drawn = deck.draw(); | ||
| dealer.receive(drawn); | ||
| public List<GameResult> gameResults(){ |
There was a problem hiding this comment.
์๋ฐ ์ฝ๋ ์ปจ๋ฒค์ ์์๋ ๋ฉ์๋ ๋ค์ด๋ฐ ๊ท์น์ผ๋ก ๋์ฌ or ๋์ฌ๊ตฌ๋ฅผ ์ฌ์ฉํ๋ผ๊ณ ๊ฐ์ด๋ํ๊ณ ์์ด์.
| } | ||
|
|
||
| public Map<String, Long> getDealerFinalResult(Map<Player, MatchResult> playerResult) { | ||
| public Map<String, Long> getDealerFinalResult(Map<String, MatchResult> playerResult) { |
There was a problem hiding this comment.
์ด ๋ฉ์๋๋ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ค์. ๐
์ฌ์ฉํ์ง ์๋ ๋ฉ์๋๋ ๊ณผ๊ฐํ ์ ๊ฑฐํด์ฃผ์ธ์. ๐
| .flatMap(suit -> Arrays.stream(Rank.values()) | ||
| .map(rank -> TrumpCard.of(suit, rank))) | ||
| .collect(Collectors.toList()); | ||
| List<TrumpCard> cards = new ArrayList<>(TrumpCard.CARDS); |
There was a problem hiding this comment.
TrumpCard.CARDS << ๋ณด๋ค๋ TrumpCard.ALL_CARD (ํน์ CARDS)๊ฐ ์กฐ๊ธ ๋ ์์ ์๋ฏธ๊ฐ ๋ช
ํํ์ง ์์๊น์? ๐ค
|
|
||
| public int countCards() { | ||
| return cards.size(); | ||
| public boolean isBlackjack(){ |
There was a problem hiding this comment.
๋ธ๋์ญ ์ ๋จ์ํ ์ ์๋ก๋ง ํ๋จํ ์ ์๋๊ฑด๊ฐ์? ๐ค
There was a problem hiding this comment.
์นด๋ ์๋ ์ฐธ๊ฐ์ ๋ก์ง์ ์ถ๊ฐํ์๋๋ฐ, Hand์ ์๋๊ฒ ๋ง๋๊ฑฐ ๊ฐ๋ค์
| @@ -0,0 +1,12 @@ | |||
| package blackjack.domain.vo; | |||
|
|
|||
| import blackjack.domain.Players; | |||
There was a problem hiding this comment.
๋ถํ์ํ import๋ฌธ์ผ๋ก ๋ณด์ฌ์.
์ ๊ฑฐ ๋ถํ๋๋ฆด๊ฒ์. ๐
| public Map<String, MatchResult> matchResults() { | ||
| Map<String, MatchResult> results = new LinkedHashMap<>(); | ||
| players.forEach(player -> | ||
| results.put(player.getName(), MatchResult.playerResult(player, dealer)) |
There was a problem hiding this comment.
ํ์ฌ MatchResult์์ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ก player์ delaer๋ฅผ ๋ฐ๊ณ ์๋๋ฐ์.
์ค์ ๋ธ๋์ญ ๊ฒ์๋ ์น,ํจ ํ๋จ์ dealer๊ฐ ํ๋, ์นํจ๋ฅผ ํ๋จํ๋ ์ญํ ์ dealer ๊ฐ์ฒด์๊ฒ ์์ํด๋ณด๋ฉด ์ด๋จ๊น์?
There was a problem hiding this comment.
์นํจ ํ์ ์ Dealer์ ๋๋ ๊ฒ๋ ๊ณ ๋ฏผํ๋๋ฐ, Dealer ์์ ๋ ํ์ ๋์์ด๋ผ ์๊ธฐ๊ฐ ํ์ ํ๋ ๊ฒ ์ด์ํ๋ค๊ณ ๋๊ผ์ต๋๋ค.
ํ์ ์ ๊ฒ์ ๊ท์น์ด๋ผ๊ณ ์๊ฐํด์ BlackjackRule๋ก ๋ถ๋ฆฌํ์ต๋๋ค.
ํน์ ๊ณ ์น๋๊ฒ ์ข์๊น์?
| this.earningRate = earningRate; | ||
| } | ||
|
|
||
| public static Payoff playerResult(Player player, Dealer dealer) { |
There was a problem hiding this comment.
๋ฐฐ๋น ๋ฐฐ์์ ๋ํ enum ์ ๋ณ๋๋ก ๋ง๋์ จ๊ตฐ์? ๐๐
์ด ์์ต์ ๊ณ์ฐํ๋ ๋ก์ง์๋ณด๋ค๋ณด๋, ์ฌ์ค์ ๋ธ๋์ญ ์น๋ฆฌ ์ผ์ด์ค๋ง ์ ์ธํ๋ฉด ๊ธฐ์กด์ GameResult์ 1:1๋ก ๋งค์นญ๋๋ ๊ฒ ๊ฐ์ง ์๋์?
๋ณ๋ enum class๋ฅผ ๋ง๋ค ํ์ ์์ด, GameResult์ ๊ฐ enum ์์์ ๋ฐฐ๋น๋ฅ ์ ๋ ํ, ๊ธฐ์กด์ฒ๋ผ ๊ฒ์ ์นํจ๋ฅผ ํ๋จํ์ฌ ๋ฐํํ๋ ์น,๋ฌด,ํจ๋ฅผ ๊ฐ์ง๊ณ ๋ฐฐ๋น๋ฅ (?)์ ํ๋จํ ์ ์์ง ์์์๊น ์ถ์ด์.
์ง๊ธ์ ๋ฐฉ์์ด ๋์๋ค๋ ์๊ธฐ๋์๋๊ณ ์ด๋ ๊ฒ๋ ์๊ฐํด๋ณผ ์ ์์ง ์์๊น...? ํ๋ ๊ด์ ๊ณต์ ์ฐจ์์ผ๋ก ๋จ๊ธด ์ฝ๋ฉํธ์์.
๊ผญ ๋ฐ์ํด๋ฌ๋ผ๋ ์๊ธฐ๋ ์๋๋ ์ฐธ๊ณ ๋งํด์ฃผ์ธ์. ๐
| @@ -0,0 +1,19 @@ | |||
| package blackjack.config; | |||
There was a problem hiding this comment.
PR๋ก ๋จ๊ธด ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ์ฌ๊ธฐ์ ๋จ๊ฒจ๋ณผ๊ฒ์.
- ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ํ์ฉํ ์ปจํธ๋กค๋ฌ-๋๋ฉ์ธ ๋ถ๋ฆฌ
๊ธฐ์กด์๋ ์ปจํธ๋กค๋ฌ๊ฐ ์ธ๋ฑ์ค๋ก Players๋ฅผ ์ง์ ์ํํ๋ฉฐ ์กฐ์ํ๊ณ ์์์ต๋๋ค.
์ด๋ฅผ HitDecision, TurnDisplay, BetDecision ๊ฐ์ ํจ์ํ ์ธํฐํ์ด์ค๋ก ๋ฐ๊ฟ์
ํด ์ํ์ ๊ฒ์ ๋ก์ง์ Game ๋ด๋ถ๋ก ์ด๋์์ผฐ์ต๋๋ค.
์ด ๋ฐฉํฅ์ด ๋ง๋์ง, ์คํ๋ ค ์ธํฐํ์ด์ค๊ฐ ๋์ด๋๋ฉด์ ๋ณต์กํด์ง ๊ฑด ์๋์ง ํผ๋๋ฐฑ ๋ถํ๋๋ฆฝ๋๋ค.
์ปจํธ๋กค๋ฌ๊ฐ Players๋ฅผ ์ง์ ์ํํ๋ฉฐ ๊ฒ์ ์งํ์ ์กฐ์ํ๋ ๊ตฌ์กฐ๋ณด๋ค, ํด ์งํ ์์ฒด๋ฅผ Game์ด ์ฑ ์์ง๋๋ก ์ฎ๊ธด ๋ฐฉํฅ์ ๋ ์์ฐ์ค๋ฝ๋ค๊ณ ๋ด ๋๋ค. ํนํ โ๋๊ฐ ์นด๋๋ฅผ ๋ ๋ฐ์ ์ ์๋์งโ, โํด์ ์ธ์ ์ข ๋ฃํ๋์งโ ๊ฐ์ ๊ท์น์ ๋๋ฉ์ธ์ ๊ฐ๊น์ด ์ฑ ์์ด๋ผ ์ปจํธ๋กค๋ฌ์ ๋จ์ ์์ผ๋ฉด ๊ด๋ จ ํ๋จ ์ฝ๋๊ฐ ์ฌ๋ฌ ํด๋์ค์ ํฉ์ด์ง ์ ์์ด์. (์ถํ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๊ฒ ์ฃ ๐ฅฒ)
๋ค๋ง HitDecision, TurnDisplay, BetDecision์ฒ๋ผ ์ธํฐํ์ด์ค๊ฐ ๋์ด๋ ๋งํผ ์ถ์ํ ๋น์ฉ๋ ๋ถ๋ช
ํ ์๊ธฐ๋๋ฐ, ๊ทธ๋์ ์ด ๊ตฌ์กฐ๊ฐ ์ค๋๋ ฅ์ ๊ฐ์ง๋ ค๋ฉด, ๋จ์ํ ์ปจํธ๋กค๋ฌ ์ฝ๋๋ฅผ ๋๋ฉ์ธ ๊ฐ์ฒด๋ก ๋ฐ์ด ๋ฃ์ ๊ฒ์ด ์๋๋ผ โ์
๋ ฅ ๊ฒฐ์ โ๊ณผ โ๊ฒ์ ๊ท์นโ์ ๋ถ๋ฆฌํ๋ค๋ ์ ์ด ๋๋ฌ๋์ผ ํ๋ค๊ณ ์๊ฐํด์.
์ง๊ธ์ฒ๋ผ ์ธ๋ถ์์๋ ๊ฒฐ์ ๋ง ๋๊ธฐ๊ณ , ์ค์ ์งํ์ Game์ด ๋ด๋นํ๋ค๋ฉด ๋ฐฉํฅ ์์ฒด๋ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํด์!
There was a problem hiding this comment.
- ์ถ๋ ฅ ์ฝ๋ฐฑ์ ๋๋ฉ์ธ ๊ฒฐํฉ ๋ฌธ์
hitํ ๋๋ง๋ค ์ค๊ฐ ์นด๋๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ ์๊ตฌ์ฌํญ ๋๋ฌธ์ TurnDisplay ์ฝ๋ฐฑ์ ์ฌ์ฉํ์ต๋๋ค.
์ ๋ ฅ์ ์ฝ๋ฐฑ์ผ๋ก, ์ถ๋ ฅ์ ๊ฒฐ๊ณผ ๊ฐ์ฒด๋ฅผ ์ปจํธ๋กค๋ฌ๊ฐ ๋น๊ฒจ๊ฐ๋ ๋ฐฉ์์ด ๊น๋ํ๋ค๊ณ ์๊ฐํ์ง๋ง, ํด ์ค๊ฐ ์ถ๋ ฅ์ ๋น๊ฒจ๊ฐ ์ ์์ด์ ์ฝ๋ฐฑ์ผ๋ก ์ฒ๋ฆฌํ์ต๋๋ค.
๋ค๋ง ์ถ๋ ฅ ํ์์ด ๋ฐ๋๋ฉด ์ฝ๋ฐฑ ์๊ทธ๋์ฒ๋ ๋ฐ๋ ์ ์๋ค๋ ์ ์ด ๊ฑธ๋ฆฝ๋๋ค.
ํ์ฌ๋ (String name, List cardNames)๋ง ๋๊ธฐ๊ณ ์๋๋ฐ, ์ด ์ ๋๋ฉด ๊ด์ฐฎ์ ๊ฑด์ง, ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์๋์ง ์๊ฒฌ ๋ถํ๋๋ฆฝ๋๋ค.
์ค๊ฐ ์ถ๋ ฅ์ด ํ์ํ ์๊ตฌ์ฌํญ ๋๋ฌธ์ TurnDisplay ๊ฐ์ ์ฝ๋ฐฑ ์์ฒด๋ ํฉ๋ฆฌ์ ์ธ ์ ํ์ด๋ผ ์๊ฐํด์.
๋ค๋ง ๋ง์ํ์ ๊ฒ์ฒ๋ผ ํ์ฌ์ฒ๋ผ ์ถ๋ ฅ ์นํ์ ์ธ ๊ฐ๋ค์ ์ง์ ์๊ทธ๋์ฒ์ ๋
ธ์ถํ๋ฉด, ์ถ๋ ฅ ํ์ ๋ณ๊ฒฝ ์ ๋๋ฉ์ธ ๋ฉ์๋์ ์ฝ๋ฐฑ ์ธํฐํ์ด์ค๊ฐ ๊ฐ์ด ํ๋ค๋ฆด ์ ์์ด ๋ณด์ฌ์.
์ง๊ธ ์๊ตฌ์ฌํญ ๋ฒ์์์๋ name, cardNames ์ ๋๋ง ๋๊ธฐ๋ ๊ฒ๋ ์ถฉ๋ถํ ๋จ์ํ ์ ํ์ด์ง๋ง, ์ดํ ํ์ํ ์ ๋ณด๊ฐ ๋์ด๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด ํด ์ํ๋ฅผ ๋ด๋ ๋ณ๋ ๊ฐ์ฒด๋ก ํ ๋ฒ ๊ฐ์ธ ๋๋ ๋ฐฉํฅ์ด ๋ ๋ณ๊ฒฝ์ ์ ์ฐํ ๊ฒ ๊ฐ์์. ๐
There was a problem hiding this comment.
- ์์กด ๊ด๊ณ โ "์๋ ๊ฒ"์ ๊ธฐ์ค
ํ๋ผ๋ฏธํฐ, ๋ฐํ๊ฐ, ํ๋, ๋ด๋ถ ์์ฑ ๋ฑ ๋ฉ์๋ ์๊ทธ๋์ฒ์ ํ์ ์ด ๋ฑ์ฅํ๋ฉด ์์กด์ด ์๊ธฐ๋ ๊ฒ์ผ๋ก ์ดํดํ์ต๋๋ค.
์ด ๊ธฐ์ค์ผ๋ก 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)๋ก ๋ฐ๊พธ๋ฉด์ ํ์
์์กด์ ์ค์์ง๋ง ์ปฌ๋ ์
์ ํ์๋ฅผ ์ธ๋ถ์์ ์กฐํฉํ๊ฒ ๋ ๋ฉด๋ ์์ด, ์ผ๊ธ ์ปฌ๋ ์
์ ์ฑ
์๊น์ง ๊ฐ์ด ์ฝํด์ง์ง ์์๋์ง๋ ํจ๊ป ์๊ฐํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์์. ๐
There was a problem hiding this comment.
- ๊ธฐ๋ฅ ๋ณ๊ฒฝ ์ ํ
์คํธ๊ฐ ๊นจ์ง๋ ๋ฒ์
Hand์ isBust()๋ฅผ Player๊ฐ ์์ํ๋๋ก ๋ฆฌํฉํ ๋งํ๋๋ฐ, ๊ทธ๋๋ Hand์ ํ์๊ฐ ๋ฐ๋๋ฉด PlayerTest, DealerTest์ canHit() ํ ์คํธ๋ ํจ๊ป ๊นจ์ง๋๋ค. ์์์ ํ๋๋ผ๋ ํ์ ๊ฐ์ฒด์ ํ์ ์์ฒด๊ฐ ๋ฐ๋๋ฉด ์์ ํ ์คํธ๋ ์ํฅ์ ๋ฐ๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํ์ ๋ณ๊ฒฝ์ด ์ง์ ์์กดํ๋ ์์ ํ
์คํธ๊น์ง ๊นจ๋จ๋ฆฌ๋ ๊ฒ ์์ฐ์ค๋ฌ์ด ๊ฑด์ง, ์๋๋ฉด ์์ ํ
์คํธ๊ฐ ์ ๊นจ์ง๋๋ก ์ค๊ณํ ์ ์๋ ๊ฑด์ง ๊ถ๊ธํฉ๋๋ค.
์ด๋๊น์ง ๊นจ์ง๋ ๊ฒ ์ ์์ด๊ณ ์ด๋๋ถํฐ๊ฐ ์ค๊ณ ๋ฌธ์ ์ ์ ํธ์ธ์ง ๊ธฐ์ค์ด ์์๊น์?
์๊ฐ ์ ๋ฆฌ์ค
There was a problem hiding this comment.
- ์ํ ํจํด(State Pattern) ์ ์ฉ
ํ์ฌ hit ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ canHit()์ if๋ฌธ์ผ๋ก ํ๋จํ๊ณ ์๋๋ฐ, ์ํ ํจํด์ ์ ์ฉํ๋ฉด Player์ ์ํ(ํํ ์ค, ์คํ ์ด, ๋ฒ์คํธ, ๋ธ๋์ญ)์ ๋ฐ๋ผ ํ์๋ฅผ ๋ถ๋ฆฌํ ์ ์๋ค๊ณ ๋ค์ ๋จ๊ณ์ ์ ํ ์์์ต๋๋ค.
์ด ๋ฏธ์ ์ ์ํ ํจํด์ ์ ์ฉํ๋ค๋ฉด ์ด๋ค ๊ตฌ์กฐ๊ฐ ์ข์์ง ๋ฐฉํฅ์ ์ก๊ณ ์ถ์ด์ ์กฐ์ธ ๋ถํ๋๋ฆฝ๋๋ค.
์ํ ํจํด ์์ฒด๊ฐ ๋ธ๋์ญ ๋ฏธ์
์ ํ์ ์๊ตฌ์ฌํญ์ ์๋ ๊ฒ์ผ๋ก ์๊ณ ์๊ณ ,
๋ค์ ๋จ๊ณ์ ์ ํ ์์์ต๋๋ค << ๋ค์ ๋จ๊ณ๊ฐ ๋ฌด์์ ๋ง์ํ์๋ ๊ฑด์ง ์กฐ๊ธ ํท๊ฐ๋ฆฌ๋๋ฐ์.
๋ธ๋์ญ ๋ฏธ์
์ด ์ฌ์ดํด2๊น์ง ์์ด๋ณด์ฌ์, ๋ค์ ๋จ๊ณ์ ์๋ฏธ๋ฅผ ์ ๋ชจ๋ฅด๊ฒ ์ด์. ๐ค
์ถ๊ฐ์ ์ผ๋ก ์ํํจํด์ ๋์
ํ๋ ๊ฒ ๊น์ง๋ ๋ฌ์๊ฐ ํด๋ณด๊ณ ์ถ๋ค๋ฉด ์ถ๊ฐ๋ก ์งํํด๋ด๋ ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค...๋ง!
์ง๋ฌธ์ด ์กฐ๊ธ ์๋ชป๋๋ค๊ณ ์๊ฐํด์.
๋ฐฉํฅ์ ์ ๊ฐ ๋จผ์ ์ค๊ณ๋ฅผ ํด๋๋ฆฌ๋๊ฒ ์ข์ ๋ฐฉํฅ์ ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ ์ด๋ ๋ฌ์๊ฐ ์๊ฐํ๋ ์ํ ํจํด ๋์ ๋ฐฉํฅ(or ์ฝ๋)์ ๊ณ ๋ฏผ์ ๋ฐ์ํด๋ณด์ ๋ค, ํผ๋๋ฐฑ์ ์์ฒญํ์ ๋ค๋ฉด ๊ทธ์๋ํด์ ์ ๊ฐ ๋ฐฉํฅ์ ๊ฐ์ด ํ์ธํด๋ณผ ์ ์๊ฒ ์ง๋ง, ์ฒ์๋ถํฐ ์ ๊ฐ ๋ฐฉํฅ์ ์ ์ํด์ฃผ๋ ๋ฐฉ์์ ์ฐํ ์ฝ ์ทจ์ง์๋ ์กฐ๊ธ ๋ฒ์ด๋ฌ๋ค๊ณ ์๊ฐํด์. ๐
There was a problem hiding this comment.
- ์์ ๊ธฐ๋ฅ ๋ณ๊ฒฝ์ผ๋ก ์ธํ ํ์ ์์ ๋ฒ์
๋ฐฐํ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ฉด์ ๊ธฐ์กด MatchResult์ ์ญํ ์ด ์ ๋งคํด์ก์ต๋๋ค. ์นํจ ํ์ ์ ์ฌ์ ํ ํ์ํ์ง๋ง ์ถ๋ ฅ์๋ ์์ต ๊ธ์ก๋ง ๋์ค๊ณ ,
์์ต ๊ณ์ฐ์ ์ํด์๋ MatchResult + ๋ฐฐํ ๊ธ์ก์ด ํจ๊ป ํ์ํฉ๋๋ค.
๊ธฐ์กด MatchResult๋ฅผ ์์ ํด์ ์์ต ๊ณ์ฐ๊น์ง ๋ด๋นํ๊ฒ ํ ์ง, ๋ณ๋์ ์์ต ๊ณ์ฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ผ ํ ์ง, ๊ทธ๋ฆฌ๊ณ ๊ธฐ์กด matchResults()๋ฅผ ํธ์ถํ๋ ์ปจํธ๋กค๋ฌ์ View๋ ํจ๊ป ๋ฐ๊ฟ์ผ ํ๋๋ฐ ์ด๋ฐ ์ฐ์ ์์ ์ ์ต์ํํ๋ ค๋ฉด ์ด๋ป๊ฒ ์ค๊ณํ๋ ๊ฒ ์ข์์ง ๊ถ๊ธํฉ๋๋ค.
์ ๋ ๋ณ๋์ ์์ต ๊ณ์ฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธด ํ์ต๋๋ค.
๊ด๋ จ ์ฝ๋ฉํธ๋ ํด๋น ์ฝ๋ฉํธ์์ ๋จ๊ฒจ๋์๋๋ฐ์.
์ ๋ ์นํจ๊ฒฐ๊ณผ์ ๋ฐฐ๋น๋ฅ (?)์ด 1:1๋ก ๋งค์นญ๋๋ค๊ณ ์๊ฐํด์ ๋ฐฐ๋น๋ฅ ์ด๋ผ๋ ๊ฐ๋ ์ ๋ณ๋ enum์ด ์๋๋ผ ์นํจ๊ฒฐ๊ณผ์ ์ํ๋ก ๋์์ ๊ฒ ๊ฐ์์. ๐
๋ฌ์๊ฐ ์งํํ์ ๋ฐฉํฅ๋ ์๊ฐํด๋ณด๋ฉด Payoff๊ฐ ์ค์ง์ ์ผ๋ก WIN,DRAW, LOSE๋ฅผ ๊ฐ ์์๋ก ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ์๊ฐํด๋ณด๋ฉด ๊ธฐ์กด์ MatchResult์ ์ ์ฌํด๋ณด์ด์ง ์๋์? ๐
์ ๋ ๊ธฐ์กด MatchResult๋ฅผ ์์ ํ๋๋ผ๋ ๊ณ์ฐ์ ๋ด๋นํ๊ฒํ์ง๋ ์์ ๊ฒ ๊ฐ์์.
๊ธฐ์กด MatchResult๋ฅผ ์์ ํด์ ์์ต ๊ณ์ฐ๊น์ง ๋ด๋นํ๊ฒ ํ ์ง, ๋ณ๋์ ์์ต ๊ณ์ฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ผ ํ ์ง, ๊ทธ๋ฆฌ๊ณ ๊ธฐ์กด matchResults()๋ฅผ ํธ์ถํ๋ ์ปจํธ๋กค๋ฌ์ View๋ ํจ๊ป ๋ฐ๊ฟ์ผ ํ๋๋ฐ ์ด๋ฐ ์ฐ์ ์์ ์ ์ต์ํํ๋ ค๋ฉด ์ด๋ป๊ฒ ์ค๊ณํ๋ ๊ฒ ์ข์์ง ๊ถ๊ธํฉ๋๋ค.
์์ต ๊ณ์ฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์๋ ์์ ๊ฒ ๊ฐ๊ณ ๊ณ์ฐ์ ๋ณ๋๋ก ์์ต์ ๊ณ์ฐํ๋ ์ญํ ์ํ๋ ๊ฐ์ฒด๋ฅผ ๋ ๊ฒ ๊ฐ๊ธฐ๋ํฉ๋๋ค. ๐ค
์ ๋ผ๋ฉด GameResult๋ฅผ Map<Player, MatchResult>์ ์ผ๊ธ์ปฌ๋ ์
์ผ๋ก ๋๊ณ
์ด ์ผ๊ธ ์ปฌ๋ ์
๊ฐ์ฒด์๊ฒ ์์ต์ ๊ณ์ฐํ๋ ์ญํ ์ ์์ํ์ ๊ฒ ๊ฐ์์. ๐ค
There was a problem hiding this comment.
- ๋ฆฌํฉํ ๋ง ๋ฒ์ ๊ด๋ฆฌ
์ด๋ฒ์ ๋ค์ด๋ฐ ๋ณ๊ฒฝ + ์ฑ ์ ๋ถ๋ฆฌ + ํจ์ํ ์ธํฐํ์ด์ค ๋์ ์ ๋์์ ์งํํ๋ค ๋ณด๋ ๋ณ๊ฒฝ ๋ฒ์๊ฐ ๋์ด์ ธ์ ํ ์ปค๋ฐ์ ๋ง์ ํ์ผ์ด ๋ฐ๋์์ต๋๋ค. ํ๋๋ฅผ ๊ณ ์น๋ฉด ์ฐ์์ ์ผ๋ก ๋ค๋ฅธ ๊ณณ๋ ์์ ํด์ผ ํ์ต๋๋ค.
๋์ด์ผ๋ณด๋ฉด "๋ค์ด๋ฐ ๋จผ์ โ ์ฑ ์ ๋ถ๋ฆฌ โ ์ธํฐํ์ด์ค ๋์ " ์์๋ก ๋๋ด์ผ๋ฉด ์ข์์ ๊ฒ ๊ฐ์๋ฐ, ์ด๋ฐ ์ํฉ์์ ์ปค๋ฐ์ ์ด๋ป๊ฒ ๋๋๋ ๊ฒ ์ข์์ง ์กฐ์ธ ๋ถํ๋๋ฆฝ๋๋ค.
์ปค๋ฐ ๋จ์๋ฅผ ์์์ ์ผ๋ก ๋ณด๋ ํธ์ด๋ผ, ์กฐ๊ธ ์ ๋์ ์ธ ๊ฒ ๊ฐ์์.
๋ฉ์ธ ์์
์ ์ค์ ์ ์ผ๋ก ์ปค๋ฐ๋จ์๋ก ๋ณผ ๊ฒ ๊ฐ๊ณ , ๋ค์ด๋ฐ ๋ณ๊ฒฝ, ๋ฆฌํฉํฐ๋ง ์์
์ ์ผ๋จ ๋ถ๋ฆฌํ๋ ๋ฐฉํฅ์ผ๋ก ์์
ํ๋
๋ฉ์ธ ์์
์์ฒด์ ์ปค๋ฐ๋จ์๊ฐ ์๋ค๋ฉด ๋ค์ด๋ฐ ๋ณ๊ฒฝ, ๋ฆฌํฉํฐ๋ง
์ฌ์ค ์๊ฐํด๋ณด๋ฉด ๋ค์ด๋ฐ ๋ณ๊ฒฝ, ๋ฆฌํฉํฐ๋ง์ ๊ฒฝ์ฐ์๋ ํฌ๊ฒ ๋ณ๊ฒฝ๋๋ ๊ฒ์ด ์๋๋ผ๋ฉด ๋ฉ์ธ์์
๊ณผ ํจ๊ป ์งํํด๋ฒ๋ฆฌ๊ธฐ๋ ํฉ๋๋ค. ๐ค
๋ง์ํ์ ๊ฒ์ฒ๋ผ ์ปค๋ฐ๋จ์๋ฅผ ์ชผ๊ฐฐ์ ๋, ์ ๋ฐฉ์์ด ์๋ฏธ๊ฐ์์ผ๋ ค๋ฉด ๋ฆฌ๋ทฐ์ด๋ ์ปค๋ฐ ๋จ์๋ก ์ฝ๋๋ฅผ ์ดํด๋ณด๋ ๊ฒฝ์ฐ์๋ ์๋ฏธ๊ฐ์์ ๊ฒ ๊ฐ์ผ๋, PR ๋จ์๋ก ๋ณด๋ ๊ฒฝ์ฐ์๋ ์ปค๋ฐ ์์๊ฐ ํฐ ์๋ฏธ๊ฐ์์ ๊ฒ ๊ฐ๋ค์. ๐
์ด์จ๊ฑฐ๋ ์ปค๋ฐ ๋จ์๋ ์๊ฒ ์ ์งํ๋ ๊ฒ์ด ์ฅ์ ์ด ํฌ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์
ํต์ฌ์ ์ปค๋ฐ๋จ์๋ฅผ ์๊ฒ ์ ์งํ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ์๊ฐํด์. ๐
There was a problem hiding this comment.
- ์ด์ ํผ๋๋ฐฑ ๊ด๋ จ
์ ์ฌ์ดํด ํผ๋๋ฐฑ ์ค ๋ฐ์ํ์ง ๋ชปํ ๋ถ๋ถ์ด ์์ ์ ์์ด์, ๋ฆฌ๋ทฐ ํ ํ์ธํ์ฌ ๋ฐ์ํ๊ฒ ์ต๋๋ค.
์ถ๊ฐ๋ก ์ฌ์ดํด 1์์ Suit, Rank ๊ด๋ จ ์ฝ๋ฉํธ์ ์๋น์ค ๋ ์ด์ด ๊ด๋ จ ์ง๋ฌธ์ ๋ํด ์์ง ๋ต๋ณ์ ๋ฐ์ง ๋ชปํด์ ํ์ธ ๋ถํ๋๋ฆฝ๋๋ค.
DM์ผ๋ก ์ด์ ํผ๋๋ฐฑ์ด ์ด๋๋ถ๋ถ์ ๋ง์ํ์ ๊ฑด์ง ๋ฌธ์๋๋ ธ์๋๋ฐ์..!
์๋ง๋ ์๋ 2๊ฐ ์ฝ๋ฉํธ์ ๋ํด์ ๋ต๋ณ์ ์๋๋ฆฐ ๊ฒ ๊ฐ์์.
- 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์ ๋จผ์ ๋ ์ฌ๋ ธ๋ ๊ฒ ๊ฐ์์. ๐ค
์๋น์ค๋ฅผ โํ๋ฆ ์ ์ด ๋ ์ด์ดโ๋ก ๋ณด๊ณ , BlackjackGame์ ์ํ์ ๊ท์น์ ํจ๊ป ๊ฐ์ง๋ฏ๋ก ๋๋ฉ์ธ์ผ๋ก ํ๋จํ๋ค๋ ์ค๋ช ์ ์ถฉ๋ถํ ๋ฉ๋๋๊ณ ๋ ํ์ฌ ๊ตฌ์กฐ์์ ์๋น์ค๊ฐ ๋จ์ ํจ์ค์ค๋ฃจ๊ฐ ๋ ์ ์์ผ๋ ๋์ง ์๊ฒ ๋ค๋ ํ๋จ๋ ํฉ๋ฆฌ์ ์ด๋ผ ์๊ฐํด์.
๋ค๋ง ์๋น์ค/๋๋ฉ์ธ ๊ตฌ๋ถ ๊ธฐ์ค์ ๋จ์ํ ์ํ ์ ๋ฌด๋ณด๋ค ์ ์ค์ผ์ด์ค ์กฐ์จ์ธ์ง, ๋๋ฉ์ธ ์์ฒด ํํ์ธ์ง๋ก ๊ฐ์ ธ๊ฐ๋ฉด ๋ ๋จ๋จํ ์ค๋ช
์ด ๋ ๊ฒ ๊ฐ๊ณ , ๊ทธ๋ฐ ์๋ฏธ์์ BlackjackGame์ ๋๋ฉ์ธ ์ชฝ์ ๋ ๊ฐ๊น์ ๋ณด์
๋๋ค. ํจํค์ง ์์น๋ ๊ทธ ์๋์ ๋ง๊ฒ ์ ๋ฆฌ๋๋๊ฒ ์ข๋ค๊ณ ์๊ฐํ์ด์. ๐ (์์ ํด์ฃผ์ ๊ฒ๋ ํ์ธํ์ต๋๋ค. ๐)
- matchResults(), getDealerFinalResult() ์ญ์ - gameResults() โ calculatePlayerProfits()๋ก ๋ณ๊ฒฝ - getDealerProfit() โ calculateDealerProfit()๋ก ๋ณ๊ฒฝ
- CARDS -> ALL_CARD ์์
- Dealer์ openFirstCard() ์ถ๊ฐ - DTO์์ ์ง์ ์นด๋๋ฅผ ๊บผ๋ด๋ ๋ก์ง ์ ๊ฑฐ - "์ฒซ ํจ๋ง ๊ณต๊ฐ"๋ ๋๋ฉ์ธ ๊ท์น์ด๋ฏ๋ก Dealer๊ฐ ์ฑ ์
- ๋ธ๋์ญ ํ๋จ์ด 21๋ก๋ง ๋์๋๋ฐ, ์นด๋ ์๋ ํ์ธํ๋ ๋ก์ง ์ถ๊ฐ
์ฒดํฌ ๋ฆฌ์คํธ
test๋ฅผ ์คํํ์ ๋, ๋ชจ๋ ํ ์คํธ๊ฐ ์ ์์ ์ผ๋ก ํต๊ณผํ๋์?1. ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ํ์ฉํ ์ปจํธ๋กค๋ฌ-๋๋ฉ์ธ ๋ถ๋ฆฌ
๊ธฐ์กด์๋ ์ปจํธ๋กค๋ฌ๊ฐ ์ธ๋ฑ์ค๋ก Players๋ฅผ ์ง์ ์ํํ๋ฉฐ ์กฐ์ํ๊ณ ์์์ต๋๋ค.
์ด๋ฅผ
HitDecision,TurnDisplay,BetDecision๊ฐ์ ํจ์ํ ์ธํฐํ์ด์ค๋ก ๋ฐ๊ฟ์ํด ์ํ์ ๊ฒ์ ๋ก์ง์ Game ๋ด๋ถ๋ก ์ด๋์์ผฐ์ต๋๋ค.
์ด ๋ฐฉํฅ์ด ๋ง๋์ง, ์คํ๋ ค ์ธํฐํ์ด์ค๊ฐ ๋์ด๋๋ฉด์ ๋ณต์กํด์ง ๊ฑด ์๋์ง ํผ๋๋ฐฑ ๋ถํ๋๋ฆฝ๋๋ค.
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 ๊ด๋ จ ์ฝ๋ฉํธ์ ์๋น์ค ๋ ์ด์ด ๊ด๋ จ ์ง๋ฌธ์ ๋ํด ์์ง ๋ต๋ณ์ ๋ฐ์ง ๋ชปํด์ ํ์ธ ๋ถํ๋๋ฆฝ๋๋ค.