-
Notifications
You must be signed in to change notification settings - Fork 389
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단계 미션 제출합니다. #66
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.
안녕하세요, 디디!
리뷰어 화투입니다.
지난 피드백에 대한 반영 매우 잘해주셨어요!
새로운 요구사항도 깔끔하게 잘 구현해주신 것 같아요. 👍
몇가지 피드백 추가했는데 참고 부탁드릴게요. :)
궁금하신 점 있으시면 연락주세요!
src/main/java/model/Bet.java
Outdated
public Bet(double input) { | ||
this.bet = input; | ||
} |
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.
double로 생성할 경우에 대해서도 validate가 필요하지 않을까요??
src/main/java/model/Bet.java
Outdated
} | ||
} | ||
|
||
public Bet MultiplyBet(double ratio) { |
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.
메서드 네이밍 컨벤션 지켜주세요. :)
} | ||
|
||
public String toStringCardHandFirst() { | ||
return cardHand.getCards().get(ZERO).toString(); | ||
return cardHand.getCards().get(FIRST).toString(); | ||
} | ||
|
||
public boolean isHitBound() { |
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의 isMoreThanBlackJack이랑 묶어서 더 카드를 뽑을수 있는지, 없는지를 판단하는 메서드로 추상화 할 수 있을 것 같네요. :)
Dealer, Player가 각자의 룰에 맞춰서 오버라이드 해보면 어떨까요?
src/main/java/model/Result.java
Outdated
if (dealer.isBlackJack()) { | ||
return LOSE; | ||
} | ||
|
||
if (player.isBlackJack()) { | ||
return BLACKJACK; | ||
} | ||
|
||
if (dealer.isBust() && player.isBust()) { | ||
return LOSE; | ||
} |
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, delaer) -> boolean 형태의 람다를 enum값들이 가지도록 해도 될 것 같아요.
enum 값 스스로 자신에게 해당하는 상태인지 판단할 수 있도록이요. :)
import exception.BetRangeException; | ||
import utils.StringUtils; | ||
|
||
public class Bet { |
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.
값객체로 활용하신다면 당장 쓰이진 않더라도 equals, hashCode를 구현하는걸 습관화 하면 좋을 것 같습니다. :)
src/main/java/model/Bet.java
Outdated
return new Bet(bet * ratio); | ||
} | ||
|
||
public double getBet() { |
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.
bet.getBet()은 조금 부자연스럽지 않을까요?
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.
안녕하세요, 디디!
리뷰어 화투입니다. :)
피드백 반영 잘해주셨어요.
이번 단계 머지할게요.
간단한 피드백 추가했는데 참고 부탁드릴게요. :)
BLACKJACK(Constants.BLACK_JACK_RATIO, ((dealer, player) -> | ||
!(dealer.isBlackJack()) && player.isBlackJack()) | ||
), | ||
WIN(Constants.WIN_RATIO, (dealer, player) -> { | ||
if (!player.isBust() && !player.isBlackJack()) { | ||
return dealer.isBust() || dealer.isLowerThan(player); | ||
} | ||
return false; | ||
}), | ||
LOSE(Constants.LOSE_RATIO, (dealer, player) -> { | ||
if (!player.isBlackJack()) { | ||
return player.isBust() | ||
|| (!player.isBust() && !dealer.isBust() && player.isLowerThan(dealer)) | ||
|| (dealer.isBlackJack() && !player.isBlackJack()); | ||
} | ||
return false; | ||
}), | ||
DRAW(Constants.DRAW_RATIO, (dealer, player) -> dealer.isBlackJack() && player.isBlackJack() | ||
|| (!player.isBust() && !dealer.isBust() && player.isSameWith(dealer))); |
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.
생각보다 조건이 복잡하네요. :)
이러한 승패 여부에 대한 로직을 user의 메소드로 가져가는것도 하나의 방법이었을 것 같네요.
void isBustTest() { | ||
assertThat(bustDealer.isBust()).isTrue(); | ||
assertThat(bustPlayer.isBust()).isTrue(); | ||
assertThat(blackJackPlayer.isBust()).isFalse(); | ||
assertThat(notBustPlayer.isBust()).isFalse(); | ||
assertThat(notBustDealer.isBust()).isFalse(); |
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.
테스트는 단위당 하나씩 하도록 해주는게 좋아요.
중간에 테스트 하나가 실패한다면 뒤의 모든 테스트는 앞의 테스트를 수정후 다시 돌릴때까지 검증이 안되니까요. :)
지난 피드백도 반영 잘 했는지 봐주셨으면 좋겠습니다!
부족한 부분 많이 지적해주세요!
블랙잭 Result를 계산할 때 블랙잭인 경우와 bust인 경우를 다수의 if문이 아닌 다른 방법으로 나눌 수 있는 방법을 찾지 못했습니다. 좋은 방법을 알려주신다면 공부 해보고 반영하겠습니다!