[๐ ์ฌ์ดํด1 - ๋ฏธ์ (๋ธ๋์ญ ๊ฒ์ ์คํ)] ํ ๋ฆฌ ๋ฏธ์ ์ ์ถํฉ๋๋ค.#1020
[๐ ์ฌ์ดํด1 - ๋ฏธ์
(๋ธ๋์ญ ๊ฒ์ ์คํ)] ํ
๋ฆฌ ๋ฏธ์
์ ์ถํฉ๋๋ค.#1020Yeji-Kim-Erica wants to merge 54 commits intowoowacourse:yeji-kim-ericafrom
Conversation
๋๋ฌ์ ํ๋ ์ด์ด๋ฅผ ์ถ๊ฐํ์๊ณ , ๊ทธ๋ค์ ๊ณตํต ์กฐ์์ธ ์ฐธ๊ฐ์๋ฅผ ์ถ๊ฐํจ. ์ดํ ์นด๋์ ์นด๋๋ค์ ๊ด๋ฆฌํ๋ ๋ฑ์ ์ ์๋ฅผ ์ถ๊ฐํจ.
- ์ ๊ท ๋ฑ ์ ๊ณต ๊ธฐ๋ฅ ํ ์คํธ - ์นด๋ ๋ฝ๊ธฐ ๊ธฐ๋ฅ ํ ์คํธ ์ถ๊ฐ(์ ์, ์คํจ)
- ์๋ก์ด ๋ฑ ์ ๊ณต ๊ธฐ๋ฅ - ์นด๋ ์ ํ ๊ธฐ๋ฅ ์ ์ถ๊ฐํ์์ต๋๋ค.
Ace ๊ฐ ํ์ ๊ณผ ์ ์ฒด ์นด๋ ์ ์ ํฉ ๊ธฐ๋ฅ์ ์ํธ ์์กด์ฑ์ ๋๊ธฐ ๋๋ฌธ์ Ace๋ ์ ์ธํ ์นด๋ ์ ์ ํฉ์ ๊ณ์ฐํ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํจ.
- add card score total sum feature - add bust discrimination feature
๋๋ฌ ์์ฑ ์ ํ์ํ ํ๋ผ๋ฏธํฐ Deck์ ์ธ์คํด์ค ์ข ๋ฅ๋ฅผ ๋ช ์ํจ
๊ณตํต ๋ก์ง์ ์ ๊ฑฐํ๊ธฐ ์ํด participant ์ถ๊ฐ
๋๋ฌ๋ง์ ๊ณ ์ ํ ์นด๋ ์ถ๊ฐ ๋ก์ง์ ์ํด ๋ณ๋์ ๋ฉ์๋๊ฐ ์ ์ธ๋์ด ์์ต๋๋ค. ์ฐจํ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ addCard ๋ฉ์๋ ํธ์ถ ์ ํ์ฌ ์ค๊ณ์์ผ๋ก๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ UnsupportedOperationException์ ๋์ง๋ ๊ฒ์ผ๋ก override ํด๋์์ต๋๋ค
๊ธฐ์กด ๋ณ์ deck์ ๋ชจํธ์ฑ์ ์ ๊ฑฐํ๊ธฐ ์ํด ๋ณ๊ฒฝ
๋๋ฌ์ ํ๋ ์ด์ด์ ์นด๋ ์ถ๊ฐ ๋ฉ์๋๋ฅผ ๋จ์ผํํ์ฌ ์ฐจํ Participant ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋๋ก ๋ณ๊ฒฝ
- ํด๋์ค ๋ด๋ถ์์ ํ๋ ๋ฉค๋ฒ๋ก List ์ฌ์ฉํ๋ ๊ฒ์ ์ค์ด๊ธฐ ์ํด - ์ถํ ์ฐธ๊ฐ์๋ค์ ์ ์ฒด ์ ๋ณด๋ฅผ ์์์ผ๋ง ๊ณ์ฐํ ์ ์๋ ๋ด์ฉ๋ค์ ๋ค๋ฃฐ ํด๋์ค๊ฐ ํ์ํด์
BufferedReader ์ฌ์ฉ ์ IOException ๊ด๋ จ ๋ฌธ์ ๊ฐ ์กด์ฌ. ํด๋น ๋ฌธ์ ๋ฅผ ํธ๋ค๋ง ํ๋ ๊ฒ ๋ณด๋ค ์๋๊ฐ ๋ค์ ๋๋ฆฌ๋๋ผ๋ Scanner ์ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํธ๋ค๋ง ํ์ง ์๊ฒ ๋๋ ๊ฒ์ด ๋ ์ข๋ค๊ณ ํ๋จํ์ฌ ๋ณ๊ฒฝํจ
ํ ์คํธ ๋ก์ง ์์ฑ์ ์ฉ์ด์ฑ์ ์ํด mockito ์ถ๊ฐ
- ๋ถ๋ชจ ํด๋์ค(Participants)๊ฐ ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ตฌ์กฐ์ ๋ชจ์์ ํด๊ฒฐํ๊ธฐ ์ํด ํด๋น ๊ณตํต ํด๋์ค ์ ๊ฑฐ - ๋ค์์ ํ๋ ์ด์ด๋ฅผ ๊ด๋ฆฌํ๋ ์ผ๊ธ ์ปฌ๋ ์ Players ํด๋์ค ์ ๊ท ์ถ๊ฐ - Game ๋๋ฉ์ธ์ด Dealer์ Players๋ฅผ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ธ ํ๋๋ก ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ๋๋ก ๊ฐ์ฒด ๊ตฌ์กฐ ๊ฐ์ - ๋๋ฉ์ธ ๊ตฌ์กฐ ๋ณ๊ฒฝ์ ๋ฐ๋ผ Dealer์ getCards() ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๊ณ , OutputView ์ถ๋ ฅ ๋ก์ง ์์
๊ฐ๋ ์ฑ์ ์ํด ๋ฉ์๋ ๋ถ๋ฆฌ๋ฅผ ์งํํจ
This reverts commit 2fb6f4b.
This reverts commit 2fb6f4b.
- ์ฌ์ฉ์์ ์ดํด๋ฅผ ๋๊ธฐ ์ํด ๊ธฐ๋ฅ ๋ชฉ๋ก ์์ฃผ๋ก ์ฒดํฌ ๋ฆฌ์คํธ ๋ณ๊ฒฝ. - ํด๋์ค ๋ค์ด์ด๊ทธ๋จ ์ถ๊ฐ.
There was a problem hiding this comment.
์๋
ํ์ธ์ ํ
๋ฆฌ,
๋ฏธ์
์งํํ์๋๋ผ ๊ณ ์ ๋ง์ผ์
จ์ด์.
์ ๋ง ์น์ดํ ํ ๋ก ์ ํ๋ค๋ ๋๋์ด ๋ฆฌ๋ทฐํ๋ฉด์ ์ ๋ ๋๊ปด์ก์ต๋๋ค.
ํ
๋ฆฌ๊ฐ ๋จ๊ฒจ์ฃผ์ ์ง๋ฌธ๊ณผ ์๊ฐ ๋ชจ๋ ๊ผผ๊ผผํ๊ฒ ์ฝ์ด๋ดค๊ณ ,
์งํํ์๋ฉด์ ๋๊ผ๋ ๊ฒ๋ค, ๊ณ ๋ฏผํ ๊ฒ๋ค ๋ฑ๋ฑ ๋ค ํ์
ํ์ด์.
๊ทธ๋๋ ๋ฆฌ๋ทฐ๋ ๋ฆฌ๋ทฐ์ด๋, ์ ์์งํ ์๊ฐ๊ณผ ์๊ฒฌ์ ๋จ๊ฒจ๋ณด๊ฒ ์ต๋๋ค.
์ฐ์ ,
๋ฆฌ๋ทฐ๊ฐ ์ ๊ธฐ์ค์์ ์๊ฐ๋ณด๋ค ์ค๋ ๊ฑธ๋ ธ๋๋ฐ, ํฌ๊ฒ ๋ ๊ฐ์ง ์ด์ ์์ ์์ต๋๋ค :
- ์ฝ๋๊ฐ ๋ฐ๋ผ๊ฐ๊ธฐ ํ๋ ๊ตฌ์กฐ์ ๋๋ค. ๊ธฐ๋ฅ ๋๋น ๋ณต์ก๋๊ฐ ๋๋ค๊ณ ์๊ฐํ์ด์.
- ํ ๋ฆฌ์ ํ์ด์ ์๊ฐ์ ๋ฐ๋ผ๊ฐ๊ธฐ๊ฐ ํ๋ค์์ต๋๋ค. ์ง๊ธ๋ ์ ๊ฐ ๋ค ์ดํดํ๋์ง ํ์คํ์ง๋ ์์์.
์ด๋ฅผ ๊ฐ๋จํ๊ฒ ์์ฝํด๋ณด์๋ฉด ์๊ฐ์ด ๋ง์๋ค ์ธ ๋ฏ ํ๋ฐ์,
ํ
๋ฆฌ๊ฐ ๋งํด์ฃผ์ ์ํฉ์ ์ ๊ฐ ์ด๋์ ๋ ์ดํดํ ๋ฏ ํด์,
๋ฆฌํฉํฐ๋ง ํ๋ฉด์ ์ด ๋ถ๋ถ์ ํด๊ฒฐํด๋๊ฐ ์ ์์๊ฑฐ๋ผ ์๊ฐํฉ๋๋ค. :)
์ ์ฝ๋ฉํธ๊ฐ ๋จํธํ๊ฑฐ๋ ์ฐจ๊ฐ๊ฒ ๋๊ปด์ง๋ ๊ฒฝ์ฐ๋ ์์ํ
๋ฐ,
ํ
๋ฆฌ๊ฐ ์๋ชปํด์๊ฐ ์๋๋ผ ์ด๋ฐ ํฌ ๋จธ์น ๋ตํน ์ํฉ์ ๋ง๊ณ ์ถ์ ๋ง์์ ๊ฐ์กฐํ๋๊ฑฐ๋ผ๊ณ ๋ด์ฃผ์ธ์.
๊ทธ๋ ๋ค๋ฉด ํ
๋ฆฌ์ ์ง๋ฌธ์ธ ์๊ฐ์ด ๋ง์์ง๋ ๊ฒ์ ๋ํด ์ด๋์ ๋ ์ด๋ฆฐ ๋ง์์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋...
์ด๋ ค์ด ๋ฌธ์ ์์.
๊ทธ๋ฆฌ๊ณ ์ด์ฉ ์ ์๋ ๋ถ๋ถ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์คํ๋ ค ์ง๊ธ ์ด ๋ฏธ์
, ์ ๋ฆฌ๋ทฐ์ ๋๋ฌด ๋ฌด๊ฒ๋ฅผ ๋์ง ๋ง๊ณ ์ ์ฒด๋ฅผ
๋ค์ํ ๊ฒ์ ๋ฐฐ์ฐ๋ ํ๋ฆ์ด๋ผ๊ณ ๋ณด๋ฉด ์ข ๋ ์ด๋ฆฐ ๋ง์์ผ๋ก ์๋ก์ด ์์ญ์ ๋์ ํด๋ณผ ์ ์์ ๊ฒ ๊ฐ๋ค์.
๊ทธ๋ฆฌ๊ณ ๋ฐ๋๋ก, ํ์ด์ ์๊ฒฌ์ ์กด์คํ๋ค๋ฉด
ํ
๋ฆฌ์ ์๊ฒฌ ์ญ์ ์กด์ค๋ฐ์์ผ ํ๋ค๋ ๊ฒ์ ์์ง ์์ผ์
จ์ผ๋ฉด ํ๊ณ ์.
์ค์ ๋ก ์ฝ๋ ๋ฆฌ๋ทฐ, ๊ธฐ์ ์ ์ ํ, ํ์ด์์ ํ์
์์ ์๊ฒฌ์ด ์ฑํ๋ ๋,
๊ธฐ์ ์ ์ธ ์ด์ ๊ฐ ์๋ ์ฌํ์ ์ธ ์ด์ ๊ฐ ์ค์์ ๋๋ ๊ฒฝ์ฐ๊ฐ (์๊ฐ๋ณด๋ค) ๋ง์ต๋๋ค.
ํ์ง๋ง ์ด๋ฅผ ๋ฐ๋๋ก ์๊ธฐํ๋ฉด, ์์ ๋งํ๋ฏ ํ
๋ฆฌ์ ์๊ฒฌ ์ญ์ ๊ทธ๋งํผ ์ค์ํ๋ค๋๊ฑฐ์ฃ .
ํ์ ํ ๋ ์๋ก ์๊ฒฌ์ด ๋ง์ด ๋ค๋ฅด๋ค๋ฉด, ํ ๋ฐ ๋ฌผ๋ฌ์ค ์ค๋ ์๊ณ , ํ ํธ์ผ๋ก๋ ๊ฐํ๊ฒ ์ดํํ๋ ์๊ฐ๋ ๊ฒฝํํด๋ณด์๊ธธ ๋ฐ๋๋๋ค.
์ผ๋จ request changes ํ๊ณ , ๋ฆฌํฉํฐ๋ง ๊ธฐ๋ํ๊ฒ ์ต๋๋ค :)
ํดํผํดํนํ์ธ์!!! ๐ฅ ๐ฅ ๐ฅ
| public void play(GameDelegate observer) { | ||
| List<Player> individualPlayers = players.getPlayers(); | ||
| for (Player player : individualPlayers) { | ||
| while (!player.isBust() && observer.askDrawCard(player.getName())) { | ||
| player.addCard(totalDeck); | ||
| observer.showPlayerCards(ParticipantDto.from(player)); | ||
| } | ||
| } | ||
| while (dealer.addCard(totalDeck).isPresent()) { | ||
| observer.showDealerOneMoreCardMessage(); | ||
| } | ||
| } |
There was a problem hiding this comment.
play()๋ ํ์ฌ for -> while ๊ตฌ์กฐ๋ผ indent depth 1 ์ ์ฝ์ ์งํค์ง ๋ชปํ๊ณ ์์ด์.
์ด๋ฒ PR์ ์ค๊ณ ๊ณ ๋ฏผ์ด ์ ๋ง ๋ง์๋๋ฐ,
๊ทธ ์ ์ ์ฐ์ ๋ช
์๋ ํ๋ก๊ทธ๋๋ฐ ์๊ตฌ์ฌํญ์ ๋จผ์ ๋ง์ถ๋ ๊ฒ ๋ ์ค์ํ๋ค๊ณ ์๊ฐํด์.
๊ฐ๋ฅํ๋ฉด ํ๋ ์ด์ด ์ํ์ ํ ์ฌ๋์ ํด ์งํ์ ๋ถ๋ฆฌํด์
๊น์ด๋ฅผ ์ค์ด๋ ๋ฐฉํฅ์ผ๋ก ๋๋ ๋ณด์๋ฉด ์ข๊ฒ ์ต๋๋ค.
ํ๋ก์ ํธ์ ๋ค๋ฅธ ํด๋์ค๋ค๋ ๊น์ด, ๊ทธ๋ฆฌ๊ณ 10์ค ์๊ตฌ์ฌํญ ํ ๋ฒ ํ์ธํด์ฃผ์ธ์!
| this.deck.addCard(newCard); | ||
| return Optional.of(newCard); | ||
| } | ||
| } No newline at end of file |
There was a problem hiding this comment.
ํ์ผ ๋์ ๋น ์ค(trailing newline)์ด ์์ด์.
POSIX ํ์ค์์๋ ํ
์คํธ ํ์ผ์ด ๊ฐํ ๋ฌธ์๋ก ๋๋์ผ ํ๊ณ , Git diff์์ \\ No newline at end of file ๊ฒฝ๊ณ ๊ฐ ๋จ๋ฉด์ diff๊ฐ ์ง์ ๋ถํด์ ธ์.
IntelliJ ์ค์ ์์ Editor โ General โ Ensure every saved file ends with a line break๋ฅผ ์ผ๋๋ฉด ์๋์ผ๋ก ์ฒ๋ฆฌ๋ผ์ ๐
There was a problem hiding this comment.
๋ํ
์ผํ ๋ฆฌ๋ทฐ ๊ฐ์ฌํฉ๋๋ค!
๋ง์ํด์ฃผ์ ๋๋ก ํ์ผ ๋์ ๊ฐํ ๋ฌธ์ ์ถ๊ฐํ์ฌ ๋ฐ์ ์๋ฃํ์ต๋๋ค.
IntelliJ ์ค์ ํ๊น์ง ์๋ ค์ฃผ์ ๋๋ถ์ ๋ฐ๋ก ์ ์ฉํด๋ณผ ์ ์์์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค!
์์ผ๋ก๋ ํ์ผ ๋ ๊ฐํ ๋ฌธ์๊ฐ ๋๋ฝ๋๋ ์ผ์ด ์๋๋ก ์ ๊ฒฝ ์จ์ ๊ด๋ฆฌํ๊ฒ ์ต๋๋ค!
| import controller.GameDelegate; | ||
| import dto.GameResultDto; | ||
| import dto.ParticipantDto; |
There was a problem hiding this comment.
์ด๋ฒ PR์ ํต์ฌ ๋ณต์ก๋๋ ์ด import ๋ค๋ถํฐ ์์๋๋ ๊ฒ ๊ฐ์์.
์ด๋ฆ๋ง ๋ณด๋ฉด Controller -> Game -> View์ฒ๋ผ ํ ๋ฐฉํฅ์ผ๋ก ํ๋ฅผ ๊ฒ ๊ฐ์๋ฐ,
์ค์ ๋ก๋ Game์ด ๋ค์ controller ์ชฝ ์ธํฐํ์ด์ค์ DTO๋ฅผ ๋ถ์ก๊ณ ์
๋ ฅ/์ถ๋ ฅ ํ๋ฆ๊น์ง ์๊ณ ์๋ค์.
์ ๋ ์ฌ๊ธฐ์ Game์ด controller ์ธํฐํ์ด์ค์ DTO๋ฅผ ์์ ๋ชจ๋ฅด๋๋ก ๋ฐ๊พธ๋ ์ชฝ์ ๋จผ์ ์ถ์ฒ๋๋ ค์.
Game์ ์ํ์ ๊ท์น๋ง ๊ด๋ฆฌํ๊ณ ,
์
๋ ฅ/์ถ๋ ฅ ํ๋ฆ๊ณผ ๋ณํ์ Controller๊ฐ ์์๋๋ก ์กฐ๋ฆฝํ๊ฒ ํด๋ณด๋ฉด ์ด๋จ๊น์?
์ด์ ๋ํ ํ ๋ฆฌ์ ์๊ฐ๋ ๊ถ๊ธํด์ :)
| public interface GameDelegate { | ||
|
|
||
| /** | ||
| * ์ฌ์ฉ์์ ์ ๋ ฅ์ ์๊ตฌ. | ||
| */ | ||
| List<String> askPlayerNames(); | ||
|
|
||
| boolean askDrawCard(String playerName); | ||
|
|
||
| /** | ||
| * ๊ฐ์ข ์ ๋ณด ์ถ๋ ฅ | ||
| */ | ||
| // ์ด๊ธฐ ์นด๋๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ | ||
| void showInitialParticipantCards(ParticipantDto dealerDto, List<ParticipantDto> playerDtos); | ||
|
|
||
| // ์ฐธ๊ฐ์ ํ๋ช ์ ์นด๋๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ | ||
| void showPlayerCards(ParticipantDto participantDto); | ||
|
|
||
| // ๋๋ฌ๊ฐ ์นด๋ ํ ์ฅ ๋ ๋ฐ์์์ ๋ณด์ฌ์ฃผ๊ธฐ | ||
| void showDealerOneMoreCardMessage(); | ||
|
|
||
| // ๊ฒ์์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ | ||
| void showGameResult(GameResultDto resultDto); | ||
| } |
There was a problem hiding this comment.
PR ๋ณธ๋ฌธ์์ ์ ์ด์ฃผ์ ํ๋ฆ์ ๋ณด๋ฉด,
์ฒ์์๋ Observer๋ก ์์ํ๋ค๊ฐ ๊ตฌํ ๊ณผ์ ์์ controller์์ ๊ฒฝ๊ณ๊ฐ ํ๋ ค์ก๊ณ ,
๊ทธ๊ฑธ ํ๊ธฐ ์ํด Delegate๋ก ์ด๋ฆ๊ณผ ๊ตฌ์กฐ๋ฅผ ๋ค์ ์ฎ๊ธฐ์ ๊ฑฐ์ฃ ?
(์๋๋ผ๋ฉด ์๋ ค์ฃผ์ธ์ ใ
ใ
ใ
์ ๊ฐ ์ ๋๋ก ์ดํดํ์ง ๋ชปํ์ ์๋ ์์ด์)
๊ทธ๋ฐ๋ฐ ์ ๊ฐ ๋ณด๊ธฐ์๋ ํจํด ์ด๋ฆ์ด Observer์์ Delegate๋ก ๋ฐ๋์๋์ง๊ฐ ํต์ฌ์ด๋ผ๊ธฐ๋ณด๋ค,
๊ทธ ๊ณผ์ ์ ๊ฑฐ์น ๋ค์๋ ์ฝ๋ ์ฌ๋์ด ์ฌ์ ํ "์ด๊ฒ ์ง๊ธ controller์ธ๊ฐ, observer์ธ๊ฐ, delegate์ธ๊ฐ?"๋ฅผ ํท๊ฐ๋ฆฐ๋ค๋ฉด
ํ์ฌ ๋ฌธ์ ๊ท๋ชจ์์ ๊ทธ ์ถ์ํ๊ฐ ๊ตฌ์กฐ๋ฅผ ๋ ๋ช
ํํ๊ฒ ๋ง๋ค์ง ๋ชปํ๋ค๋ ๋ป์ผ ์ ์์ด์.
์ง๊ธ ๊ตฌ์กฐ๋ผ๋ฉด ์ ๋ ๋ ๋ฐฉํฅ ์ค ํ๋๋ฅผ ๋ ์ถ์ฒ๋๋ ค์ :
ํ๋๋ ์ด interface๋ฅผ ์์ ๊ณ Controller๊ฐ ์ง์ ํ๋ฆ์ ์กฐ๋ฆฝํ๊ฒ ๋๋ ๊ฒ,
๋ค๋ฅธ ํ๋๋ ์ ๋ง ์ ์งํ๊ณ ์ถ๋ค๋ฉด input ๊ณผ output ์ญํ ์ ๋ถ๋ฆฌํด์ ๊ฐ๊ฐ ๋ ๋ถ๋ช
ํ ์ธํฐํ์ด์ค๋ก ๋๋๋ ๊ฒ์
๋๋ค.
์ด์์ด๋ฉด ์ ๋ ์๋์ ๋์ ๋ฐฉ์์ ์ดํดํ๊ธฐ ์ฌ์ด ๋ฐฉ์์ด์์ผ๋ฉด ํด์.
์ง๊ธ์ ์ ๊ฐ ๋๋ผ๊ธฐ์ ์ค๋ช
๊ณผ ๊ตฌํ์ด ๋ชจ๋ ์ดํดํ๊ธฐ ์ด๋ ค์ด ๊ตฌ์กฐ์์.
| public void play(GameDelegate observer) { | ||
| List<Player> individualPlayers = players.getPlayers(); | ||
| for (Player player : individualPlayers) { | ||
| while (!player.isBust() && observer.askDrawCard(player.getName())) { | ||
| player.addCard(totalDeck); | ||
| observer.showPlayerCards(ParticipantDto.from(player)); | ||
| } | ||
| } | ||
| while (dealer.addCard(totalDeck).isPresent()) { | ||
| observer.showDealerOneMoreCardMessage(); | ||
| } | ||
| } |
There was a problem hiding this comment.
play() ์์์ observer.askDrawCard(player.getName()) ์ ๊ฐ์ view ๋ก์ง์ ์ง์ ํธ์ถํ๊ณ ์๋ค์.
๊ทธ๋ ๋ค๋ฉด ์ง๊ธ ๊ฒ์ ์งํ ๋ก์ง์ ๋๋ฉ์ธ ์์ ์์ง๋ง,
์ค์ ํ๋ฆ ์ ์ด๋ UI ์
๋ ฅ์ ๋ฌถ์ฌ ์๋ ์
์ด์์.
์ด๋ด ๋๋ domain์ด ์ค์ค๋ก ์งํํ๊ธฐ๋ณด๋ค,
controller๊ฐ "์
๋ ฅ ๋ฐ๊ธฐ -> domain ํธ์ถ" ์์๋ฅผ ์กฐ๋ฆฝํ๋ ์ชฝ์ด ๋ ๊น๋ํ๋ค๊ณ ์๊ฐํด์.
์ฆ Game์ ํด ์งํ ๊ท์น๋ง ์๊ณ ,
์ง๋ฌธ์ ์ธ์ ๋์ง๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ธ์ ๋ณด์ฌ์ค์ง๋ Controller๊ฐ ๋งก๋ ๋ฐฉํฅ์ ์ถ์ฒ๋๋ ค์.
์ ๋ฐ์ ์ผ๋ก Game ์ด ์
์ถ๋ ฅ์ ๋ชฐ๋ผ๋ ๋๋ ๊ตฌ์กฐ๋ก ๋ฐ๊ฟ๋ณด๋ฉด ์ด๋จ๊น์?
|
|
||
| return new ArrayList<>(List.of(spadeJ, clover5)); | ||
| } | ||
| }; |
There was a problem hiding this comment.
ํ
์คํธ์์ ์ด๋ฐ anonymous CardCreationStrategy ๊ตฌํ์ฒด๊ฐ ๊ณ์ ๋ฐ๋ณต๋๋ค์.
์ฐ์ ์ฌ์ฉํ๋ค๋ฉด, ์ด๋ณด๋ค ๋ ๊ฐ๊ฒฐํ ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ค ์๋ ์์ต๋๋ค.
์ด๋ค ๋ฐฉ๋ฒ์ด ์๋์ง ํ ๋ฒ ์์๋ณด์๊ธธ ๋ฐ๋ผ์.
๊ทธ๋ฐ๋ฐ ์ ๋ ๋ ๋์๊ฐ ํด๋น ์ ๋ต ๊ด๋ จ ํด๋์ค (์ ๋ตํจํด์ด๋ผ๊ณ ๋ถ๋ฅด๊ธฐ์ ์ ๋๋ก ๋์
๋์ง๋ ์์ ๊ฒ ๊ฐ์ต๋๋ค) ๋ฅผ
๋ ๋จ์ํ๊ฒ ๋ง๋ค ์ ์์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ๋ ๋ค์ด์.
ํ
๋ฆฌ๊ฐ ๋ง์ํด์ฃผ์ Hands ๊ฐ์ฒด๊ฐ ์๊ธด๋ค๋ฉด ์ด๋์ ๋ ํด์๋ ๊ฒ ๊ฐ๋ค์.
๊ทธ ๊ตฌ์กฐ๊ฐ ๋ง๋ค์ด์ง๋ฉด Player ๋ฅผ ์์ฑํ ๋ ์ด๋ฐ ์ ๋ต์ ๋งค๋ฒ ๊ตฌํํ ํ์๊ฐ ์์ด์งํ
๋๊น์ :)
| import org.mockito.Mock; | ||
| import org.mockito.junit.jupiter.MockitoExtension; | ||
|
|
||
| @ExtendWith(MockitoExtension.class) |
There was a problem hiding this comment.
Mockito ๋ฅผ ์ฌ์ฉํด์ฃผ์
จ๋ค์.
ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด๋ค ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๊ณ , ์ด๋จ ๋ ์ฌ์ฉํ๋ฉด ์ ์ฉํ์ง ๋งํด์ฃผ์ธ์!
์ด ์ง๋ฌธ์ ๋จ๊ธฐ๋ ์ด์ ๋, ์๋ชป๋์๋ค๊ธฐ๋ณด๋ค๋
์ ๋ ๊ฐ์ธ์ ์ผ๋ก ๋์
ํ์ง ์์๋ ๊ด์ฐฎ์ ํ๋ก์ ํธ ๊ท๋ชจ๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ด์์.
| //private List<Card> createSampleCards() { | ||
| // CardShape[] shapes = CardShape.values(); | ||
| // CardContents[] contents = CardContents.values(); | ||
| // | ||
| // List<Card> sampleCards = new ArrayList<>(); | ||
| // for (CardShape cardShape : shapes) { | ||
| // for (CardContents content : contents) { | ||
| // sampleCards.add(new Card(cardShape, content)); | ||
| // } | ||
| // } | ||
| // | ||
| // return sampleCards; | ||
| // } |
There was a problem hiding this comment.
์ฃผ์ ์ฒ๋ฆฌ๋ ์ฝ๋๋ ์ง์์ฃผ์ธ์.
์ด๋ฐ ๋ฏธ์์ฑ๋ ๋ชจ์ต์ ๋ฆฌ๋ทฐ ๋ฐ๋ ค ์ด์ ๊ฐ ๋๊ธฐ๋ ํฉ๋๋ค.
| private static final String DELIMITER = ", "; | ||
| private static final String NAME_PROMPT = "๊ฒ์์ ์ฐธ์ฌํ ์ฌ๋์ ์ด๋ฆ์ ์ ๋ ฅํ์ธ์.(์ผํ ๊ธฐ์ค์ผ๋ก ๋ถ๋ฆฌ)"; | ||
| private static final String INITIAL_CARD_SHARE = "๋๋ฌ์ %s์๊ฒ 2์ฅ์ ๋๋์์ต๋๋ค.\n"; | ||
| private static final String HIT_OR_STAND_PROMPT = "%s๋ ํ์ฅ์ ์นด๋๋ฅผ ๋ ๋ฐ๊ฒ ์ต๋๊น?(์๋ y, ์๋์ค๋ n)\n"; | ||
| private static final String ADDITIONAL_CARD_FOR_DEALER_DESCRIPTION = "๋๋ฌ๋ 16์ดํ๋ผ ํ์ฅ์ ์นด๋๋ฅผ ๋ ๋ฐ์์ต๋๋ค."; | ||
| private static final String PARTICIPANT_CARD_INFO_FORMAT = "%s์นด๋: %s"; | ||
| private static final String PARTICIPANT_CARD_INFO_FORMAT_LINE = "%s์นด๋: %s\n"; | ||
| private static final String PARTICIPANT_CARD_INFO_WITH_SUM_FORMAT = "%s - ๊ฒฐ๊ณผ: %d\n"; | ||
| private static final String WIN_LOSS_RESULT_HEADER = "## ์ต์ข ์นํจ\n"; | ||
| private static final String WIN_LOSS_RESULT_FORMAT = "%s: %s\n"; |
There was a problem hiding this comment.
OutputView์์๋ ๋ฉ์์ง๋ค์ ๊ฑฐ์ ์ ๋ถ ํ์ผ ์๋จ ์์๋ก ๋นผ๋์
จ๋ค์.
์์ํ ์์ฒด๊ฐ ํญ์ ๋์ ๊ฑด ์๋์ง๋ง,
์ฌํ์ฉ๋์ง๋ ์๊ณ ๊ทธ ์๋ฆฌ์์๋ง ์ฐ์ด๋ ์ถ๋ ฅ ๋ฌธ๊ตฌ๋ผ๋ฉด ์คํ๋ ค ์ฝ๋ ํ๋ฆ์ ๋๊ธฐ๋ ํด์.
์ ๋ ์ฌ๊ธฐ์๋ ์์ํ๋ณด๋ค ๋ฌธ๋งฅ ๊ฐ๊น์ด์ ๋๋ ํธ์ด ๋ ์ฝ๊ธฐ ์ฌ์ ์ ๊ฒ ๊ฐ์์.
์ ๋ง ์ฌ๋ฌ ๊ณณ์์ ๊ฐ์ด ์ฐ์ด๋ ๋ฌธ๊ตฌ๋ง ๋จ๊ธฐ๊ณ ,
๋๋จธ์ง๋ ์ฌ์ฉํ๋ ๋ฉ์๋ ๊ฐ๊น์ด๋ก ๋๋๋ฆฌ๋๊ฑฐ์ฃ .
์ด์ ๋ํ ํ ๋ฆฌ์ ์์งํ ์๊ฐ์ด ๊ถ๊ธํ๋ฐ, ์ด๋ป๊ฒ ์๊ฐํ์๋์?
| public enum CardShape { | ||
| ์คํ์ด๋, ํํธ, ๋ค์ด์๋ชฌ๋, ํด๋ก๋ฒ | ||
| } |
There was a problem hiding this comment.
์ ๋ ์ฝ๋์ ์๋ณ์(enum ์์, ํด๋์ค๋ช
, ๋ฉ์๋๋ช
๋ฑ)๋ ๊ฐ๋ฅํ๋ฉด ์์ด๋ก ํต์ผํ๋ ํธ์ด ๋ ๋ซ๋ค๊ณ ์๊ฐํด์.
์ฃผ์์ด๋ ์ฌ์ฉ์ ์ถ๋ ฅ์ ํ๊ธ์ด์ด๋ ๊ด์ฐฎ์ง๋ง,
์ฝ๋ ์ด๋ฆ๊น์ง ํ๊ธ์ด ๋ค์ด๊ฐ๋ฉด ๊ฒ์ํ๊ฑฐ๋, ํ
์คํธ๋ฅผ ์ฐ๊ฑฐ๋, ์ง์ ํ์ดํํ๋ฉด์ ์ฝ์ ๋ ์กฐ๊ธ์ฉ ๋ถํธํด์ง ์ ์๊ฑฐ๋ ์.
ํนํ CardShape๋ Card, DTO, ํ
์คํธ ๊ณณ๊ณณ์์ ๊ณ์ ์ฐ์ด๋ ์ด๋ฆ์ด๋ผ์,
ํ๊ธ๋ก ๋์์ ๋ ์ป๋ ์ฅ์ ๋ณด๋ค ์์ด๋ก ํต์ผํ์ ๋ ์ฝ๊ธฐ ์ฝ๊ณ ๋ง์ถฐ ๊ฐ๊ธฐ ์ฌ์ด ์ฅ์ ์ด ๋ ์ปค ๋ณด์ฌ์.
Git diff ๊ฒฝ๊ณ ๋ฐฉ์ง๋ฅผ ์ํด ํ์ผ ๋ ๋น์ค์ ์ถ๊ฐํจ
๋ค์ด๊ฐ๋ฉฐ..
์๋ ํ์ธ์, PK! ๋ฆฌ๋ทฐ์ด ํ ๋ฆฌ์ ๋๋ค.
๋ฐ์์ ์์ค์๋ ์๊ฐ ๋ด์ด ๋ฆฌ๋ทฐ์ ์ฐธ์ฌํด์ฃผ์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๊ฐ๊ฐ ์์ด ๋ถ์กฑํ ๋ถ๋ถ๋ค์ ๋ํด ์๋ ค์ฃผ์๊ธธ ๋ถํ ๋๋ฆฝ๋๋ค.
์ต์ ์ ๋คํด ๊ฐ์ ํ๊ณ ๊ณต๋ถํ๊ฒ ์ต๋๋ค. ๐โโ๏ธ
์ฒดํฌ ๋ฆฌ์คํธ
test๋ฅผ ์คํํ์ ๋, ๋ชจ๋ ํ ์คํธ๊ฐ ์ ์์ ์ผ๋ก ํต๊ณผํ๋์?์ด๋ค ๋ถ๋ถ์ ์ง์คํ์ฌ ๋ฆฌ๋ทฐํด์ผ ํ ๊น์?
์ด๋ฒ ๋ฏธ์ ์ ํ์ด ํ๋ก๊ทธ๋๋ฐ ๊ณผ์ ์์ ์น์ดํ ์ค๊ณ ํ ๋ก ์ด ์ค๊ฐ์ต๋๋ค.
๊ทธ ๊ณผ์ ์์ ์ ๊ฐ ๊ฒช์๋ ํจ๋ฌ๋ค์์ ์ถฉ๋๊ณผ ๊ณ ๋ฏผ์ ๋ํด PK์ ์กฐ์ธ์ ๊ตฌํ๊ณ ์ถ์ต๋๋ค.
๊ณ ๋ฏผํ๋ ๋ถ๋ถ
๋์์ธ ํจํด์ ์ ์ฉ, ์ด๋๊น์ง๊ฐ ์ ์ ํ ์ ํ์ธ๊ฐ?
์ด๋ฒ ๋ฏธ์ ์์
Facade,Observer๋ฑ์ ๋์์ธ ํจํด์ ๋์ ํ ๊ฒ์ ์ ์ํด์ค ํ์ด ๋๋ถ์ ํด๋น ํจํด๋ค์ ์ฒ์ ์ ํ๊ฒ ๋์์ต๋๋ค.๊ฐ์ธ์ ์ธ ํ๋จ์ผ๋ก๋ ๋๋ฉ์ธ๊ณผ ๋ทฐ, ์ปจํธ๋กค๋ฌ ์ ๋๊ฐ ์กด์ฌํ๋ ๊ตฌ์กฐ๊ฐ ์ด๋ฒ ๋ฏธ์ ์ ๊ท๋ชจ์์ ๊ฐ์ฅ ์ ํฉํ๋ค๊ณ ์๊ฐํด ํด๋น ์๊ฒฌ์ ๋ํด ๋ฐ๋ ์๊ฒฌ์ ๋ด๊ธฐ๋ ํ๋๋ฐ์.
Facadeํจํด์ ๊ฒฝ์ฐ, ํ์ด๊ฐ ์ฃผ์ฅํ๋ ์๋น์ค ํด๋์ค๋ค์ ํ ๋ฐ๋ก ๋ฌถ๋GameServiceFacade์์ ๊ฐ ์ฃผ์ฅํ๋
Deck,Players๋ฑ์ ํ ๋ฐ๋ก ๋ฌถ๋Gameํด๋์ค๊ฐ ์งํฅํ๋ ๋ฐ๊ฐ ๋น์ทํ๋ค๊ณ ์๊ฐํ์ต๋๋ค.๋ํ, ์๋น์ค ๊ณ์ธต์ ๊ฒฝ์ฐ, ์ค์ ๋ก ์ถํ ์คํ๋ง์์ ์ฑ๊ธํค์ผ๋ก ์์ฑ๋๋ค๋ ์ ์ ๊ณ ๋ คํ์ ๋,
GameService๋ฑ์ ์๋น์ค์์Deck,Players๋ฑ์ ํ๋๋ฉค๋ฒ๋ก ๊ฐ์ง๋ ๊ฒ์ ์ ์ญ ์์์ ์ํ์ฑ ๋๋ฌธ์ ์ ํฉํ์ง ์๋ค๊ณ ํ๋จํ์ต๋๋ค.๊ฒ์์ ๋ก์ง ๋ฐ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์
Game๋๋ฉ์ธ ํด๋์ค๊ฐ ๋งก๋ ๊ฒ์ด ์ ํฉํ ๊ฒ์ด๋ผ๋ ์๊ฐ์ด ๋ค์ด์ ๊ทธ๋ ๊ฒ ์ฝ๋ ๊ตฌํ์ ์งํํ์ต๋๋ค.Observerํจํด์ ๊ฒฝ์ฐ, ์ฒ์์ ์์ฐจ ๋ก์ง์ธ ๋ธ๋์ญ ๋ฏธ์ ์์ ํ์ํ ๋ด์ฉ์ ์๋๋ผ๊ณ ์๊ฐํด์ ๋ฐ๋ํ๋ค๊ฐ,์ด๋ฆฐ ๋ง์์ผ๋ก ์๋ก์ด ์์ญ์ ๋์ ํด๋ณด๋ ๊ฒ์ด ๋ฐฐ์์ ๋ชฉ์ ์ผ๋ก ํ ์ฐํ ์ฝ ๊ณผ์ ์์ ํ์ํ ํ๋๋ผ๊ณ ํ๋จํด
ํด๋น ํจํด์ ์ฑํํ๋ ๋ฐฉ์์ ํฉ์ํด ๊ตฌํ์ ์งํํ์ต๋๋ค.
๊ตฌํ ๊ณผ์ ์์ Controller์ Observer์ ๊ฒฝ๊ณ๊ฐ ๋ชจํธํด์ง๋ ์ง์ ์ด ์๊ฒผ๊ณ , ์ ์ ์๋ฌธ์ ํ์ด๊ฐ ์๋ก์ด ๋ฐฉ์์ ์ ์ํ๋ฉด์
Delegateํจํด์ ๋ ์๋กญ๊ฒ ์ ํ๊ฒ ๋์์ต๋๋ค.์ฒ์์
ObserverImpl๋ก ๊ตฌํํ๋ ๋ฉ์๋๋ฅผ Controller๋ก ์ฎ๊ธฐ๋ฉด์ Controller๊ฐ ํด๋น ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋๋ก ์ฝ๋๋ฅผ ์์ ํ๊ณ ,Observer๋ฅผDelegate์ผ๋ก ์ธํฐํ์ด์ค๋ช ์ ๋ณ๊ฒฝํ๋ฉด์, ์ต์ข ์ ์ผ๋ก ์์(Delegate) ํจํด์ ๊ฐ์ง ์ํคํ ์ฒ๋ฅผ ๋์์ธํ๊ฒ ๋์ต๋๋ค.์ด๋ ๊ฒ ๋ ผ์ํ๊ณ ํ ๋ก ํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ฉด์, ๋ฌธ๋ '๋ด๊ฐ ๋๋ฌด ๊ท์น๊ณผ ํ์ ์ฝ๋งค์ฌ ์ฌ๊ณ ํ๊ณ ์๋ ๊ฒ์ ์๋๊ฐ' ๋ผ๋ ์๊ฐ์ด ๋ค์์ต๋๋ค. ์ ๋ ์ง๊ธ์ ๋ฏธ์ ๊ตฌํ์ด ๊ฒฐ๊ตญ์ ์น ํ๊ฒฝ์ ๋๊ฐ๊ธฐ ์ ๊ฐ์ฒด ์งํฅ์ ๊ตฌ์กฐ๋ฅผ ์ฐ์ตํ๊ธฐ ์ํ ํ๋์ ์ฐ์ต ๊ณผ์ ์ด๋ผ๊ณ ์๊ฐํ๊ณ ,
๊ทธ๋ก ์ธํด ์ฝ์ ํ๊ฒฝ์ด๋ผ๋ 'ํ์ฌ์ ์ํฉ'์ ์ง์คํ์ง ๋ชปํ๊ณ ๊ณ ์ ์ ์ธ ์ฌ๊ณ ๋ฐฉ์์ ๊ฐ์ง๊ฒ ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์์ผ๋ก์ ๋ฏธ์ ์ ์ํ ๋, ์ผ๋ง๋ ์ด๋ฆฐ ์ฌ๊ณ ๋ก ๋ํด์ผ ํ ๊น์?
'Service์ ์ํ๋ฅผ ๋๋ฉด ์น์์ ์ฑ๊ธํค์ผ๋ก ์ ์ญ ์์ํ ๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํด์๋ ์๋๋ค.',
'์์ฐจ ๋ก์ง์ ๊ตฌํํ๋ ํ์ฌ์ ๋ฏธ์ ์์๋ ์ด๋ฒคํธ ๊ธฐ๋ฐ์ ํจํด์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณผํ๋ค.'
์ ๊ฐ ํ๋ ๋ง๋ค์ ๋์๋ณด๋ฉด์ ์ค์ค๋ก๊ฐ ๋์ ์ ์ด๊ณ ์์ ๋ก์ด ์๋๋ค์ ๊ฐ๋ก๋ง๊ณ ์๋ ๊ฒ ๊ฐ๋ค๋ ๋๋์ ๋ฐ์์ต๋๋ค.
๋์์ธ ํจํด์ ์ด๋๊น์ง ์ ์ฉํด๋ณด๋ ๊ฒ์ด ํ๋ช ํ ์ ํ์ผ๊น์?
์ฝ์ ํ๊ฒฝ์์ ์น์ ๊ณ ๋ คํ๋ฉด์ ์น ํ๊ฒฝ์ผ๋ก ์ธํด ์๊ฒจ๋ ๊ด๋ก์ ๊ท์น๋ค๊น์ง ์งํค๋ ๊ฒ์ด ๋ง๋ ์ ํ์ผ๊น์?
์ด ๋ถ๋ถ์ ๋ํ PK์ ์๊ฐ์ด ๊ถ๊ธํฉ๋๋ค!
๋ฆฌํฉํ ๋ง ๋ ์๋ํ๊ณ ์ ํ๋ ์ ํ๋ค, ์ ํฉํ๊ฐ?
Deck์ ๋ถ๋ฆฌ:๊ธฐ์กด์
Deckํด๋์ค๊ฐ ๋ ๊ฐ์ง ์ญํ ์ ๋์์ ํ๊ณ ์๋ค๋ ์๊ฐ์ด ๋๋๋ฐ์,์ฐธ๊ฐ์๋ค์ด ์นด๋๋ฅผ ๋ฝ์๊ฐ ๋ ์ฌ์ฉํ ์ ์ฒด ์นด๋ ๋ฑ๊ณผ ์ฐธ๊ฐ์๋ค ๊ฐ๊ฐ์ธ์ด ๊ฐ์ง๊ณ ์๋ ๊ฐ์ธ ์นด๋ ๋ฑ์ ๋ถ๋ฆฌํ๊ณ ์ถ์ต๋๋ค.
์ ์ฒด ์นด๋ ๋ฑ์ ๊ด๋ฆฌํ๋
Deck๊ณผ ์ฐธ๊ฐ์ ๊ฐ๊ฐ์ธ์ ๋ฑ์ ๊ด๋ฆฌํ๋ Card์ ์ผ๊ธ์ปฌ๋ ์ Cardsํด๋์ค๋ก ๋ถ๋ฆฌํด์์ ์ ๋ฑ์ ์นด๋๋ฅผ ์ถ๊ฐํ๋ ๋ฉ์๋์ ์นด๋์ ์ด ์ ์๋ฅผ ๊ณ์ฐํ๋ ๋ฉ์๋๋ฅผ
Cards์ ๋๋ ค๊ณ ํ๋๋ฐ,ํด๋น ์ฌํญ์ ๋ฆฌํฉํ ๋ง ๋ ์ ์ฉํด๋ด๋ ๊ด์ฐฎ์๊น์?
AceScoreDiscriminator์ฃผ์ ๋ฐ์์ค๊ธฐ:ํ์ฌ Deck ํด๋์ค์ ๋ฉ์๋ ๋ด๋ถ์์
AceScoreDiscriminator์ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํด ์ฌ์ฉํ๊ณ ์๋๋ฐ์, ํด๋น ๋ถ๋ถ์ ์์กด์ฑ ์ฃผ์ ์ผ๋ก ํด๊ฒฐํ์ผ๋ฉด ์ข๊ฒ ๋ค๋ ์๊ฐ์ด ์์ต๋๋ค.ํ์ง๋ง ์ด ๊ฒฝ์ฐ, Deck์ ํ๋ ๋ฉค๋ฒ๋ก
AceScoreDiscriminator๊ตฌํ์ฒด๋ฅผ ๋ฐ์์ค๋ ์์ธ๋ฐํ์ฌ Deck์ด Card์ ์ผ๊ธ์ปฌ๋ ์ ํด๋์ค์ ๊ฐ์ด ์ฐ์ด๊ณ ์๋ ์ํฉ์ด๋ผ,
์ผ๊ธ์ปฌ๋ ์ ํด๋์ค ๋ด์ List๋ฅผ ์ ์ธํ ๋ ๋ค๋ฅธ ํ๋๋ฉค๋ฒ๋ฅผ ๋๋ ๊ฒ์ด ๋ง๋์ง ๋ง์ค์ฌ์ง๋๋ค.
๋ฉ์๋ ํ๋ผ๋ฏธํฐ๋ก ํด๋น ์ธ์คํด์ค๋ฅผ ๋ฐ์์ค๋๋ก ์ฒ๋ฆฌํ๋ ๊ฒ ๋ํ ๊ฒฐ๊ตญ์ Deck์ ๋ฉ์๋๋ค์ ํธ์ถํ๋ Game์์
AceScoreDiscriminator๋ฅผ ์ฃผ์ ๋ฐ์์ค๋๋ก ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๋น์ทํ ์ด์ ๋ก ๋ฐ๋ ค๋์๋๋ฐ์.AceScoreDiscriminator๋ฅผ ์ฃผ์ ๋ฐ์์ค๋ ๊ฒ์ดDeck, ๋ฆฌํฉํ ๋ง ํ๋ผ๋ฉดCards์ฌ๋ ๊ด์ฐฎ์ ๊ฑด๊ฐ์?DTO์ ๋์ , ์ ์ ํ ์ ํ์ธ๊ฐ?
์ ์ง ๋๋ฉ์ธ ์ด๊ณณ์ ๊ณณ์ getter ํธ์ถ์ด ์ ํด์ง Depth๊ฐ ์์ด ํฉ์ด์ ธ์๋ ํ์์ด ๋ถํธํ๊ณ ๊ด๋ฆฌ๊ฐ ์๋๋ค๊ณ ๋๊ปด์ ธ์
์ฐจ๋ผ๋ฆฌ DTO๋ฅผ ๋ง๋ค์ด ๊ด๋ฆฌํ์๋ ์ ์์ ํ๊ฒ ๋์๋๋ฐ์.
์์ ํจํด์ ์ฌ์ฉํ์๋ ์ ์ ๋ํ ์ค๋ฒ ์์ง๋์ด๋ง์ผ๋ก ํ๋จํ๊ณ ๊ฒฝ๊ณํ๋ ๋งํผ, ์ค์ค๋ก๊ฐ ๋ถํธ์ ๋๋ผ๋ ๋ถ๋ถ ๋ํ ๊ฐ์ ์ ํ๋ ๊ฒ์ด ๊ณผ์ฐ ์ ๋นํ์ง ๊ณ ๋ฏผ์ด ๋ง์ด ๋์์ต๋๋ค. ๋ช ํํ ์ด๋ก ์ /ํ์ ์ ์ธ ์ด์ ์์ด, ๋จ์ง 'ํฉ์ด์ ธ ์๋ ๊ฒ์ด ๋ณด๊ธฐ์ ์ข์ง ์๋ค, ์ ์ง๋ณด์ํ๊ธฐ ๋ถํธํ ๊ฑฐ ๊ฐ๋ค' ๋ผ๋ ๊ฐ๋ง์ผ๋ก DTO๋ฅผ ๋ง๋ค์๋ ์ ์์ ํ ์ ํ์ด ์ณ์ ๊ฒ์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
ํ์ ๊ฐ๋ฐํ์๋ ๊ณผ์ ์์ '์ ์ง ์ด๋ฌ๋ฉด ์ ๋ ๊ฑฐ ๊ฐ์๋ฐ' ๋ผ๋ ์๊ฐ์ผ๋ก ๊ตฌ์กฐ์ ๋ณ๊ฒฝ์ด๋ ๋ถ๋ฆฌ๋ฅผ ๊ฒฐ์ ํ์๋ ๊ฒฝ์ฐ๊ฐ ์๋์?
DTO๊น์ง ๊ตฌ์ฑํ ๊ฒ์ด ์ค๋ฒ ์์ง๋์ด๋ง์ธ์ง ์๋์ง ์ค์ค๋ก ํ๋จํ๊ธฐ ํ๋ค์๋ ์ด์ ๊ฐ ๋ญ๊น์?
๊ณ์ํด์ ๊ฐ๋ ์ ๊ธฐ์ด์ ๊ทผ๋ณธ์ ๋ค์ง๋ค ๋ณด๋ฉด ์ค์ค๋ก์ ์ ํ์ ์์ ์ ๊ฐ์ง ์ ์๊ฒ ๋ ๊น์?
ํ์ฌ ์ํคํ ์ฒ์์ DTO์ ๋์ ์ ์ ์ ํ ์ ํ์ด ๋ง์๊น์?