Conversation
Rok93
left a comment
There was a problem hiding this comment.
창민님 2단계 리뷰 요청주신 코드가 컴파일 에러로인해 실행이 안되는 것으로 보입니다. 😂
해당 내용 확인해서 수정한 뒤 다시 리뷰요청 부탁드릴게요. 🙏
|
|
||
| class BlackJack(val players: Players, val cardDeck: CardDeck) { | ||
| init { | ||
| repeat(INIT_CARD_DRAW_REPEAT) { players.players.forEach { it.addCard(cardDeck.drawCard()) } } |
Rok93
left a comment
There was a problem hiding this comment.
창민님 2단계 빠르게 잘 구현해주셨습니다. 👍💯
몇몇 코멘트 남겨두었는데, 확인 부탁드릴게요. 🙏
미션 진행하시면서 잘 이해가 안되거나 어려운 부분 있으시면 언제든지 DM 주세요. 😉
| @@ -0,0 +1,17 @@ | |||
| package blackjack.domain | |||
|
|
|||
| fun defaultDeckGenerator(): MutableList<Card> { | |||
There was a problem hiding this comment.
반환 타입이 가변리스트군요? 👀
가급적 가변 리스트보다는 불변 리스트를 사용해보면 어떨까요? 😃
There was a problem hiding this comment.
생성한 Card들을 자주 사용되게 될 것 같은데요.
모든 카드에대해 캐싱해서 재사용하면어떨까요? 😃
또한 이런 관점에서 별도의 DeckGenerator를 만들기보다는 Card의 상수로 두면 어떨까요?
|
|
||
| class BlackJack(val players: Players, val cardDeck: CardDeck) { | ||
| init { | ||
| repeat(INIT_CARD_DRAW_REPEAT) { players.players.forEach { it.addCard(cardDeck.drawCard()) } } |
| @@ -0,0 +1,13 @@ | |||
| package blackjack.domain | |||
|
|
|||
| data class CardDeck(val deck: MutableList<Card>) { | |||
There was a problem hiding this comment.
CardDeck의 내부 값을 외부에서 변경할 수 없도록해보면 어떨까요? 🤔
|
|
||
| fun drawCard(): Card { | ||
| require(deck.isNotEmpty()) { "더이상 카드가 남아있지 않습니다" } | ||
| return deck.removeAt(deck.lastIndex) |
There was a problem hiding this comment.
removeLast()를 사용하도록 변경해볼 수 있을 것 같아요. 😃
| return deck.removeAt(deck.lastIndex) | |
| return deck.removeLast() |
|
|
||
| data class Players(val players: List<Player>) { | ||
| init { | ||
| require(players.size == PLAYER_COUNT) { "블랙잭 게임에서 플레이어는 2명이어야 합니다" } |
There was a problem hiding this comment.
아래와 같이 에러 메시지에도 상수를 사용하면, 추후 값이 변경되더라도 에러 메시지를 추가로 수정하는 공수가 없을 것 같네요. 😃
| require(players.size == PLAYER_COUNT) { "블랙잭 게임에서 플레이어는 2명이어야 합니다" } | |
| require(players.size == PLAYER_COUNT) { "블랙잭 게임에서 플레이어는 ${PLAYER_COUNT}명이어야 합니다" } |
추가적으로 PLAYER_COUNT는 Players 클래스 내부에서만 사용되는 것 같은데, 접근 제한자를 private로 제한해주시면 좋을 것 같아요. 😁
| KING(10, "K"), | ||
| ; | ||
|
|
||
| fun getNumber(): List<Int> { |
There was a problem hiding this comment.
getNumber의 결과는 사실상 value를 가져오는거니 getValue가 조금 더 적절한 네이밍인 것 같아요. 🤔
value는 의미가 조금 애매해지는 것 같아서 점수와 같은 의미를 가지는 네이밍을 고려해보시면 조금 더 네이밍으로 의도를 드러낼 수 있지 않을까 싶어요. 😁
| package blackjack.domain | ||
|
|
||
| data class Player(val playerName: PlayerName, val mutableCards: MutableCards) { | ||
| fun addCard(card: Card) { |
There was a problem hiding this comment.
현실에서 참가자가 카드를 한장 가져가는 것을 어떻게 표현하면 조금 더 역할이 드러날 수 있을까요? 👀
현실 세계에 빗대어서 네이밍을 고려해보시면 어떨까요? 😁
| fun toPlayerNamesString(): String { | ||
| return players.joinToString(", ") { it.playerName.name } | ||
| } |
There was a problem hiding this comment.
Players 객체가 출력을 위한 행위를하고있네요? 🤔
바로 아래로직에서 한 것처럼 InitBlackJackView에서 출력을 위해 프로퍼티로부터 직접 name을 가져와서 출력을 위한 형태로 변경해보면 어떨까요?
| @@ -0,0 +1,38 @@ | |||
| package blackjack.view | |||
There was a problem hiding this comment.
Controller클래스도 view 패키지에 위치하고있네요. 👀
view랑은 별도의 패키지에 두는게 조금 좋을 것 같아요. 😃
| require(sumCardValues() <= MutableCards.MAX_SUM_CARD_VALUES) { | ||
| playerName.name + " Bust! / " + mutableCards.cardsToString() | ||
| } |

경록님 안녕하세요!
개인 사정으로 인해 리뷰 요청이 너무 늦어졌네요 😭
이번 블랙잭 미션에서 제가 블랙잭 게임에 대해 잘 몰랐던 부분이 있어 알아본 아래 룰이 확실하지 않을 수 있는데요ㅠ
미션에 명시된 "21을 넘지 않을 경우 원한다면 얼마든지 카드를 계속 뽑을 수 있다."와 의미가 일맥 상통한게 아닐까 싶어
이번 미션에서 합이 21을 넘을 경우 플레이어가 즉시 패배하도록 구현했습니다
추가로 1단계에서 리뷰 주셨던 부분들 확인 후 반영해보았습니다, 꼼꼼한 리뷰 감사합니다 🙇
그럼 남은 기간 빠르게 미션 완수할 수 있도록 노력해보겠습니다, 잘 부탁드립니다!