[๐ ์ฌ์ดํด2 - ๋ฏธ์ (๋ธ๋์ญ ๊ฒ์ ์คํ)] ์ํฐ ๋ฏธ์ ์ ์ถํฉ๋๋ค.#1113
[๐ ์ฌ์ดํด2 - ๋ฏธ์
(๋ธ๋์ญ ๊ฒ์ ์คํ)] ์ํฐ ๋ฏธ์
์ ์ถํฉ๋๋ค.#1113ParkJiYeoung8297 wants to merge 93 commits intowoowacourse:parkjiyeoung8297from
Conversation
jurlring
left a comment
There was a problem hiding this comment.
์ํฐ ์๋
ํ์ธ์ ๐ฐ
์ง๋ฌธ ์ฃผ์ ๋ถ๋ถ์ ๋ํ ์๊ฐ๋ค๊ณผ ์ฝ๋ฉํธ ๋ช๊ฐ์ง ๋จ๊ฒจ๋์์ด์.
์๊ฐ ๊ด์ฐฎ์ผ์ค ๋ ํ์ธํด์ฃผ์ธ์~!
์ฆ๊ฑฐ์ด ์ฃผ๋ง ๋์ธ์~~
src/main/java/domain/Player.java
Outdated
| public void betMoney(int money) { | ||
| bettingScore = money; |
There was a problem hiding this comment.
ํ๋ ์ด์ด ์์ฑ ์์ ์ bettingScore๋ฅผ ์ด๊ธฐํ ํ๋ ๋ฐฉ๋ฒ์ ์์๊น์? ๊ทธ๋ผ ์ฅ์ ์ ์ด๋ค๊ฒ ์์๊น์?
There was a problem hiding this comment.
ํ์ฌ bettingScore๋ ์์ฑ ์์ ์ 0์ผ๋ก ์ด๊ธฐํํ๊ณ ์์ต๋๋ค. ๐
ํ๋ ์ด์ด ์์ฑ ์์ ์ bettingScore๋ฅผ ์ด๊ธฐํ ํ๋ ๋ฐฉ๋ฒ์ ์์๊น์? ๊ทธ๋ผ ์ฅ์ ์ ์ด๋ค๊ฒ ์์๊น์?
์์ฑํ ๋, ์ด๊ธฐํ๋ฅผ ํด์ค๋ค๋ฉด ๊ฐ์ฒด๊ฐ ํ์ํ ๊ฐ์ ๊ฐ์ง๊ณ ์๊ฒ ๋์ด ๊ฐ์ฒด ์์ ์ฑ์ด ๋์์ง ๊ฒ ๊ฐ์ต๋๋ค!
๋ค๋ง ํ์ฌ ์
๋ ฅ ๋ฐ๋ ๊ตฌ์กฐ์์๋ controller์์ List<String> names๋ฅผ ๋๋ ค์ betting score๋ฅผ ๋ฐ๊ณ ,
Map์ผ๋ก {์ด๋ฆ : betting score}๋ฅผ ์ ์ฅํด์ ๋๋ฉ์ธ ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ์ค์ผ ํ๊ธฐ ๋๋ฌธ์,
๋จผ์ Player๋ฅผ ์์ฑํ๊ณ , ์ดํ betScore๋ก ์ธํ
ํด์ฃผ๋ ๋ฐฉ์์ ์๊ฐํ์ต๋๋ค.
There was a problem hiding this comment.
betting score๋ ํ๋ ์ด์ดํํ
์ค์ํ ๊ฐ์ธ๋ฐ, betMoney๋ก ์ธ๋ถ์ ์์ ์ด ๊ฐ๋ฅํ ๋ฉ์ธ์ง๋ฅผ ๋
ธ์ถํ๊ณ ์๋ค๊ณ ์๊ฐํ์ด์.
controller์์ List names๋ฅผ ๋๋ ค์ betting score๋ฅผ ๋ฐ์ผ๋ฉด ์ด๋ค ๋ฌธ์ ๊ฐ ์์ด์?
There was a problem hiding this comment.
์ List<String> name์ for๋ฌธ ๋์์ ๋ฐฐํ
๊ธ์ก์ ์
๋ ฅ ๋ฐ๊ณ , Map์ผ๋ก ๋๊ฒจ์ค์ผํ๋ค๊ณ ์๊ฐํ๋๋ฐ,
createPlayer๋ฅผ ๋ง๋ค์ด์ ๋ฐฐํ
๊ธ์ก ์
๋ ฅ๋ฐ์ ๋๋ง๋ค Player๋ฅผ ์์ฑํด์ค๋ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
(createPlayers()์์ Player๋ ์์ฑํ๊ณ , Players๋ ์์ฑํ๋ ๋ ๊ฐ์ง ์ฑ
์์ ๊ฐ์ง๊ณ ์์๋ค์..๐
)
Player์์ Betting ํ๋๋ฅผ final๋ก ๋๊ณ ์์ฑํ ๋น์์ ๊ฐ์ ๋ฃ์ด์ฃผ๋ ๋ฐฉ์์ผ๋ก ์์ ํ์ต๋๋ค!
๋ฐฐํ
๊ธ์ก ๊ด๋ จํด์ ์์ ํ ์ ์๋๋ก ํ๊ณ , Betting ๋๋ฉ์ธ ๋ด๋ถ์์ ์ต์ข
์์ต์ ๊ณ์ฐํ๋ ์ฑ
์์ ๋ถ์ฌํ์ต๋๋ค.
public class Player {
private final Cards cards;
private final String name;
private final Betting betting;
public Player(String name, Betting betting) {
this.name = name;
this.betting = betting;
this.cards = new Cards();
}| 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; | ||
| } |
There was a problem hiding this comment.
ํ๋ ์ด์ด๊ฐ ๋๋ฌด ๊ณผ๋ํ ์ฑ
์์ ๊ฐ์ง๊ฒ ์๋๊น์~?
๋จ์ผ์ฑ
์์์น์ ์งํค๊ณ ์์ง ์์๋ณด์ฌ์.
There was a problem hiding this comment.
๋ฉ์๋๋ฅผ ์ด์ฉํด์ ๋ถ๋ฆฌํด, ํ๋์ ์ฑ ์์ ์ง๋๋ก ์์ ํ์ต๋๋ค.
ํ๋จ ๋ก์ง๋ง ๋จ๊ฒจ๋๊ณ ๋ ๊ณ์ฐํ๋ ๋ฉ์๋๋ฅผ ๋ถ๋ฆฌํ๋๋ฐ,
์ด์ ๊ฐ์ด ์์ ํ๋ฉด ์ฑ
์ ๋ถ๋ฆฌ๊ฐ ๋์๋ค๊ณ ํ ์ ์์๊น์? (์น๋ถ ํ๋จ ์ฑ
์, ๋ ๊ณ์ฐ ์ฑ
์)
public void calculateMoney(MatchCase matchCase, boolean isDealerBlackjack) {
if (cards.isBlackjack() && !isDealerBlackjack) {
gainMoney();
return;
}
if (matchCase.equals(MatchCase.LOSE)) {
loseMoney();
return;
}
if (matchCase.equals(MatchCase.WIN)) {
return;
}
resetMoneyZero();
}
private void resetMoneyZero() {
bettingScore = 0;
}
private void gainMoney() {
bettingScore = (int) ((int) bettingScore * Game.BLACKJACK_BONUS);
}
private void loseMoney() {
int minusScore = bettingScore * 2;
bettingScore -= minusScore;
}There was a problem hiding this comment.
๋ฉ์๋๋ฅผ ๋ถ๋ฆฌํ ๊ฒ๊ณผ ์ฑ
์์ด ๋ถ๋ฆฌ๋์๋ค๋ ๋ค๋ฅธ ๊ฒ ๊ฐ์์!
๋ง์์ฃผ์ ๋๋ก๋ผ๋ฉด ์น๋ถ ํ๋จ ์ฑ
์์ ํ๋ ์ด์ด๊ฐ ๊ฐ์ง๋๋ฐ, ๊ธฐ์กด์๋ ํ๋ ์ด์ด๊ฐ ๊ฐ์ง ์ฑ
์์ด ์์ง์..! ํ๋ ์ด์ด๊ฐ ์นด๋๋ ๋ค๊ณ ์๊ณ , ๋ฒ ํ
๊ธ์ก๋ ๋ค๊ณ ์๊ณ , ์นํจ๋ ํ๋จํ๋๋ฐ ๋จ์ผ ์ฑ
์์์น์ ์ง์ผฐ๋ค๊ณ ๋ณผ ์ ์์๊น์?!
์นด๋๋ฅผ ๊ฐ์ง ์ฐธ๊ฐ์์ ๋ฒ ํ
์ ํ๋ ์ฐธ๊ฐ์๋ฅผ ๋๋๋ฉด ์ด๋์?
There was a problem hiding this comment.
๋จ์ผ ์ฑ
์ ์์น์ ๋ฉ์๋ ๋จ์์์๋ง ์ ๊ฒฝ์ผ๋๋ฐ, ๋๋ฉ์ธ ๋จ์์์๋ ๊ณ ๋ คํด์ผ๊ฒ ๋ค์. ๐
Dealer, Betting ๋๋ฉ์ธ์ ์ถ๊ฐ๋ก ์์ฑํด์ ์ฑ
์์ ๋ถ๋ฆฌํด๋ดค์ต๋๋ค!
์นด๋๋ง ๊ฐ์ง ์ฐธ๊ฐ์ : Dealer
๋ฒ ํ
ํ๋ ์ฐธ๊ฐ์ : Player
๋ฒ ํ
๊ธ์ก ๊ณ์ฐ : Betting
There was a problem hiding this comment.
๋จ์ผ ์ฑ
์ ์์น์ ๋ก๋ฒํธ ๋งํด(Robert C. Martin)์ด ์ ์ํ SOLID ์์น์ค์ ํ๋๋ก ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๋ฐ ์ค๊ณ์์ ์ ์ง๋ณด์๊ฐ ์ฝ๊ณ , ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ, ๊ฒฌ๊ณ ํ ์ฝ๋๋ฅผ ๋ง๋ค๊ธฐ ์ํ 5๊ฐ์ง ํต์ฌ ์์น์ค ํ๋์ธ๋ฐ์!
๊ทธ๋ ๋ค๋ณด๋ ๋ฉ์๋ ๋จ์๊ฐ ์๋๋ผ ๊ฐ์ฒด ๋จ์๋ก ์ง์ผ์ผํฉ๋๋ค.
์ง๊ธ ๋๋ ์ฃผ์ ๊ฑด Betting์ ์์๊ฐ์ ํฌ์ฅํด์ฃผ์ ๊ฒ ๊ฐ๊ณ , ์์ง ํ๋ ์ด์ด๊ฐ ์นด๋๋ ๋ค๊ณ ์๊ณ , ๋ฒ ํ
๊ธ์ก์ ๊ณ์ฐํ๊ณ , ์นํจ๋ ํ๋จํ๊ณ ์๋ ๊ฒ์ผ๋ก ๋ณด์ด๋๋ฐ์.
์นํจ๋ฅผ MatchCase๊ฐ ํ๋จํ๋ฉด ์๋๋์?
๋ฒ ํ
๊ธ์ก์ ๊ณ์ฐ์ ๊ผญ ํ๋ ์ด์ด๊ฐ ํด์ผํ ๊น์?
๋จ์ผ ์ฑ ์ ์์น์ ์ ์ฉํ๊ธฐ ์ ์ ๋จ์ผ ์ฑ ์ ์์น์ด ๋ญ์ง ๋จ์ผ ์ฑ ์ ์์น์ ์งํค๋ฉด ์ด๋ค ์ฅ์ ์ด ์์์ง ๊ณ ๋ฏผํด๋ณด์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค! :)
| import domain.dto.MatchResultDto; | ||
| import domain.enums.MatchCase; | ||
|
|
||
| public final class OutputView { |
There was a problem hiding this comment.
Dealer๋ฅผ ํ๋ ์ด์ด๋ก ์์ฑํ๊ฒ ๋ณ๊ฒฝ๋์ด, view๋จ์์ ๋๋ฉ์ธ ์ ์ฑ ์ ๋ํ ๊ตฌํ์ด ๋ค์ด๊ฐ๋ ๊ฒ ๊ฐ์์ ๐ฟ
There was a problem hiding this comment.
์ต๋ํ ๋๋ฉ์ธ ๊ท์น ์์ด dto ๊ฐ๋ง ๊บผ๋ด์์ ์ฌ์ฉํ ์ ์๊ฒ๋ ์๋์ ์ฝ๋๋ฅผ ์์ ํ์ต๋๋ค.
(before: ํ๋ ์ด์ด์ ์ดํฉ์ด ๋๋ฌ ์์ต์ด๋ผ๋ ์ ์ ์, after: dto์์ ๋จ์ํ ๊ฐ์ ๊บผ๋ด์ ์ถ๋ ฅํจ)

๋๋ฉ์ธ ์ ์ฑ
์ ๋ํ ๊ตฌํ์ด view์ ์๋ค๋ ๊ฒ์ด ์ ์ดํด๊ฐ ์๋๋๋ฐ, ์ด๋ฐ ์ ์ ๋ง์ํ์ ๊ฒ ๋ง์๊น์?
ํน์ ์๋๋ผ๋ฉด, ์กฐ๊ธ๋ง ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ค๋ช
ํด์ฃผ์ค ์ ์์๊น์?๐ฅฒ
<์ถ๊ฐ ์ง๋ฌธ>
์ถ๊ฐ๋ก OutputView์์ ๋๋ฉ์ธ์ ์ง์ getํ๋๊ฑด ์ง์ํด์ผํ๋ค๊ณ ๋ณด์ง๋ง,
enum์ ์์์ ์งํฉ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ง์ getํ๋ ๊ฒ์ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํ๋๋ฐ
์ด ๋ถ๋ถ์ ๋ํด์ ์ฃผ๋๋ ์ด๋ป๊ฒ ์๊ฐํ์๋์ง ๊ถ๊ธํฉ๋๋ค!
There was a problem hiding this comment.
๋ค ์์ ํด์ฃผ์ ๋ถ๋ถ์ด ๋ง์ต๋๋ค~! ๋๋ฉ์ธ ์ ์ฑ ์ ๋ํ ๊ตฌํ์ด view์ ์์ผ๋ฉด ๋๋ฉ์ธ ์ ์ฑ ์ด ์์ง๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ view๊ฐ ๋ฐ๋ ๋๋ง๋ค ๊ณ ๋ คํด์ผํ๊ณ , ๋์น๊ฒ๋๋ฉด ์ฅ์ ๋ก ์ด๋ฃจ์ด์ง๊ฒ ์ฃ ๐ฑ ๊ทธ๋ ๋ค๋ฉด MVC๊ตฌ์กฐ๋ก ์ค๊ณํ์ ์๋ฏธ๋ ์๊ตฌ์!
enum์ ์์์ ์งํฉ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ง์ getํ๋ ๊ฒ์ ๊ด์ฐฎ๋ค๋ผ๊ณ ์๊ฐํ์
จ๊ตฐ์~!
์ข์ ์ ๊ทผ์ด์ง๋ง displayCardContent์์ card.getCardRank().getName() + card.getCardShape().getName() ์ด๋ ๊ฒ Card์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ OutputView๊ฐ ์ง์ ์กฐํฉํ๊ณ ์์ด์! ๋ง์ฝ ์นด๋ ํํ ๋ฐฉ์์ด ๋ฐ๋๋ฉด OutputView๋ฅผ ์์ ํด์ผ ํ๋๋ฐ, ์ด๊ฑด View์ ์ฑ
์์ผ๊น์?!
There was a problem hiding this comment.
์ถ๋ ฅ์ ๋ํ ๊ฒ์ View์ ์ฑ ์์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค!๐
์ถ๋ ฅ๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์ฌ์ฉ์์ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ๋น๋ฒํ๊ฒ ๋ฐ๋ ์ ์๋ ๊ฐ์ด๋ผ,
์ด๋ฅผ ์ต๋ํ presentation layer ๋ด์์ ์ํํ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
(์ถ๋ ฅ ์๊ตฌ์ฌํญ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ๋๋ฉ์ธ์ด๋ ์๋น์ค ์ฝ๋๊ฐ ๋ฐ๋๋ ๊ตฌ์กฐ๋ ์ํํ๋ค๊ณ ์๊ฐํ์ต๋๋ค.)
๋ํ ์ถํ ์ ๋ ฅ์ด ๋์ด๋ ๋(์ฝ์ ์ถ๋ ฅ, ํ์ผ ์ถ๋ ฅ), ์๋์ ์์์ ๊ฐ์ด ์ถ๋ ฅ ํ์์ ๊ด๋ จ๋ ๊ฒ์ ๊ฐ๊ฐ์ View์์ ์ํํ๋ ๊ฒ์ด ์ฑ ์ ๋ถ๋ฆฌ์ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
1) ConsoleOutputView :
System.out.printf("%s %s",card.getCardRank().getName(), card.getCardShape().getName());์ถ๋ ฅ : 8 ์คํ์ด๋
2) FileOutputView :
System.out.printf("์นด๋ ๋ญํฌ : %s, ์นด๋ ๋ชจ์ : %s",card.getCardRank().getName(), card.getCardShape().getName());์ถ๋ ฅ : ์นด๋ ๋ญํฌ : ์คํ์ด๋, ์นด๋ ๋ชจ์ : 8
์ค์ ๋ก ์ถ๋ ฅ ํ์์ ๋ง์ถ์ด ์กฐํฉํ๋ ์ฑ ์์ ์ฃผ๋๋ ์ด๋์ ๋์๋์ง ๊ถ๊ธํฉ๋๋ค! ๐๐ปโโ๏ธ
There was a problem hiding this comment.
๋ง์ํด์ฃผ์ ๊ฒ์ฒ๋ผ ์ถ๋ ฅ์ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ์์ฃผ ๋ณ๊ฒฝ๋ ์ ์๋ ๋ถ๋ถ์ด๋ผ๋ฉด, ์ถ๋ ฅ ํ์์ ๋ํ ์ฑ ์์ View์์ ๋ด๋นํ๋๋ก ๋๋ ๋ฐฉํฅ์๋ ๊ณต๊ฐ๊ฐ๋ค์! ๐
๋ค๋ง, ๋๋ฏธํฐ์ ๋ฒ์น ๊ด์ ์์๋ card.getCardRank().getName()์ฒ๋ผ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๋ฒ ํ์ํ๋ ๊ตฌ์กฐ๋ ์ง์ํ๋ ๊ฒ์ด ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด๋ฐ ๊ตฌ์กฐ๋ ๋ด๋ถ ๊ตฌํ์ ๋ํ ์์กด๋๊ฐ ๋์์ ธ์, ์๋ฅผ ๋ค์ด Card ๋ด๋ถ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด (CardRank๊ฐ ์ฌ๋ผ์ง๊ฑฐ๋ ๊ตฌ์กฐ๊ฐ ๋ฐ๋๋ ๋ฑ) ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฝ๋๊ฐ ํจ๊ป ์ํฅ์ ๋ฐ๊ฒ ๋๋ ๋ฌธ์ ๊ฐ ์๊ฒ ์ง์!
๋ํ ๊ฐ์ฒด์๊ฒ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ธฐ๋ณด๋ค๋ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด ์ฌ์ฉํ๋ ๋ฐฉ์์ด ๋์ด, ๊ฐ์ฒด์งํฅ์ ์ธ ์ฑ
์ ๋ถ๋ฆฌ๊ฐ ํ๋ ค์ง ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋์ ๊ฐ๋ฅํ๋ค๋ฉด Card๊ฐ ์ค์ค๋ก ํ์ํ ๊ฐ์ ํํํ ์ ์๋ ๋ฉ์์ง๋ฅผ ์ ๊ณตํด์ฃผ๋ ๋ฐฉํฅ๋ ๊ณ ๋ คํด๋ณผ ์ ์์ ๊ฒ ๊ฐ์์~!
|
์ฃผ๋. ์ฝ๋ ๋ฆฌ๋ทฐ ๊ฐ์ฌํฉ๋๋ค. ์ฌ์ดํด 2์ ์์ ์ฌํญ (260316)
|
jurlring
left a comment
There was a problem hiding this comment.
์ํฐ ์๋
ํ์ธ์!
๋ฌธ์์ ๋ํ ๋ต๋ณ๊ณผ ์ฝ๋ฉํธ ๋ช๊ฐ์ง ๋จ๊ฒจ๋์์ด์ :)
์๊ฐ ๊ด์ฐฎ์ผ์ค ๋ ํ์ธํด์ฃผ์ธ์!
| public List<Card> getCards() { | ||
| return cards; | ||
| } | ||
| } |
There was a problem hiding this comment.
๋ถ๋ณ ์ปฌ๋ ์
์ ๋ํด์ ํ์ตํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์์!
https://tecoble.techcourse.co.kr/post/2021-04-26-defensive-copy-vs-unmodifiable/
src/main/java/domain/Player.java
Outdated
| public void betMoney(int money) { | ||
| bettingScore = money; |
There was a problem hiding this comment.
betting score๋ ํ๋ ์ด์ดํํ
์ค์ํ ๊ฐ์ธ๋ฐ, betMoney๋ก ์ธ๋ถ์ ์์ ์ด ๊ฐ๋ฅํ ๋ฉ์ธ์ง๋ฅผ ๋
ธ์ถํ๊ณ ์๋ค๊ณ ์๊ฐํ์ด์.
controller์์ List names๋ฅผ ๋๋ ค์ betting score๋ฅผ ๋ฐ์ผ๋ฉด ์ด๋ค ๋ฌธ์ ๊ฐ ์์ด์?
| import domain.dto.MatchResultDto; | ||
| import domain.enums.MatchCase; | ||
|
|
||
| public final class OutputView { |
There was a problem hiding this comment.
๋ค ์์ ํด์ฃผ์ ๋ถ๋ถ์ด ๋ง์ต๋๋ค~! ๋๋ฉ์ธ ์ ์ฑ ์ ๋ํ ๊ตฌํ์ด view์ ์์ผ๋ฉด ๋๋ฉ์ธ ์ ์ฑ ์ด ์์ง๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ view๊ฐ ๋ฐ๋ ๋๋ง๋ค ๊ณ ๋ คํด์ผํ๊ณ , ๋์น๊ฒ๋๋ฉด ์ฅ์ ๋ก ์ด๋ฃจ์ด์ง๊ฒ ์ฃ ๐ฑ ๊ทธ๋ ๋ค๋ฉด MVC๊ตฌ์กฐ๋ก ์ค๊ณํ์ ์๋ฏธ๋ ์๊ตฌ์!
enum์ ์์์ ์งํฉ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์ง์ getํ๋ ๊ฒ์ ๊ด์ฐฎ๋ค๋ผ๊ณ ์๊ฐํ์
จ๊ตฐ์~!
์ข์ ์ ๊ทผ์ด์ง๋ง displayCardContent์์ card.getCardRank().getName() + card.getCardShape().getName() ์ด๋ ๊ฒ Card์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ OutputView๊ฐ ์ง์ ์กฐํฉํ๊ณ ์์ด์! ๋ง์ฝ ์นด๋ ํํ ๋ฐฉ์์ด ๋ฐ๋๋ฉด OutputView๋ฅผ ์์ ํด์ผ ํ๋๋ฐ, ์ด๊ฑด View์ ์ฑ
์์ผ๊น์?!
| 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; | ||
| } |
There was a problem hiding this comment.
๋ฉ์๋๋ฅผ ๋ถ๋ฆฌํ ๊ฒ๊ณผ ์ฑ
์์ด ๋ถ๋ฆฌ๋์๋ค๋ ๋ค๋ฅธ ๊ฒ ๊ฐ์์!
๋ง์์ฃผ์ ๋๋ก๋ผ๋ฉด ์น๋ถ ํ๋จ ์ฑ
์์ ํ๋ ์ด์ด๊ฐ ๊ฐ์ง๋๋ฐ, ๊ธฐ์กด์๋ ํ๋ ์ด์ด๊ฐ ๊ฐ์ง ์ฑ
์์ด ์์ง์..! ํ๋ ์ด์ด๊ฐ ์นด๋๋ ๋ค๊ณ ์๊ณ , ๋ฒ ํ
๊ธ์ก๋ ๋ค๊ณ ์๊ณ , ์นํจ๋ ํ๋จํ๋๋ฐ ๋จ์ผ ์ฑ
์์์น์ ์ง์ผฐ๋ค๊ณ ๋ณผ ์ ์์๊น์?!
์นด๋๋ฅผ ๊ฐ์ง ์ฐธ๊ฐ์์ ๋ฒ ํ
์ ํ๋ ์ฐธ๊ฐ์๋ฅผ ๋๋๋ฉด ์ด๋์?
- ์์ฐ๋ ํ๋ผ๋ฏธํฐ ์ ๊ฑฐ
- Player ์์ฑ ์ bettingScore ์ด๊ธฐํ
์ฌ์ดํด 2์ ์์ ์ฌํญ2 (260318)
Player์ ์ฑ
์์ ์ค์ด๊ธฐ ์ํด Betting๊ณผ Dealer ๋๋ฉ์ธ์ ์์ฑํ์ต๋๋ค. |
jurlring
left a comment
There was a problem hiding this comment.
์ํฐ ์๋
ํ์ธ์!
์ฝ๋ฉํธ ๋ช๊ฐ์ง ๋จ๊ฒผ๋๋ฐ ์๊ฐ ๊ด์ฐฎ์ผ์ค ๋ ํ์ธ๋ถํ๋๋ ค์ :)
| cards.addCard(card); | ||
| } | ||
|
|
||
| public void addInitializedCard(Deck deck) { |
There was a problem hiding this comment.
๋๋ฌ์ ํ๋ ์ด์ด์ ํ์๋ค์ด ๋๋ฌด ๋ง์ด ์ค๋ณต๋๋ ๊ฒ ๊ฐ์์! ์ค๋ณต ์ฝ๋๋ฅผ ์์ ๋๊ฑด ์ด๋จ๊น์?
| return cards.getFinalScore() > Game.BLACKJACK_VALUE; | ||
| } | ||
|
|
||
| public boolean isDealerBlackjack() { |
There was a problem hiding this comment.
๋๋ฌ ๊ฐ์ฒด๊ฐ isDealerBlackjack์ด๋ผ๋ ํ์๋ฅผ ํ๋๊ฑด ์ค๋ณต์ผ ์ ์์ ๊ฒ ๊ฐ์์!
dealer.isDealerBlackjack ๋๋ฌ๊ฐ ๋๋ฒ ๋ค์ด๊ฐ๋๋ฐ ํ์ํ ๊น์?!
| 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; | ||
| } |
There was a problem hiding this comment.
๋จ์ผ ์ฑ
์ ์์น์ ๋ก๋ฒํธ ๋งํด(Robert C. Martin)์ด ์ ์ํ SOLID ์์น์ค์ ํ๋๋ก ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๋ฐ ์ค๊ณ์์ ์ ์ง๋ณด์๊ฐ ์ฝ๊ณ , ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ, ๊ฒฌ๊ณ ํ ์ฝ๋๋ฅผ ๋ง๋ค๊ธฐ ์ํ 5๊ฐ์ง ํต์ฌ ์์น์ค ํ๋์ธ๋ฐ์!
๊ทธ๋ ๋ค๋ณด๋ ๋ฉ์๋ ๋จ์๊ฐ ์๋๋ผ ๊ฐ์ฒด ๋จ์๋ก ์ง์ผ์ผํฉ๋๋ค.
์ง๊ธ ๋๋ ์ฃผ์ ๊ฑด Betting์ ์์๊ฐ์ ํฌ์ฅํด์ฃผ์ ๊ฒ ๊ฐ๊ณ , ์์ง ํ๋ ์ด์ด๊ฐ ์นด๋๋ ๋ค๊ณ ์๊ณ , ๋ฒ ํ
๊ธ์ก์ ๊ณ์ฐํ๊ณ , ์นํจ๋ ํ๋จํ๊ณ ์๋ ๊ฒ์ผ๋ก ๋ณด์ด๋๋ฐ์.
์นํจ๋ฅผ MatchCase๊ฐ ํ๋จํ๋ฉด ์๋๋์?
๋ฒ ํ
๊ธ์ก์ ๊ณ์ฐ์ ๊ผญ ํ๋ ์ด์ด๊ฐ ํด์ผํ ๊น์?
๋จ์ผ ์ฑ ์ ์์น์ ์ ์ฉํ๊ธฐ ์ ์ ๋จ์ผ ์ฑ ์ ์์น์ด ๋ญ์ง ๋จ์ผ ์ฑ ์ ์์น์ ์งํค๋ฉด ์ด๋ค ์ฅ์ ์ด ์์์ง ๊ณ ๋ฏผํด๋ณด์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค! :)
| import domain.dto.MatchResultDto; | ||
| import domain.enums.MatchCase; | ||
|
|
||
| public final class OutputView { |
There was a problem hiding this comment.
๋ง์ํด์ฃผ์ ๊ฒ์ฒ๋ผ ์ถ๋ ฅ์ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ์์ฃผ ๋ณ๊ฒฝ๋ ์ ์๋ ๋ถ๋ถ์ด๋ผ๋ฉด, ์ถ๋ ฅ ํ์์ ๋ํ ์ฑ ์์ View์์ ๋ด๋นํ๋๋ก ๋๋ ๋ฐฉํฅ์๋ ๊ณต๊ฐ๊ฐ๋ค์! ๐
๋ค๋ง, ๋๋ฏธํฐ์ ๋ฒ์น ๊ด์ ์์๋ card.getCardRank().getName()์ฒ๋ผ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๋ฒ ํ์ํ๋ ๊ตฌ์กฐ๋ ์ง์ํ๋ ๊ฒ์ด ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด๋ฐ ๊ตฌ์กฐ๋ ๋ด๋ถ ๊ตฌํ์ ๋ํ ์์กด๋๊ฐ ๋์์ ธ์, ์๋ฅผ ๋ค์ด Card ๋ด๋ถ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด (CardRank๊ฐ ์ฌ๋ผ์ง๊ฑฐ๋ ๊ตฌ์กฐ๊ฐ ๋ฐ๋๋ ๋ฑ) ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฝ๋๊ฐ ํจ๊ป ์ํฅ์ ๋ฐ๊ฒ ๋๋ ๋ฌธ์ ๊ฐ ์๊ฒ ์ง์!
๋ํ ๊ฐ์ฒด์๊ฒ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ธฐ๋ณด๋ค๋ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด ์ฌ์ฉํ๋ ๋ฐฉ์์ด ๋์ด, ๊ฐ์ฒด์งํฅ์ ์ธ ์ฑ
์ ๋ถ๋ฆฌ๊ฐ ํ๋ ค์ง ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋์ ๊ฐ๋ฅํ๋ค๋ฉด Card๊ฐ ์ค์ค๋ก ํ์ํ ๊ฐ์ ํํํ ์ ์๋ ๋ฉ์์ง๋ฅผ ์ ๊ณตํด์ฃผ๋ ๋ฐฉํฅ๋ ๊ณ ๋ คํด๋ณผ ์ ์์ ๊ฒ ๊ฐ์์~!
์ฌ์ดํด 2
๊ธฐ๋ฅ
์ฌ์ดํด1 ํผ๋๋ฐฑ ๋ฐ์
์ด๋ฒ ์์ ๊ณผ์ ์์ ์ ์ฒด ์นด๋๋ Deck์ด๋ผ๋ ๋๋ฉ์ธ์ ์ถ๊ฐํ๊ณ , Cards๋ Player๊ฐ ๋ค๊ณ ์๋ ์นด๋ ๋ญ์น๋ก ์ฌ์ฉํ์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ณ ์ Player์ ๊ฒน์น๋ ํ๋์ Player์์ ์ฒ๋ฆฌํ๊ณ , ๋๋ฌ์ ๊ท์น์ ๊ณง ๊ฒ์์ ๊ท์น์ด๊ธฐ์ Game์์ ์ฒ๋ฆฌํ๋๋ก ๋ณ๊ฒฝํ์ต๋๋ค.
To ๋ฆฌ๋ทฐ์ด
1.Dealer - Player
๋๋ฌ์ ํ๋(ex. ์์ ์ด ๊ฐ์ง ์นด๋์ ํฉ ๊ตฌํ๊ธฐ)์ Player์ ์ค๋ณต์ด๊ณ ,
๋๋ฌ์ ๊ท์น(ex. 16์ดํ์ด๋ฉด ์นด๋๋ฅผ ์ถ๊ฐ๋ก ๋ฐ๋๋ค.)์ ๊ฒ์์ ๊ท์น์ด๊ธฐ์ Game์์ ์ฒ๋ฆฌํ ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
๊ฐ์ฒด์์์ ์ฑ ์์ ํ์ค์ธ๊ณ์ ์ฐจ์ด๊ฐ ์์ด์, ๊ผญ ๋๋ฌ๊ฐ ํ๋ ํ๋์ด๋ผ๊ณ Dealer์ ์์ด์ผํ๋ ๊ฒ์ด ์๋๋ผ ์์ง๋๋ฅผ ๊ณ ๋ คํด ๋ค๋ฅธ ๊ณณ์ ์์นํ ์ ์๋ค๊ณ ์๊ฐํ๋๋ฐ, ์ด๋ฐ ๊ตฌ์กฐ๋ก ๊ตฌํํ๋ ๊ฒ์ ๋ํด ํผ๋๋ฐฑ ๋ฐ๊ณ ์ถ์ต๋๋ค.
(์ด๋ฐ ๊ตฌ์กฐ โ ์ฝ๋ ์ค๋ณต์ ์ค์ด๊ธฐ ์ํด Dealer ๊ฐ์ฒด๋ฅผ ์์ ๊ณ , ๊ด๋ จ ํ๋๊ณผ ๊ท์น์ ์ ์ ํ ํด๋์ค์ ๋๋ค)
Domain
์ง๊ธ ๋ณ๊ฒฝํ ๋๋ฉ์ธ ๊ตฌ์กฐ๊ฐ ์ ์ง์ฌ์ง ๊ฒ์ธ์ง ํผ๋๋ฐฑ ๋ฐ๊ณ ์ถ์ต๋๋ค. ์ด์ฐ๋ณด๋ฉด Game์ด aggregate root์ ๊ฐ๋ค๊ณ ๋ณด์ด๋๋ฐ, ์ด๋ฐ ๊ตฌ์กฐ๊ฐ ์ ์ ํ ๊น์?
ํ ์คํธ ์์
๋๋ฉ์ธ์ด ๋๊ฑฐ ์์ ๋๋, ํ ์คํธ ์ฝ๋๋ ๋ค์ ์์ ํด์ผํ๋ ์ํฉ์ด ๋ฐ์ํ์ต๋๋ค.
๋ณธ ์ฝ๋๋ ํ ์คํธ ์ฝ๋์ ์์กด์ฑ์ด ํฐ๊ฑฐ ๊ฐ์๋ฐ, ํ ์คํธ ์ฝ๋๊ฐ ๋ณ๊ฒฝ์ ์ ์ฐํ๊ฒ๋ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด ์์๊น์?
์ฝ๋ ์์
์ด๋ฏธ ์ฌ์ฉ์ค์ธ ์๋น์ค์์๋ ์ด์ ๊ฐ์ด ๋๋ฉ์ธ์ ๋๊ฑฐ ์์ ํ๋ ๊ณผ์ ์ด ์ด๋ ค์ธ๊ฑฐ ๊ฐ์๋ฐ, ๋๊ฑฐ ์์ ์ด ํ์ํ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํด์ผํ๋์ง ๊ถ๊ธํฉ๋๋ค.
(ํ๋๋ฅผ ๊ณ ์น๋ฉด ์ฌ๋ฌ๊ฐ๊ฐ ์๋ฌ๋๋ ์ํฉ์ด๋ค ๋ณด๋, ์ ๋ ์ ๋ถ ์ฃผ์ํด๋๊ณ ์ฒ์๋ถํฐ ํ๋์ฉ ์ฃผ์์ ํด์ ํ๊ณ ๋ฌธ์ ํด๊ฒฐํ๋ ๋ฐฉ์์ผ๋ก ๋ฆฌํฉํ ๋งํ์ต๋๋ค.)
*ํผ๋๋ฐฑ์ ๋ฐ์ํ๋ ๊ณผ์ ์์ ๋๋ฉ์ธ ์ฌ๊ตฌ์ฑ์ด ํ์ํ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๊ทธ๋์ ๋ฆฌํฉํ ๋ง ๊ณผ์ ์์ ๋ง์ ํ์ผ์ด ๋ฐ๋์์ต๋๋ค.๐ฅฒ
*๊น์ ์ ๋๋ก ๋ชป ๋ง์ ธ์, ์ฌ์ดํด 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 ๋ฑ ์ฌ๋ฌ ๋๋ฉ์ธ์ ๊ฑธ์ณ์ ์กด์ฌํ๋ ๊ฒ์ด ๋ถํธํ๋ค.
ํ ์คํธ ๊ตฌํ์ ํตํด ๋๋ฉ์ธ์ ์ฑ ์ ๋ถ๋ฆฌ์ ๋ํ ์ฌ๊ตฌ์ฑ ํ์ ์ ํธ๋ฅผ ํฌ์ฐฉํ ์ ์์ด์ ์ค๊ณ์ ๋์์ด ๋์๋ค.
์ฒดํฌ ๋ฆฌ์คํธ
test๋ฅผ ์คํํ์ ๋, ๋ชจ๋ ํ ์คํธ๊ฐ ์ ์์ ์ผ๋ก ํต๊ณผํ๋์?์ฌ์ดํด 2์ ์์ ์ฌํญ (260316)
์ฌ์ดํด 2์ ์์ ์ฌํญ2 (260318)
Player์ ์ฑ ์์ ์ค์ด๊ธฐ ์ํด Betting๊ณผ Dealer ๋๋ฉ์ธ์ ์์ฑํ์ต๋๋ค.
๋ ๊ณ์ฐ์ ๋ํ ์ฑ ์์ Betting์๊ฒ, ๋๋ฌ์ ๋ํ ์ฑ ์์ Dealer์๊ฒ ๋ถ์ฌํด, ์ฑ ์์ ๋ถ๋ฆฌํ์ต๋๋ค.