๐ ์ฌ์ดํด1 - ๋ฏธ์ (๋ธ๋์ญ ๊ฒ์ ์คํ) ์์ด์ ๋ฆฌ ๋ฏธ์ ์ ์ถํฉ๋๋ค.#999
๐ ์ฌ์ดํด1 - ๋ฏธ์
(๋ธ๋์ญ ๊ฒ์ ์คํ) ์์ด์ ๋ฆฌ ๋ฏธ์
์ ์ถํฉ๋๋ค.#999yj9107v wants to merge 82 commits intowoowacourse:yj9107vfrom
Conversation
InputParser ํด๋์ค ์ถ๊ฐ
๊ตฌ๋ถ์(',') ๊ธฐ์ค ์
๋ ฅ ๊ฐ ๋ถ๋ฆฌ ๊ธฐ๋ฅ ๊ตฌํ
- ์ฌ์ฉ์ ์ด๋ฆ ์ ๋ ฅ ๊ฐ์ด ๊ณต๋ฐฑ์ธ ๊ฒฝ์ฐ ์์ธ ์ฒ๋ฆฌ ํ ์คํธ
- ์ฌ์ฉ์ ์ด๋ฆ ์ ๋ ฅ ๊ฐ์ด ๊ณต๋ฐฑ์ธ ๊ฒฝ์ฐ ์์ธ ์ฒ๋ฆฌ
- Suit: ์นด๋์ ๋ชจ์์ ์ ์ - Rank: ์นด๋์ ์ซ์๋ฅผ ์ ์
- ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ์์ฑ - ์นด๋์ ์ ๋ณด๋ฅผ ๋ฐํํ๋ ๋ฉ์๋ getName() ์์ฑ
- ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ์์ฑ - ์นด๋ ๋ฑ์ ์์ฑํ๋ ๋ฉ์๋ generateCards() ์์ฑ
- ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ ์์ฑ - ์นด๋๋ฅผ ์ถ๊ฐํ๋ ๋ฉ์๋ addCard() ์์ฑ - player ์ ์ ํฉ๊ณ๋ฅผ ๊ณ์ฐํ๋ ๋ฉ์๋ calculateScore() ์์ฑ
- ํ๋ ์ด์ด ์ ์ ํฉ๊ณ๊ฐ 21์ด๊ณผ ์ ACE ํฌํจํ ๊ฒฝ์ฐ ์ ์ ๋ณด์ ํ ์คํธ
- ํ๋ ์ด์ด ์ ์ ํฉ๊ณ๊ฐ 21์ด๊ณผ ์ ACE ํฌํจํ ๊ฒฝ์ฐ ์ ์ ๋ณด์ ๋ฉ์๋ isBustWithAce()
- 2์ฅ ๋๋ก์ฐ drawInitialHand() ์ถ๊ฐ - 1์ฅ ๋๋ก์ฐ draw() ์ถ๊ฐ
- ์นด๋ ๋ฐฐ๋ถ ๊ธฐ๋ฅ ์ถ๊ฐ
- shuffle() ๋ฉ์๋ ์์ฑ
- ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋ - ์ ์ ๊ณ์ฐ ๋ฉ์๋ calculateScore() - ace ํ์ ์ ์ ์ ๊ณ์ฐ ๋ฉ์๋ calculateRawScore() - ace ๊ด๋ จ ๋ฉ์๋ countAce(), adjustForAce(), isBustWithAce() - ๋๋ฌ ์นด๋ ์ ๋ณด ๋ฐํ ๋ฉ์๋ getDealerInfo(), getDealerInitialInfo()
- name ํ๋ ์ถ๊ฐ - ์ ์ ๊ณ์ฐ ๋ก์ง calculateScore() ์์ - ์ ๋ณด ๋ฐํ ๋ฉ์๋ getPlayerInfo(), getCardsInfo()
- ํ๋ ์ด์ด๋ค์ ์ ๋ณด ๋ฐํ ๋ฉ์๋ getUserNames(), getPlayerInfo()
- ์ฌ์ฉ์๋ค์๊ฒ ์นด๋ ์ถ๊ฐ ์ฌ๋ถ ๊ธฐ๋ฅ ์์ฑ
- ํ๋ ์ด์ด์ ์นด๋๊ฐ 1์ฅ์ด ์ถ๊ฐ๋์ด ์ด 3์ฅ์ด ๋์๋์ง
- list์ size()๋ฅผ ์ง์ ํธ์ถํ์ง ์๊ณ , ํฌ๊ธฐ๋ฅผ ๋น๊ตํ ์ ์๊ฒ ์์
- ์ฝ๋ ์์ฑ ์์น ํด๊ฒฐ (ํ ์คํธ ์ฝ๋๋ Red, Green blue๋ ํ๋ก๋์ ์ฝ๋ - list์ size()๋ฅผ ์ง์ ํธ์ถํ์ง ์๊ณ , ํฌ๊ธฐ๋ฅผ ๋น๊ตํ ์ ์๊ฒ ์์ , isEqualTo() -> hasSize() ์์
- ๋๋ฌ ์นด๋ ์ถ๊ฐ ์กฐ๊ฑด๋ฌธ์ Controller์์ ๋๋ฉ์ธ์ผ๋ก ์ฎ๊น
- ํ๋ ์ด์ด ํฉ๊ณ 21 ์ด๊ณผ ์ฌ๋ถ - ํ๋ ์ด์ ๋ณด์ ํ ์นด๋ ์ข ๋ฅ๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ ์คํธ - ํ๋ ์ด์ด ์ ์๊ฐ 21 ์ด๊ณผ์ธ ๊ฒฝ์ฐ ์ ์ ์ฒ๋ฆฌ ํ ์คํธ
- ์ถ๋ ฅ format์ Controller ๋จ์์ ์ฑ ์์ง๊ฒ ์ฝ๋ ์์
verus-j
left a comment
There was a problem hiding this comment.
์๋
ํ์ธ์ ์์ด์ ๋ฆฌ~
ํ
์คํธ ์ฝ๋ ์ ๋ฆฌ ์์ฃผ ์ํ์
จ๋ค์! ์ด๋ฒ ํผ๋๋ฐฑ์๋ ํ๋ก๋์
์ฝ๋ ์์ฃผ๋ก ๋จ๊ฒจ๋๋ ธ์ต๋๋ค. ํ์ธ๋ถํ๋๋ ค์~
src/main/java/domain/Policy.java
Outdated
| public class Policy { | ||
|
|
||
| public static final int FIRST_DRAW_SIZE = 2; | ||
| public static final int DEALER_HIT_THRESHOLD = 16; | ||
| public static final int BUST_THRESHOLD = 21; | ||
| public static final int ACE_HIGH_LOW_DIFF = 10; | ||
| public static final int BUST_SCORE = 0; | ||
| } |
There was a problem hiding this comment.
์ ์ญ ๋ณ์๋ฅผ ์ง์ ํ์ จ๊ตฐ์. ๊ฐ์ฒด ์งํฅ์ ์ธ ์ฝ๋๋ฅผ ์ํด ๊ฐ ์ ์ญ ๋ณ์๋ฅผ ์ฐ๊ด๋ ๊ฐ์ฒด๋ก ์ฎ๊ฒจ์ ์ ์ญ ๋ณ์๋ฅผ ์ ๊ฑฐํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
There was a problem hiding this comment.
์ ์ญ ๋ณ์๋ฅผ ์ง์ ํ์ จ๊ตฐ์. ๊ฐ์ฒด ์งํฅ์ ์ธ ์ฝ๋๋ฅผ ์ํด ๊ฐ ์ ์ญ ๋ณ์๋ฅผ ์ฐ๊ด๋ ๊ฐ์ฒด๋ก ์ฎ๊ฒจ์ ์ ์ญ ๋ณ์๋ฅผ ์ ๊ฑฐํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
์ฐ๊ด๋ ๊ฐ์ฒด๋ก ์ฎ๊ฒจ ์ ์ญ ๋ณ์๋ฅผ ์ ๊ฑฐํ๋๋ก ์์ ํ์ต๋๋ค.
๋๋ฌ์ ํ๋ ์ด์ด๊ฐ ๋ ๋ค ์ฌ์ฉํ๋ ๋ณ์๊ฐ ์์๋๋ฐ, ์ด์ ์ ๋ง์ํด์ฃผ์ Rule of Three๋ฅผ ๋ ์ฌ๋ ค ์ค๋ณต์ด ๋ ๋ฒ ์ ๋์ธ ๊ฒฝ์ฐ๋ ๋ณ๋๋ก ์ถ์ถํ์ง ์์์ต๋๋ค. ์ด๋ฐ ํ๋จ์ด ๊ด์ฐฎ์์ง ๊ถ๊ธํฉ๋๋ค.
There was a problem hiding this comment.
๋ง์ฝ์ ๋๋ฌ์ ํ๋ ์ด์ด๊ฐ ๋ณ๋๋ก Bust ์กฐ๊ฑด์ด ๋ณ๊ฒฝ๋๋ค๋ฉด ์ง๊ธ์ฒ๋ผ ์ค๋ณต์ ์ ๊ฑฐํ์ง ์๋๊ฒ ์ข๊ฒ ๋ค์. ๋ค๋ฅธ ์ผ์ด์ค๋ก ๋๋ฌ์ ํ๋ ์ด์ด๊ฐ ๊ฐ์ด Bust ์กฐ๊ฑด์ด ๋ณ๊ฒฝ๋๋ค๋ฉด ์ค๋ณต๋ ์ฝ๋๋ก ์ธํด ํจ๊ป ๊น๋จน์ง ์๊ณ ์์ ์ ํด์ผ๊ฒ ๊ตฐ์. ๋ธ๋์ญ ๊ฒ์์ ๊ท์น์ด ์ด๋์ ๋ ์์ ๋ ๊ฒ์์ด ์๋ ๋งค์ฃผ ๊ธฐํ์์ ์ํด ๋ณ๊ฒฝ๋๋ค๋ฉด ์ด๋ ๋ฐฉํฅ์ผ๋ก ์งํ๋ ์ง ์์ธก์ ํ ์ ์์ ๊ฒ ๊ฐ๋ค์.
2๊ฐ์ง ๋ฐฉํฅ์ ๋ณ๊ฒฝ์ ์ ๊ณ ๋ คํ์ ๋ ๋ ๋ฒ ์ ๋์ ์ค๋ณต์ ์ ์งํ๋๊ฒ ์ข์๊น์? ์๋๋ฉด ์ค๋ณต์ ์ ๊ฑฐํ๋๊ฒ ์ข์๊น์? ๊ฐ์ธ์ ์ผ๋ก๋ ์ด์ ๋๋ฉด ํ
์คํธ ์ผ์ด์ค๋ ์ถฉ๋ถํ๊ณ ๊ฐ๋จํ ์ผ์ด์ค๋ ์ค๋ณต์ ์ ์งํ๋ ๊ฒ๋ ์ข์ ๋ฐฉํฅ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ํ์ฌ๋ ์ค๋ณต์ผ๋ก ์ธํ ๊ด๋ฆฌ ๋น์ฉ์ ์ถฉ๋ถํ ๊ฐ๋นํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํด์.
ํ๋จ์ด ๋ช
ํํ ์ ์ค ๊ฒฝ์ฐ์๋ Rule of Three๋ฅผ ๋ ์ฌ๋ฆฌ๋ฉฐ ์ ์ฉํ๋ ๊ฒ๋ ์ข์ง๋ง, ํ๋ฒ์ฉ์ Rule of Three๋ฅผ ์ง์ผ์ผํ๋ ๊ทผ๊ฑฐ๋ฅผ ์๊ฐํด๋ณด๋ ๊ฒ๋ ์ข์ ํ๋ จ์ด ๋ ๊ฒ ๊ฐ์์~
src/test/java/domain/PlayerTest.java
Outdated
| List<String> expect = List.of(Rank.TEN.getName() + Suit.DIAMOND.getName(), | ||
| Rank.FIVE.getName() + Suit.CLOVER.getName()); | ||
| assertThat(player.getCardsInfo()).isEqualTo(expect); |
There was a problem hiding this comment.
๊ฒ์ฆ๋ฌธ์ ์ดํด๋ณด๋ ๋ฌธ์์ด๋ก ๋น๊ตํ๊ณ ์๋ค์. ํด๋น ๋ฌธ์์ด์ ๋ทฐ์ ๊ฐ๊น์ด ์ ๋ณด์ธ ๊ฒ ๊ฐ์๋ฐ, Card ๋ฆฌ์คํธ ํน์ Rank, Suit๋ก ๋น๊ตํ๋ฉด ์ด๋จ๊น์?
There was a problem hiding this comment.
๊ฒ์ฆ๋ฌธ์ ์ดํด๋ณด๋ ๋ฌธ์์ด๋ก ๋น๊ตํ๊ณ ์๋ค์. ํด๋น ๋ฌธ์์ด์ ๋ทฐ์ ๊ฐ๊น์ด ์ ๋ณด์ธ ๊ฒ ๊ฐ์๋ฐ, Card ๋ฆฌ์คํธ ํน์ Rank, Suit๋ก ๋น๊ตํ๋ฉด ์ด๋จ๊น์?
ํ๋ ์ด์ด์ ํ๋ ๊ฐ์ getter๋ก ๊บผ๋ด๋ ๊ฒ์ ์ง์ํ๋ ค๊ณ ํ๋๋ฐ, ๊ทธ ๊ณผ์ ์์ ๋๋ฉ์ธ์ ๋ทฐ์ ์ฐ๊ด๋ ๋ก์ง์ด ๋ค์ด๊ฐ๊ฒ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ทธ๋์ ์ ์์ ๋ฐฉ์์ผ๋ก๋, ๋๋ฉ์ธ๊ณผ ๋ทฐ๊ฐ ์ฐ๊ด๋๋ ๊ฒ๋ณด๋ค๋ getter ์ง์์ ์ผ๋ถ ํฌ๊ธฐํ๋ ํธ๋ ์ด๋์คํ๋ฅผ ์ ํํ๋ ํธ์ด ๋ซ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ํน์ ๋ ๊ฐ์ง๋ฅผ ๋ชจ๋ ํฌ๊ธฐํ์ง ์๋ ๋ฐฉ๋ฒ์ด ์์๊น์?
์ฐ์ ์ getter๋ฅผ ์ฌ์ฉํด Card ๋ฆฌ์คํธ๋ก ๋น๊ตํ๋๋ก ์์ ํ์ต๋๋ค.
There was a problem hiding this comment.
์ด๋ฏธ getter๋ฅผ ํ๋ก๋์ ์ฝ๋(Controller)์์ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ getter๋ฅผ ์ฌ์ฉํด๋ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ง์ฝ์ ํ๋ก๋์ ์ฝ๋์๋ getter๊ฐ ์์ด ํ ์คํธ ์ฝ๋์์๋ง ์ฌ์ฉ๋๋ค๋ฉด ์กฐ๊ธ ๋ฒ๊ฑฐ๋กญ์ง๋ง equals&hashcode๋ฅผ ์ค๋ฒ๋ผ์ด๋ํด์ isEqualTo๋ก ๊ฒ์ฆํ๋ ๊ฒ๋ ๋ฐฉ๋ฒ์ด ๋๊ฒ ๋ค์.
- ๋๋ฉ์ธ๊ณผ ๋ทฐ์ ์ฐ๊ด์ฑ์ ์์ฐ
- ๋๋ฉ์ธ๊ณผ ๋ทฐ์ ์ฐ๊ด์ฑ์ ์์ฐ - ์นด๋์ ํ์ธ์ ์ฌ์ด์ฆ๋ก ํ์ง ์๊ณ Card ๋ฆฌ์คํธ๋ก ํ ์คํธ
- ํ๋ ์ด์ด๋ค์ ์ ์๋ฅผ size๋ก ํ ์คํธํ์ง ์๊ณ , List<Integer>๋ก ๊ฒฐ๊ณผ ๊ฐ ํ ์คํธ ์์
- Policy ์์ํ ์ฎ๊น - count ๋ฐํ ๊ฐ ์ญ์ - ์ ๊ทผ์ง์ ์ public -> private ์์
- ์ถ์ํ ์์ค์ ๋์ด๊ธฐ ์ํด shuffled() ๋ฉ์๋ ์ถ๊ฐ
- Player์ ๋ทฐ์ ์ฐ๊ด๋getCardsInfo() ํธ์ถํ์ง ์๊ณ getCards() ํธ์ถ๋ก ์์
- isBust() private -> public ๋ณ๊ฒฝ - getScoreZeroIfBust() ์ ๊ฑฐ
- ํ๋ ์ด์ด๊ฐ ๋ฒ์คํธ์ธ ๊ฒฝ์ฐ ๋๋ฌ ์ ์์ ์๊ด์์ด ํ๋ ์ด์ด ํจ๋ฐฐ - ๋ทฐ ์ฐ๊ด๋ ๋ฉ์๋๋ฅผ ์ ๊ฑฐ ํ ํ๋ getter๋ก ๋ณ๊ฒฝ
verus-j
left a comment
There was a problem hiding this comment.
์๋
ํ์ธ์ ์์ด์ ๋ฆฌ~
ํผ๋๋ฐฑ ๋ฐ์ํ๋๋ผ ๊ณ ์ํ์
จ์ต๋๋ค. ์ถ๊ฐ ํผ๋๋ฐฑ ๋จ๊ฒจ๋์ผ๋ ํ์ธ๋ถํ๋๋ ค์!
|
|
||
| public class Cards { | ||
|
|
||
| public static final int FIRST_DRAW_SIZE = 2; |
There was a problem hiding this comment.
๋ณด๋๊น Controller์์ ์ฌ์ฉ์ค์ด๋ค์. FIRST_DRAW_SIZE๋ฅผ private์ผ๋ก ๋ฐ๊ฟ ์ ์๋ ๊ตฌ์กฐ๊ฐ ์์์ง ๊ณ ๋ฏผํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์์. ์ด๊ธฐ ์ํจ ํฌ๊ธฐ์ ๋ํ ์ ๋ณด๊ฐ public์ผ๋ก ์ ์งํด์ผํ๋ค๋ฉด, ์ด๊ธฐ ์ํจ์ ๊ด๋ จ๋ ๋ก์ง์ด ์ด๊ณณ์ ๊ณณ์ ํฉ์ด์ ธ ์์ ๊ฐ๋ฅ์ฑ์ด ํฐ ๊ฒ ๊ฐ์ต๋๋ค.
| return new BlackjackResult(dealer, players); | ||
| } | ||
|
|
||
| public void compareResult(Dealer dealer, Players players) { |
There was a problem hiding this comment.
์ ๊ทผ ์ ์ด์ ์์ ์ด ํ์ํด๋ณด์ ๋๋ค~
| playerResult.put(player, WinOrLose.LOSE); | ||
| return; | ||
| } | ||
| playerResult.put(player, WinOrLose.DRAW); |
There was a problem hiding this comment.
DRAW๊ฐ ์๋๋ฐ WinOrLose๊ฐ ์ฌ๋ฐ๋ฅธ enum ํด๋์ค ์ด๋ฆ์ผ๊น์?
| } | ||
| } | ||
|
|
||
| private void getJudgeResult(Dealer dealer, Player player) { |
There was a problem hiding this comment.
๋ช๋ช ๋ถ๋ถ ํ ์คํธ ์ผ์ด์ค๊ฐ ๋ถ์กฑํฉ๋๋ค! ํ์ธ๋ถํ๋๋ ค์~
| public static final int ACE_HIGH_LOW_DIFF = 10; | ||
| public static final int BUST_THRESHOLD = 21; |
There was a problem hiding this comment.
์ ๊ทผ์ ์ด์ ํ์ธ ๋ถํ๋๋ฆฝ๋๋ค~
| public static final int DEALER_HIT_THRESHOLD = 16; | ||
| public static final int ACE_HIGH_LOW_DIFF = 10; | ||
| public static final int BUST_THRESHOLD = 21; |
There was a problem hiding this comment.
์ ๊ทผ์ ์ด์ ํ์ธ ๋ถํ๋๋ ค์~
| private final Cards deck = Cards.of(); | ||
| private final List<Card> initialCards = new ArrayList<>(List.of( | ||
| Card.of(Rank.ACE, Suit.DIAMOND), | ||
| Card.of(Rank.FOUR, Suit.CLOVER))); | ||
|
|
||
| private final List<String> userNames = List.of("pobi", "jason"); | ||
| private final Players players = Players.of(deck, userNames); | ||
| private final Dealer dealer = Dealer.of(initialCards); | ||
| private final BlackjackResult blackjackResult = BlackjackResult.of(dealer, players); |
There was a problem hiding this comment.
given ์ ์ด ์ฌ๊ธฐ์ ๋ค ์์ด์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ฝ์ ๋ ์ดํด๊ฐ ์ด๋ ค์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ป๊ฒ ํ๋ฉด ์ค๋ณต๋ ๋ก์ง์ ์ ๊ฑฐํ๋ฉด์ ๊ฐ๋ ์ฑ ์๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ ์ ์์์ง ๊ณ ๋ฏผํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์์~
| @Test | ||
| @DisplayName("๋๋ฌ ํฉ๊ณ๊ฐ 16์ดํ์ด๋ฉด ์นด๋ 1์ฅ ์ถ๊ฐ ํ ์คํธ") | ||
| void add_one_card_test() { | ||
| List<Card> initialCards = new ArrayList<>(List.of( | ||
| Card.of(Rank.ACE, Suit.DIAMOND), | ||
| Card.of(Rank.FOUR, Suit.CLOVER))); | ||
| Dealer dealer = Dealer.of(initialCards); | ||
|
|
||
| dealer.drawUntilHit(deck); | ||
|
|
||
| assertThat(dealer.getCards()).hasSize(3); | ||
| } |
There was a problem hiding this comment.
๋ค์์ ๋ฝ์ ์นด๋๊ฐ ACE์ด๋ฉด 4์ฅ๊น์ง ๊ฐ ์ ์์ง ์์๊น์?
src/test/java/domain/PlayerTest.java
Outdated
| List<String> expect = List.of(Rank.TEN.getName() + Suit.DIAMOND.getName(), | ||
| Rank.FIVE.getName() + Suit.CLOVER.getName()); | ||
| assertThat(player.getCardsInfo()).isEqualTo(expect); |
There was a problem hiding this comment.
์ด๋ฏธ getter๋ฅผ ํ๋ก๋์ ์ฝ๋(Controller)์์ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ getter๋ฅผ ์ฌ์ฉํด๋ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ง์ฝ์ ํ๋ก๋์ ์ฝ๋์๋ getter๊ฐ ์์ด ํ ์คํธ ์ฝ๋์์๋ง ์ฌ์ฉ๋๋ค๋ฉด ์กฐ๊ธ ๋ฒ๊ฑฐ๋กญ์ง๋ง equals&hashcode๋ฅผ ์ค๋ฒ๋ผ์ด๋ํด์ isEqualTo๋ก ๊ฒ์ฆํ๋ ๊ฒ๋ ๋ฐฉ๋ฒ์ด ๋๊ฒ ๋ค์.
์ฒดํฌ ๋ฆฌ์คํธ
test๋ฅผ ์คํํ์ ๋, ๋ชจ๋ ํ ์คํธ๊ฐ ์ ์์ ์ผ๋ก ํต๊ณผํ๋์?์ด๋ค ๋ถ๋ถ์ ์ง์คํ์ฌ ๋ฆฌ๋ทฐํด์ผ ํ ๊น์?
1๏ธโฃ ์ฌ๋ฐ๋ฅธ TDD ๊ตฌํ์ด๋?
์ ๊ฐ ์๊ฐํ TDD๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ ์ ํ ์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํด ์์ ์ฑ์ ๋์ด๋ ๊ฒ์ ๋๋ค. ๋ํ RedโGreenโBlue ๋จ๊ณ๋ก, ํ ์คํธ๊ฐ ์คํจํ๋ ์ฝ๋๋ฅผ ๋จผ์ ๋ง๋ ๋ค โ ํ ์คํธ๋ฅผ ํต๊ณผํ๋๋ก ๊ตฌํํ๊ณ (ํ ์คํธ ์ฝ๋์์ ๊ตฌํํจ) โ ๋ฆฌํฉํ ๋งํ ํ(ํ ์คํธ ์ฝ๋์์ ๋ฆฌํฉํ ๋ง) โ ์ค์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ํ๋ฆ์ผ๋ก ์ดํดํ์ต๋๋ค.
์ ๋ต์ด ์๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์ด๋ฌํ ๋ฐฉ์์ด ์ฌ๋ฐ๋ฅธ TDD ๊ตฌํ์ธ์ง ๊ถ๊ธํฉ๋๋ค.
2๏ธโฃ TDD์ ์ฐ์ ์์
๊ธฐ๋ฅ ์๊ตฌ ์ฌํญ์ ์ฝ๊ณ , ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ ๋ง์ถฐ ๊ธฐ๋ฅ ๋ชฉ๋ก์ ์์ฑํ์ต๋๋ค.
์ดํ TDD๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ๊ธฐ์ด ๋๋ฉ์ธ ์ค๊ณ๊ฐ ํ์ํ๋ค๊ณ ํ๋จํด ๋ธ๋์ญ ๋ฑ(Cards)์ ๋ง๋ค๊ณ ์์ํ๊ณ , ์ด ๊ณผ์ ์์ ํ๋ก๊ทธ๋จ ํ๋ฆ์ ๋ง์ถฐ TDD๋ฅผ ์์ฑํ๊ธฐ๋ณด๋ค๋ ๋ธ๋์ญ์ ํต์ฌ ๊ธฐ๋ฅ์ธ ์นด๋ ํฉ๊ณ์ ACE 1/11 ์ฒ๋ฆฌ์ ๋ํ TDD๋ฅผ ๋จผ์ ์์ฑํ์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์นด๋ ํฉ๊ณ๋ฅผ ํ ์คํธํ๊ธฐ ์ํด Player๋ฅผ ๋ง๋ค๊ฒ ๋์๊ณ , Player์ draw() ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ฉด์ TDD๋ฅผ ์์ฑํ๋ ค๋ค ๋ณด๋ Player์ TDD๋ฅผ ๋์น๊ฒ ๋๋ ์ ์ํ์ด ๋ฐ๋ณต๋์์ต๋๋ค.
์ฒซ TDD๋ฅผ ๊ตฌํํ๋ฉฐ ๋๋ ์ ์, ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ ๋ง์ถฐ TDD๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅธ ์ฐ์ ์์๊ฐ ๋ ์ ์๊ฒ ๋ค๋ ๊ฒ์ ๋๋ค. ์ ์๊ฒฌ์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ์๋์ง ๊ถ๊ธํฉ๋๋ค!
3๏ธโฃ ํ ์คํธ ๋จ์
์ด๋ฒ ํ์ด ํ๋ก๊ทธ๋๋ฐ์์ ๊ฐ์ฅ ๊ณ ๋ฏผํ๊ณ ์ด๋ ค์ ๋ ๋ถ๋ถ์ ํ ์คํธ ๋จ์์์ต๋๋ค.
ํ ์คํธ ๋จ์ ๊ท์น ์ค ํ๋๋ก โ๋น์ฆ๋์ค ๊ท์น์ด ๋ค์ด๊ฐ ๋ฉ์๋ ๋จ์๋ก ํ ์คํธํ๋คโ๋ฅผ ์ ํ์ง๋ง, ๊ทธ๋ผ์๋ ํผ๋์ด ์์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋น์ฆ๋์ค ์ถ๋ ฅ์ ์ํด ํ๋ ์ด์ด ์ด๋ฆ์ด๋ ํ๋ ์ด์ด๊ฐ ๋ณด์ ํ ์นด๋๋ค์ ์ ์ฅํ List ๋ฐํ๊ฐ์ ํ ์คํธํด์ผ ํ๋์ง, ํ๋ ์ด์ด๊ฐ ์นด๋ 2์ฅ์ draw() ํ์ ๋ ์นด๋๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๋ฐ์๋์ง๋ ํ ์คํธํด์ผ ํ๋์ง ๋ฑ ํ๋ํ๋ ์๋ฌธ์ด ์๊ธฐ๋ค ๋ณด๋ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ด ๋งค์ฐ ํผ๋์ค๋ฌ์ ์ต๋๋ค.
ํ ์คํธ๋ฅผ ํด์ผ ํ๋ ๋ช ํํ ๊ธฐ์ค์ด ์์๊น์? ํ ์คํธ ์ ์ธ ๊ท์น์ ์ ์ถ๋ ฅ ๊ด๋ จ ๋ฉ์๋๋ก ์ ํ๋๋ฐ, ์ด๋ฐ ๊ท์น๋ค์ด ํผํฉ๋๋ฉด์ ์คํ๋ ค ๋ฌด์์ ํ ์คํธํด์ผ ํ๋์ง ๋ ํท๊ฐ๋ฆฌ๊ฒ ๋์์ต๋๋ค. ๋ฆฌ๋ทฐ์ด๋์ ํ ์คํธ ๊ธฐ์ค์ด ๊ถ๊ธํฉ๋๋ค!