[๐ ์ฌ์ดํด2 - ๋ฏธ์ (๋ธ๋์ญ ๋ฒ ํ )] ๋ฐ๋ ๋ฏธ์ ์ ์ถํฉ๋๋ค.#1103
[๐ ์ฌ์ดํด2 - ๋ฏธ์
(๋ธ๋์ญ ๋ฒ ํ
)] ๋ฐ๋ ๋ฏธ์
์ ์ถํฉ๋๋ค.#1103frombunny wants to merge 76 commits intowoowacourse:frombunnyfrom
Conversation
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๋ก ์ ์
Choi-JJunho
left a comment
There was a problem hiding this comment.
๋ฐ๋~! step2 ๋ฏธ์
๋ ์ ์ํํด์ฃผ์
จ๋ค์ ๐
๋ช๊ฐ์ง ์ฝ๋ฉํธ ๋จ๊ฒผ์ผ๋ ํ์ธ ๋ถํ๋๋ฆด๊ฒ์ ๐
step2๋ ํ์ดํ
์
๋๋ค! ๐ช
| BigDecimal profit = calculatePlayerProfit(player, dealer); | ||
| playersProfitSum = playersProfitSum.add(calculatePlayerProfit(player, dealer)); |
There was a problem hiding this comment.
calculatePlayerProfit ์ ๋๋ฒ ํธ์ถํ์๋ ์ด์ ๊ฐ ์์๊น์?
There was a problem hiding this comment.
ํ๐ฎ ์ด ๋ถ๋ถ์ ๊ตฌ์กฐ๋ฅผ ๋ฐ๊พธ๋ ๊ณผ์ ์์ ์ค์ํ๋ค์..! ์์ ํ๋๋ก ํ๊ฒ ์ต๋๋ค..!
| private ParticipantResultInfo participantResultInfo(Participant participant) { | ||
| return participantResultInfos.stream() | ||
| .filter(participantResultInfo -> participantResultInfo.name().equals(participant.name())) | ||
| .findFirst() | ||
| .orElseThrow(IllegalStateException::new); |
There was a problem hiding this comment.
์ด๋ฆ์ผ๋ก ์ฐธ๊ฐ์๋ฅผ ์ฐพ๊ณ ์๊ตฐ์!
์ด๋ฆ์ด์๋ ๋ค๋ฅธ ๊ฐ์ผ๋ก ํ์ธํด์ผํ๋ค๋ฉด ์ด๋ค ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด๋ณผ ์ ์์๊น์?
ex) ๊ฐ์ฅ ๋์ ๋ง์ด ๋ฒ ์ฌ๋
There was a problem hiding this comment.
๋ง์ํด์ฃผ์ ๊ฒ์ฒ๋ผ ์ด๋ฆ์ ์๋ณ์๋ก ์ฌ์ฉํ๋ ๊ฒ ๋ญ๊ฐ ์ด์ํ๊ฒ ๋๊ปด์ง๋๋ผ๊ตฌ์..!
๋ค์ ์๊ฐํด๋ณด๋, Map ๊ตฌ์กฐ๋ก ๊ด๋ฆฌํ๋ฉด ์ฐธ๊ฐ์ ๊ฐ์ฒด ์์ฒด๋ฅผ key๋ก ์ฌ์ฉํ ์ ์์ด์ ์ข๊ฒ ์ด์ ๐ฐ
++) ์ถ๊ฐ๋ก ๋๋ฉ์ธ์ด dto๋ฅผ ๋ค๊ณ ์๋ ๋ก์ง๋ ์ด์ํ๋ค๊ณ ์๊ฐํ์ฌ ์ด ๋ถ๋ถ๋ ์์ ํด๋ณด๊ฒ ์ต๋๋ค..!
| )); | ||
| } | ||
|
|
||
| participantResultInfos.add(new ParticipantResultInfo(dealer.name(), playersProfitSum.negate())); |
There was a problem hiding this comment.
๋๋ฌ๋ฅผ 3๋ฒ์งธ์ ์ถ๋ ฅํด์ผํ๋ค ๋ผ๊ณ ์๊ตฌ์ฌํญ์ด ๋ณ๊ฒฝ๋๋ฉด, ๋๋ฉ์ธ ๋ก์ง์ ๋ณ๊ฒฝํด์ผํ ๊น์?
List์ ๋ง์ง๋ง์ ๋๋ฌ๋ฅผ ๋๋ค๋ ํ์๊ฐ ์ถ๋ ฅ์ ์์กด์ ์ผ ์ ์์ง ์๋ ํ๋ ์๊ฐ์ด ๋๋๋ฐ ๋ฐ๋์ ์๊ฐ์ ์ด๋ ์ ๊ฐ์?
There was a problem hiding this comment.
์ฃผ๋
ธ์ ๋ง์ ์์ ๋์ํด์.. ๊ทธ ๋ถ๋ถ์ ์ ํ ๊ณ ๋ คํ์ง ๋ชปํ๊ณ ์์๋ค์!
GameResult๊ฐ ๋๋ฌ์ ํ๋ ์ด์ด ์ต์ข
๊ฒฐ๊ณผ ์ ๋ณด๋ฅผ ๊ฐ๊ฐ ํ๋๋ก ๋ค๊ณ ์๋๋ก ์์ ํ๋ ๊ฒ ์ข๊ฒ ์ด์ ๐
++) ์์ ๊ฐ์ด ๋จผ์ ๋ตํ์๋๋ฐ, Map์ ์ฌ์ฉํ๋ฉด ๊ตณ์ด ํ๋๋ฅผ ๋ถ๋ฆฌํ ํ์๊ฐ ์์ ๊ฒ ๊ฐ์์ ๐ฎ
๊ทธ๋์ Map ๊ตฌ์กฐ๋ก ๋ณ๊ฒฝํ์์ต๋๋ค!
| return TIE; | ||
| } | ||
|
|
||
| return null; |
There was a problem hiding this comment.
๋ฉ์๋๊ฐ null์ ๋ฐํํ๋๊ตฐ์ ๐
null์ ๋ฐํํ๋ ๋ฉ์๋๊ฐ ์์๋ ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์๊น์?
Optional์ ํ์ฉํด๋ณด์๋๊ฒ๋ ํ๋์ ๋ฐฉ๋ฒ์ด ๋ ์ ์์ต๋๋ค ๐
There was a problem hiding this comment.
null์ ๋ฐํํ๋ ๋ฉ์๋๊ฐ ์๋ค๋ฉด NPE๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๋ชจ๋ ๊ณณ์์ null ์ฒดํฌ๋ฅผ ํด์ค์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๊น๋๋ค..!
์ ๊ฐ Optional์ ํ์ฉํ ์๊ฐ์ ๋ชปํ๋ค์..๐ข Optional์ ๋ฐํํ๋๋ก ์์ ํ๊ฒ ์ต๋๋ค!
| import static domain.BlackjackRule.BLACK_JACK; | ||
|
|
||
| public class Player extends Participant { | ||
| private BigDecimal betAmount = BigDecimal.ZERO; |
There was a problem hiding this comment.
๋ฒ ํ ๊ธ์ก์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๊ฐ ๋ฐ๋ก ํ์ํ ๊น์?
์ด ๋ถ๋ถ์ ๊ณ ๋ฏผํ๋ฉด์ ๊ณผํ ์ค๊ณ์ ํ์ฅ ๊ฐ๋ฅํ ์ค๊ณ ์ฌ์ด์์ ์ด๋ป๊ฒ ๊ท ํ์ ์ก์์ผ ํ ์ง ๊ถ๊ธํด์ก์ด์.
๋๋ฉ์ธ ๊ฐ์ฒด๋ฅผ ๋ถ๋ฆฌํ ๋ ์ด๋ ์ ๋์ ์ฑ ์์ด๋ ๊ท์น์ด ์๊ธฐ๋ฉด ๊ฐ์ฒด๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ ์ ํ์ง,
ํน์ ๋ฏธ๋ ํ์ฅ์ ๊ณ ๋ คํด ๋ฏธ๋ฆฌ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ข์ ๊ฒฝ์ฐ๋ ์ธ์ ์ธ์ง ๊ถ๊ธํด์!
์ผ๋จ ์ ์๊ฐ์ ์ฑ ์์ด ๋์ด๊ฐ๊ฑฐ๋ ๋๋ฉ์ธ ๊ท์น์ด ์ถ๊ฐ๋๋ฉด ๊ฐ์ฒด๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ณผํ ์ถ์ํ๋ ์คํ๋ ค ์ฝ๋ ๋ณต์ก๋๋ฅผ ๋์ผ ์ ์๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๋๋ค!
์ข์ ๊ธฐ์ค์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค! ์ ๋ ๋ฐ๋์ ์๊ฒฌ์ ๋์ํด์ :)
์ ๋ ๊ฐ์ธ์ ์ผ๋ก ๋์ด๋ผ๋ ๋๋ฉ์ธ์ ์ค์ํ๊ฒ ์๊ฐํ๋ ํธ์ด๋ผ ๋์ ๋ค๋ฃจ๋ ๊ฐ์ ๋ฐ๋์ ๋ํํด์ผํ๋ค๊ณ ์๊ฐํ๋ ํธ์ด์์
1์์ด๋ผ๋ ์ค์ฐจ๊ฐ ๋๋ฉด ์๋๋ ๋๋ฉ์ธ์ด๋ผ๊ณ ์๊ฐํ๊ฑฐ๋ ์!
์ด๊ฑด ์ ๊ฐ์ธ์ ์ธ ์๊ฒฌ์ด๊ณ , ๋ฐ๋์ ์ฃผ์ฅ๊ณผ ๊ทผ๊ฑฐ๋ ํ๋นํ๋ค๊ณ ์๊ฐํฉ๋๋ค!
There was a problem hiding this comment.
์ฌ์ค ์ด์ ๊น์ง๋ ํ์์ ์์ ๊ตณ์ด ๋์ ๋ํํด์ผ ํ ๊น ํ๋ ์๊ฐ์ด ์์๋๋ฐ,
์ฃผ๋
ธ์ ์๊ฒฌ์ ๋ฃ๊ณ ๋ณด๋ ๋์ด๋ผ๋ ๋๋ฉ์ธ์ ๋ณ๋์ ๊ฐ ๊ฐ์ฒด๋ก ๋ค๋ฃจ๋ ์ด์ ๋ฅผ ์๊ฒ ์ด์๐
๋ค์ ์๊ฐํด๋ ์ค์ํ ๊ฑด์ ์ค์ค๋ก ๊ทธ ์ ํ์ ๊ทผ๊ฑฐ๋ฅผ ์ค๋ช
ํ ์ ์์ด์ผ ํ๋ ๊ฒ์ด๋ผ๋ ์๊ฐ์ด ๋๋ค์!
| .map(Player::new).toList() | ||
| ); | ||
|
|
||
| players.getPlayers().forEach(player -> player.bet(inputView.getBetAmount(player.name()))); |
There was a problem hiding this comment.
์ผ๊ธ์ปฌ๋ ์
์์์ ์์๋ฅผ ๋ฐ์ ๋ค ๊ทธ ์์๊ฐ player๊ฐ ๋ณ๊ฒฝ๋๋ ๊ตฌ์กฐ๋ค์!
๊ตฌ์กฐ์ ์ผ๋ก ๋ถ์์ ํ ํํ๊ฐ ๋๋ ๊ฒ ๊ฐ์๋ฐ ์ด๋ป๊ฒ ์์ ์ ์ธ ํํ๋ก๋ง๋ค์ด ๋ณผ ์ ์์๊น์?
๋ฐฉ์ด์ ๋ณต์ฌ๋ฅผ ์ ์ฉํด๋ณด์์ฃ !
There was a problem hiding this comment.
๋ง์ํด์ฃผ์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก players๋ฅผ ๋ฐํํ๋ ๋ถ๋ถ์์ ๋ฐฉ์ด์ ๋ณต์ฌ๋ฅผ ์ ์ฉํ์์ต๋๋ค!
๊ทธ๋ฐ๋ฐ ๊ฐ๋ฐ์ ํ๋ค๊ฐ ํ ๊ฐ์ง ๊ณ ๋ฏผํ๋ ๋ถ๋ถ์ด ์๊ฐ๋ฌ์ต๋๋ค.
[์ด๋ฆ์ ์
๋ ฅ ๋ฐ์ Player ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ, ๋ฒ ํ
๊ธ์ก์ ์
๋ ฅ ๋ฐ๋ ๋ฐฉ์] VS [์ด๋ฆ๊ณผ ๋ฒ ํ
๊ธ์ก์ ๋ชจ๋ ์
๋ ฅ ๋ฐ์ ํ Player ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ์] ์ค ๋ฌด์์ด ๋ ์ ์ ํ ์ง ๊ณ ๋ฏผ๋์์ต๋๋ค..!
๊ฐ์ธ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ๋น์์๋ ์ด๋ฆ์ ์ ๋ ฅ๋ฐ์ Player ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ ๋ฒ ํ ๊ธ์ก์ ์ ๋ ฅ ๋ฐ๋ ๊ฒ์ด ์ค์ ๊ฒ์ ํ๋ฆ๊ณผ ๋ ์ ์ฌํ๋ค๊ณ ์๊ฐํด์ ์ด๋ ๊ฒ ์์ฑํ๋๋ฐ, ๊ทธ๋ก ์ธํด ์ ๋ฐ ์ฝ๋๊ฐ ๋์ค๊ฒ ๋ ๊ฒ ๊ฐ์์!
ํน์ ์ด๋ฆ๊ณผ ๋ฒ ํ ๊ธ์ก์ ๋ชจ๋ ์ ๋ ฅ๋ฐ์ ๋ค Player ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ด ๋ ์ ์ ํ ์ค๊ณ์ผ์ง ๊ถ๊ธํฉ๋๋ค!
| 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)); |
There was a problem hiding this comment.
GameResult์ ์ฑ ์์ด ๋ง์์ง๊ฒ ๊ฐ์์!
์์ต๊ณ์ฐ, ๊ฒฐ๊ณผ์ ์ฅ, ์กฐํ์ ์ฑ ์์ ๊ฐ์ง๊ณ ์๋๋ฐ calculatePlayerProfit ์ ๊ฐ์ ๋ก์ง์ด GameResult ์ฑ ์์ด ๋ง์๊น์?
There was a problem hiding this comment.
์ ๊ฐ ๋ณด๊ธฐ์๋ ์์ต ๊ณ์ฐ์ ํ์คํ GameResult์ ์ญํ ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค..!
ProfitCalculator๋ผ๋ ํด๋์ค๋ฅผ ๋ฐ๋ก ๋์ด ์์ต ๊ณ์ฐ ์ฑ
์์ ๋ถ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค ๐ฐ
| } | ||
|
|
||
| @Test | ||
| void ํ๋ ์ด์ด๊ฐ_์ฒ์_๋ฐ์_์นด๋_๋_์ฅ์_ํฉ์ด_21์ด๊ณ _๋๋ฌ๋_์๋_๊ฒฝ์ฐ_ํ๋ ์ด์ด๊ฐ_์น๋ฆฌํ๋ค(){ |
There was a problem hiding this comment.
ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ์ ์ด๋ป๊ฒ ํด์ผ ์ํ ์ ์๋ ๊ฑธ๊น์?
๊ทธ๋์ ํ ์คํธ๋ฅผ ๋จผ์ ์์ฑํ ๋ ์ด๋ ์์ค๊น์ง ์ค๊ณ๋ฅผ ๊ฐ์ ํ๊ณ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ ์ ํ์ง
์ค์ ๋ก TDD๋ฅผ ์ ํ๊ธฐ ์ํด์ ์ฐ์ตํ๊ฑฐ๋ ์์์ ์ผ๋ก ์ ๊ฒฝ ์ฐ๋ฉด ์ข์ ๋ถ๋ถ์ด ๋ฌด์์ธ์ง ๊ถ๊ธํฉ๋๋ค!
TDD๋ฅผ ํ๋ค๊ณ ํ๋ฉด ๋ณดํต Red-Green-Refactor ๋จ๊ณ๋ก ์งํ์ํ์ฃ !
๊ทผ๋ฐ ์ด Red ๋จ๊ณ๋ฅผ ์์ฑํ๋๊ฒ ๋ถ์ํด์ Green ์์ญ์ ๋ฏธ๋ฆฌ ๊ตฌํํ๋ค๋ ๋ฑ์ ํ๋๋ ์์ฃผ ๋์ฌ ์ ์๋ ๊ฒ ๊ฐ์์
์ ๋ ์ด TDD๊ฐ ๋๋ฌด ์ด๋ ค์ด ๊ณผ์ ์ด๋ผ๊ณ ์๊ฐํด์
ํ ์คํธ ์์ฑํ ๋๋ ๋น์ฅ ํ์ํ ์๊ตฌ์ฌํญ์ ๋จ์๋ก ์์ฑํด๋ณด๋๊ฒ ๊ฐ์ฅ ํ์ค์ ์ธ๊ฒ ๊ฐ์์. ๊ฐ๋ฅํ๋ค๋ฉด ๊ทธ ์๊ตฌ์ฌํญ์ ๋ ์๊ฐ ์ชผ๊ฐ๋ณด๋๊ฑฐ์ฃ
์ค์ ๋ก TDD๋ฅผ ๋ ์ ํ๊ธฐ ์ํ ์ฐ์ต์ผ๋ก ์ถ์ฒ๋๋ ค๋ณผ๋งํ๊ฑด ๋ฏธ์ ์ด ๋๋ ๋ค์ ๊ตฌํ๋ถ๋ฅผ ๋ค ์ง์ฐ๊ณ , ํ ์คํธ๋ง ๋ณด๊ณ ๋ค์ ๊ตฌํํ๋ ๊ณผ์ ์ ์งํํด๋ณด๋ฉด ๊ณ ํต์ค๋ฝ์ง๋ง ์ฑ์ฅํ ์๋ ์๋ ์ฐ์ต์ด ๋ ์ ์์ ๊ฒ ๊ฐ์์ ใ ใ
There was a problem hiding this comment.
์ข์ ์กฐ์ธ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค ๐
์ ๋ ํ
์คํธ๋ฅผ ์์ฑํ๋ค๊ฐ ๋์ค์ green ์์ญ์ ๋ฏธ๋ฆฌ ๊ตฌํํด๋ฒ๋ฆฌ๋ ์ผ๋ค์ด ๋ง์๋ ๊ฒ ๊ฐ์์..!
์ฃผ๋
ธ์ ์กฐ์ธ๋๋ก ๋ฏธ์
์ด ๋๋ ํ์๋ ํ
์คํธ๋ง ๋ณด๊ณ ๋ค์ ๊ตฌํํ๋ ๊ณผ์ ์ ํ๋ฒ ๊ฑฐ์ณ๋ด์ผ๊ฒ ์ต๋๋ค!
|
|
||
| @Test | ||
| void ๋ฌด์น๋ถ์ผ_๊ฒฝ์ฐ_ํ๋ ์ด์ด๋_์์ ์ด_๋ฒ ํ ํ_๊ธ์ก์_๋๋ ค๋ฐ๋๋ค() { | ||
| Cards playerCards = new Cards(List.of(new Card(Rank.ACE, Suit.HEART), new Card(Rank.JACK, Suit.HEART))); |
There was a problem hiding this comment.
ํ
์คํธ์ฝ๋์์ new Cards(...) ์ ๊ฐ์ ํจํด์ด ๋ฐ๋ณต๋๊ณ ์๋ค์!
Fixture๋ฅผ ๋ง๋ค์ด๋๋ฉด ๋ ๊ฐ๋จํ๊ฒ ํ
์คํธ์ฝ๋๋ฅผ ํํํด๋ณผ ์ ์์๊ฒ ๊ฐ์์ :)
There was a problem hiding this comment.
fixture๋ฅผ ๋ง๋ค์ด์ ์นด๋ ์์ฑ ๋ก์ง์ ์กฐ๊ธ ๋ ๊ฐ์ํ ์์ผ๋ณด๊ฒ ์ต๋๋ค!
| private final List<ParticipantResultInfo> participantResultInfos = new ArrayList<>(); | ||
|
|
||
| public GameResult(Players players, Dealer dealer) { | ||
| BigDecimal playersProfitSum = BigDecimal.ZERO; |
There was a problem hiding this comment.
BigDecimal์ ์ฌ์ฉํด์ฃผ์
จ๊ตฐ์!
์ BigDecimal์ ์ฌ์ฉํ์
จ๋์ง ๊ถ๊ธํฉ๋๋ค
There was a problem hiding this comment.
float, double ๊ฐ์ ๊ฒฝ์ฐ๋ ๋ถ๋์์์ ์ ์ด์ฉํด ์๋ฅผ ์ ์ฅํ๋๋ฐ, ์ด ๊ณผ์ ์์ ์ค์ฐจ๊ฐ ๋ฐ์ํ ์ ์๋ค๊ณ ์๊ณ ์์ต๋๋ค. ๋์ ๋ฏธ์ธํ ์ค์ฐจ๋ ํ์ฉ๋๋ฉด ์๋๋ค๊ณ ํ๋จํ์ฌ, BigDecimal๋ฅผ ์ฌ์ฉํ์์ต๋๋ค ๐ฐ
|
์๋
ํ์ธ์, ์ฃผ๋
ธ! |
์๋ ํ์ธ์, ์ฃผ๋ ธ! ๋ฐ๋์์๐ฐ
๋ฒ์จ ๋๋ฒ์งธ ๋ฆฌ๋ทฐ๋ฅผ ์์ฒญ๋๋ฆฌ๊ฒ ๋๋ค์! ์ฐํ ์ฝ์์ ๋ณด๋ด๋ ์๊ฐ์ ์ ๋ง ๋น ๋ฅด๊ฒ ํ๋ฌ๊ฐ๋ ๊ฒ ๊ฐ์์ ใ ใ
์ด๋ฒ ๋ฆฌ๋ทฐ๋ ์ ๋ถํ๋๋ฆฌ๋ฉฐ, ์ฆ๊ฑฐ์ด ์ฃผ๋ง ๋ณด๋ด์ธ์ ๐
์ฒดํฌ ๋ฆฌ์คํธ
test๋ฅผ ์คํํ์ ๋, ๋ชจ๋ ํ ์คํธ๊ฐ ์ ์์ ์ผ๋ก ํต๊ณผํ๋์?์ด๋ค ๋ถ๋ถ์ ์ง์คํ์ฌ ๋ฆฌ๋ทฐํด์ผ ํ ๊น์?
๋ฒ ํ ๊ธ์ก์ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๊ฐ ๋ฐ๋ก ํ์ํ ๊น์?
์ ๋ ๋ฒ ํ ๊ธ์ก ๊ฐ์ฒด๋ฅผ ๋ณ๋๋ก ์์ฑํ ๊น ๊ณ ๋ฏผ์ ํ๋ค๊ฐ ๋ฐ๋ก ์์ฑํ์ง๋ ์์์ต๋๋ค!
์ผ๋จ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ด์ ๋ ์ญํ ์ ๋ถ์ฌํ๊ณ ๊ทธ์ ๋ง๋ ์ฑ ์์ ๋คํ๋๋ก ํ๋ ๊ฑฐ๋ผ๊ณ ์๊ฐํด์.
์ ์๊ฐ์๋ ์ง๊ธ ๋จ๊ณ์์ ๋ฒ ํ ๊ธ์ก ์์ฒด๊ฐ ๊ฐ์ ธ์ผ ํ ์ฑ ์์ด ๊ทธ๋ ๊ฒ ๋ง์ง ์์ ๊ฒ ๊ฐ์์.
๋ฒ ํ ๊ธ์ก ํ ์ต์ข ์์ต ๊ณ์ฐ ๋ก์ง ์ธ์๋ ๋ฒ ํ ๊ธ์ก์ ๋ํ ๊ท์น๋ ์๊ณ ,
GameResult์์ calculatePlayerProfit ํจ์๋ก๋ ํ์ฌ ๊ธฐ๋ฅ์ ์ถฉ๋ถํ ๊ตฌํํ ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค!
์ด ๋ถ๋ถ์ ๊ณ ๋ฏผํ๋ฉด์ ๊ณผํ ์ค๊ณ์ ํ์ฅ ๊ฐ๋ฅํ ์ค๊ณ ์ฌ์ด์์ ์ด๋ป๊ฒ ๊ท ํ์ ์ก์์ผ ํ ์ง ๊ถ๊ธํด์ก์ด์.
๋๋ฉ์ธ ๊ฐ์ฒด๋ฅผ ๋ถ๋ฆฌํ ๋ ์ด๋ ์ ๋์ ์ฑ ์์ด๋ ๊ท์น์ด ์๊ธฐ๋ฉด ๊ฐ์ฒด๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ ์ ํ์ง,
ํน์ ๋ฏธ๋ ํ์ฅ์ ๊ณ ๋ คํด ๋ฏธ๋ฆฌ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ข์ ๊ฒฝ์ฐ๋ ์ธ์ ์ธ์ง ๊ถ๊ธํด์!
์ผ๋จ ์ ์๊ฐ์ ์ฑ ์์ด ๋์ด๊ฐ๊ฑฐ๋ ๋๋ฉ์ธ ๊ท์น์ด ์ถ๊ฐ๋๋ฉด ๊ฐ์ฒด๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ณผํ ์ถ์ํ๋ ์คํ๋ ค ์ฝ๋ ๋ณต์ก๋๋ฅผ ๋์ผ ์ ์๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๋๋ค!
ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ์ ์ด๋ป๊ฒ ํด์ผ ์ํ ์ ์๋ ๊ฑธ๊น์?
๋ฌผ๋ก ์ด์ ๋ง TDD๋ฅผ ๊ฒจ์ฐ ์์ํ ๋จ๊ณ์์ ๋ฒ์จ ์ํ๊ธฐ๋ฅผ ๋ฐ๋ผ๋ ๊ฑด ์กฐ๊ธ ์์ฌ์ด๊ฒ ์ง๋ง, ์์ง๋ TDD๊ฐ ๋๋ฌด ์ด๋ ต๊ณ ๋ฏ์ค๊ฒ ๋๊ปด์ง๋ ๊ฒ ๊ฐ์์.
์๋ฅผ ๋ค์ด ๊ตฌํ์ ํ๋ค ๋ณด๋ฉด ํ ์คํธ๋ฅผ ๋จผ์ ์์ฑํ๋ ค๊ณ ํด๋ ์ด๋ค ์ธํฐํ์ด์ค๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ๊ณ ์์ฑํด์ผ ํ ์ง ๋งํ๋ ์๊ฐ์ด ์์๊ณ , ํ ์คํธ๋ฅผ ์์ฑํ ๋ค์๋ ๊ตฌํ ๋๋ ํ ์คํธ๋ฅผ ๋ง์ด ์์ ํ๊ฒ ๋๋ ๊ฒฝ์ฐ๊ฐ ์์ด์
์ด ๊ณผ์ ์ด ์ ๋๋ก ๋ TDD ์ฌ์ดํด์ธ์ง ๊ณ ๋ฏผ์ด ๋๊ธฐ๋ ํฉ๋๋ค..!
๊ทธ๋์ ํ ์คํธ๋ฅผ ๋จผ์ ์์ฑํ ๋ ์ด๋ ์์ค๊น์ง ์ค๊ณ๋ฅผ ๊ฐ์ ํ๊ณ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ ์ ํ์ง
์ค์ ๋ก TDD๋ฅผ ์ ํ๊ธฐ ์ํด์ ์ฐ์ตํ๊ฑฐ๋ ์์์ ์ผ๋ก ์ ๊ฒฝ ์ฐ๋ฉด ์ข์ ๋ถ๋ถ์ด ๋ฌด์์ธ์ง ๊ถ๊ธํฉ๋๋ค!