-
Notifications
You must be signed in to change notification settings - Fork 313
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2단계 - 블랙잭 #780
base: pablo730
Are you sure you want to change the base?
2단계 - 블랙잭 #780
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
창민님 2단계 리뷰 요청주신 코드가 컴파일 에러로인해 실행이 안되는 것으로 보입니다. 😂
해당 내용 확인해서 수정한 뒤 다시 리뷰요청 부탁드릴게요. 🙏
|
||
class BlackJack(val players: Players, val cardDeck: CardDeck) { | ||
init { | ||
repeat(INIT_CARD_DRAW_REPEAT) { players.players.forEach { it.addCard(cardDeck.drawCard()) } } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
player 객체에게 메시지를 보내보면 어떨까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 부분도 같이 확인 부탁드릴게요. 😃
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
창민님 2단계 빠르게 잘 구현해주셨습니다. 👍💯
몇몇 코멘트 남겨두었는데, 확인 부탁드릴게요. 🙏
미션 진행하시면서 잘 이해가 안되거나 어려운 부분 있으시면 언제든지 DM 주세요. 😉
@@ -0,0 +1,17 @@ | |||
package blackjack.domain | |||
|
|||
fun defaultDeckGenerator(): MutableList<Card> { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
반환 타입이 가변리스트군요? 👀
가급적 가변 리스트보다는 불변 리스트를 사용해보면 어떨까요? 😃
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
생성한 Card들을 자주 사용되게 될 것 같은데요.
모든 카드에대해 캐싱해서 재사용하면어떨까요? 😃
또한 이런 관점에서 별도의 DeckGenerator를 만들기보다는 Card
의 상수로 두면 어떨까요?
|
||
class BlackJack(val players: Players, val cardDeck: CardDeck) { | ||
init { | ||
repeat(INIT_CARD_DRAW_REPEAT) { players.players.forEach { it.addCard(cardDeck.drawCard()) } } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 부분도 같이 확인 부탁드릴게요. 😃
@@ -0,0 +1,13 @@ | |||
package blackjack.domain | |||
|
|||
data class CardDeck(val deck: MutableList<Card>) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
CardDeck의 내부 값을 외부에서 변경할 수 없도록해보면 어떨까요? 🤔
|
||
fun drawCard(): Card { | ||
require(deck.isNotEmpty()) { "더이상 카드가 남아있지 않습니다" } | ||
return deck.removeAt(deck.lastIndex) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아래와 같이 에러 메시지에도 상수를 사용하면, 추후 값이 변경되더라도 에러 메시지를 추가로 수정하는 공수가 없을 것 같네요. 😃
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
현실에서 참가자가 카드를 한장 가져가는 것을 어떻게 표현하면 조금 더 역할이 드러날 수 있을까요? 👀
현실 세계에 빗대어서 네이밍을 고려해보시면 어떨까요? 😁
fun toPlayerNamesString(): String { | ||
return players.joinToString(", ") { it.playerName.name } | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Players 객체가 출력을 위한 행위를하고있네요? 🤔
바로 아래로직에서 한 것처럼 InitBlackJackView
에서 출력을 위해 프로퍼티로부터 직접 name을 가져와서 출력을 위한 형태로 변경해보면 어떨까요?
@@ -0,0 +1,38 @@ | |||
package blackjack.view |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Controller클래스도 view 패키지에 위치하고있네요. 👀
view랑은 별도의 패키지에 두는게 조금 좋을 것 같아요. 😃
require(sumCardValues() <= MutableCards.MAX_SUM_CARD_VALUES) { | ||
playerName.name + " Bust! / " + mutableCards.cardsToString() | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
경록님 안녕하세요!
개인 사정으로 인해 리뷰 요청이 너무 늦어졌네요 😭
이번 블랙잭 미션에서 제가 블랙잭 게임에 대해 잘 몰랐던 부분이 있어 알아본 아래 룰이 확실하지 않을 수 있는데요ㅠ
미션에 명시된 "21을 넘지 않을 경우 원한다면 얼마든지 카드를 계속 뽑을 수 있다."와 의미가 일맥 상통한게 아닐까 싶어
이번 미션에서 합이 21을 넘을 경우 플레이어가 즉시 패배하도록 구현했습니다
추가로 1단계에서 리뷰 주셨던 부분들 확인 후 반영해보았습니다, 꼼꼼한 리뷰 감사합니다 🙇
그럼 남은 기간 빠르게 미션 완수할 수 있도록 노력해보겠습니다, 잘 부탁드립니다!