Skip to content
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

Merged
merged 18 commits into from
Mar 23, 2020

Conversation

fucct
Copy link

@fucct fucct commented Mar 18, 2020

지난 피드백도 반영 잘 했는지 봐주셨으면 좋겠습니다!
부족한 부분 많이 지적해주세요!
블랙잭 Result를 계산할 때 블랙잭인 경우와 bust인 경우를 다수의 if문이 아닌 다른 방법으로 나눌 수 있는 방법을 찾지 못했습니다. 좋은 방법을 알려주신다면 공부 해보고 반영하겠습니다!

Copy link

@phs1116 phs1116 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

안녕하세요, 디디!
리뷰어 화투입니다.
지난 피드백에 대한 반영 매우 잘해주셨어요!
새로운 요구사항도 깔끔하게 잘 구현해주신 것 같아요. 👍
몇가지 피드백 추가했는데 참고 부탁드릴게요. :)
궁금하신 점 있으시면 연락주세요!

Comment on lines 17 to 19
public Bet(double input) {
this.bet = input;
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

double로 생성할 경우에 대해서도 validate가 필요하지 않을까요??

}
}

public Bet MultiplyBet(double ratio) {
Copy link

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() {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

지금 보니 해당 메서드를 Player의 isMoreThanBlackJack이랑 묶어서 더 카드를 뽑을수 있는지, 없는지를 판단하는 메서드로 추상화 할 수 있을 것 같네요. :)
Dealer, Player가 각자의 룰에 맞춰서 오버라이드 해보면 어떨까요?

Comment on lines 30 to 40
if (dealer.isBlackJack()) {
return LOSE;
}

if (player.isBlackJack()) {
return BLACKJACK;
}

if (dealer.isBust() && player.isBust()) {
return LOSE;
}
Copy link

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 {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

값객체로 활용하신다면 당장 쓰이진 않더라도 equals, hashCode를 구현하는걸 습관화 하면 좋을 것 같습니다. :)

return new Bet(bet * ratio);
}

public double getBet() {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bet.getBet()은 조금 부자연스럽지 않을까요?

Copy link

@phs1116 phs1116 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

안녕하세요, 디디!
리뷰어 화투입니다. :)
피드백 반영 잘해주셨어요.
이번 단계 머지할게요.
간단한 피드백 추가했는데 참고 부탁드릴게요. :)

Comment on lines +9 to +27
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)));
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

생각보다 조건이 복잡하네요. :)
이러한 승패 여부에 대한 로직을 user의 메소드로 가져가는것도 하나의 방법이었을 것 같네요.

Comment on lines +51 to +56
void isBustTest() {
assertThat(bustDealer.isBust()).isTrue();
assertThat(bustPlayer.isBust()).isTrue();
assertThat(blackJackPlayer.isBust()).isFalse();
assertThat(notBustPlayer.isBust()).isFalse();
assertThat(notBustDealer.isBust()).isFalse();
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

테스트는 단위당 하나씩 하도록 해주는게 좋아요.
중간에 테스트 하나가 실패한다면 뒤의 모든 테스트는 앞의 테스트를 수정후 다시 돌릴때까지 검증이 안되니까요. :)

@phs1116 phs1116 merged commit 3bd2a67 into woowacourse:fucct Mar 23, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants