Conversation
기능 요구사항
- 각 보유 차량 (5대) 렌트할 때 대략적인 이동거리를 입력
- 자동차 객체 생성 시 생성자에 이동거리 주입
- 연료량 계산
- 연료 주입에 필요한 연료량 보고서 생성
프로그래밍 요구사항
- 상속 / 추상 메서드 활용
- 조건문 X
Co-authored-by: judy5050 <qkrgywjd456@naver.com>
Co-authored-by: minchul-son <smc5236@gmail.com>
Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>"
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>"
- 주입 연료량 출력 보고서 정상 동작 여부 확인 Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>"
- 필요 기능 정의 Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>"
- Sonata - K5 - Avante Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>"
- 자동차 추가 (addCar) - 주입 연료량 보고서 출력 (generateReport) Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>"
…utable Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>"
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>"
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
- List<Card> 최종 점수 반환 메서드 작성 Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
- 각 카드 별 점수관련 클래스 Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
- 모든 카드(52개)를 생성시점에 초기화 - 덱에서 한장을 카드를 뽑음 - 덱이 비면 예외 Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
- 카드끼리의 비교를 위해 구현 Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
- 카드를 더 뽑을 수 있는지를 boolean으로 반환하는 canDrawCard() Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
- 가지고있는 cards 객체에서 위임 Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
- 21보다 작다면 한장 더 뽑을 수 있음 Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
- Dealer - Deck - Players Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>"
- Player Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>"
- Card - Cards - Dealer - Deck - Person - Player - Score Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>"
- Players Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>"
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>"
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>"
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>"
- InputView - ResultView Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>"
- 파산 여부 - 블랙잭 점수 (21점) 여부 Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>"
- activePlayer - scoreInfo - matchScore Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>"
- 딜러 / 플레이어 점수 비교 Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>"
- CardNumberTest - DealerTest - DeckTest - PlayersTest - PlayerTest - ScoreBoardTest - ScoreTest Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
- Card - CardNumber - Cards - Dealer - Deck - Person - Player - Players - Score - ScoreBoard Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
- CardInfo - MatchInfo - NameInfo - ScoreInfo Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
- InputView - ResultView Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Co-authored-by: judy5050 <qkrgywjd456@naver.com> Co-authored-by: minchul-son <smc5236@gmail.com> Co-authored-by: kworkbee <g1.tommy.jeon@gmail.com>
Rok93
left a comment
There was a problem hiding this comment.
효정님 안녕하세요. 블랙잭 미션을 함께하게 된 김경록입니다. 🙇♂️
몇몇 코멘트들 남겨두었으니 확인해서 반영해주세요! 🙏
늦어서 정말 죄송합니다. 🙇♂️🙇♂️🥲
이해가 잘 안되거나 어려운 부분은 언제든지 DM주세요! 🙏
| double getDistancePerLiter(); | ||
| double getTripDistance(); | ||
| String getName(); |
There was a problem hiding this comment.
메서드 사이에는 한 줄 띄어서 가독성을 높여주세요! 🙏
| double getDistancePerLiter(); | |
| double getTripDistance(); | |
| String getName(); | |
| double getDistancePerLiter(); | |
| double getTripDistance(); | |
| String getName(); |
| private final int distance; | ||
|
|
||
| public K5(final int distance) { | ||
| this.distance = distance; | ||
| } |
There was a problem hiding this comment.
PassengerCar의 하위 구현체들은 모두 똑같은 상태 값(distance)과 (내부 구현이 완전히 똑같은 ) getTripDistance를 가지는 것 같아요. 👀
이 두 요소는 상위 클래스인 PassengerCar에 구현하면 중복된 코드를 줄일 수 있지 않을까요? 🤔
| private final Players players; | ||
| private final Dealer dealer; |
There was a problem hiding this comment.
Controller는 상태를 가지면 안돼요. 👀
필요하다면 Controller의 메서드 안에서 객체를 직접 생성해서 사용해야해요. 😃
또한 Controller에 비즈니스 로직이 상당수 존재하는 것 같아요. 🙄
players와 dealer를 상태로 가지는 새로운 객체(= BlackJack)를 만들어보면 어떨까요? 🤗
| package blackjack.domain; | ||
|
|
||
| import blackjack.dto.CardInfo; | ||
| import blackjack.dto.MatchInfo; |
| public static final int DEALER_DRAW_LIMIT = 16; | ||
| private static final String DEALER_NAME = "딜러"; | ||
|
|
||
| public Dealer(final String userName,final Cards cards) { |
There was a problem hiding this comment.
습관적으로 코드를 자동 정렬하는 습관을 들이시면 좋아요. 🤗
mac의 경우 ⌘ + ⌥+ L 단축키로 코드 자동 정렬을 할 수 있어요. 😉
| } | ||
|
|
||
| @Override | ||
| public CardInfo openCards() { |
There was a problem hiding this comment.
추가로 도메인 객체의 리턴 값을 DTO로 바로 변환하여 반환하는 것 또한 View에 의존적인 코드라고 생각돼요. 🤔
반환 타입은 List 형태로 전달해보면 어떨까요? 🤔
|
|
||
| @Override | ||
| public boolean canDrawCard() { | ||
| return !cards.blackjack() && !cards.isBust(); |
There was a problem hiding this comment.
Dealer는 cards.totalScore() <= DEALER_DRAW_LIMIT 조건을 만족하면 카드를 draw 할 수 있었어요. 🤗
Player 또한 cards.totalScore() <= 21를 만족하면 카드를 draw할 수 있지 않을까요? 🤔
| } | ||
|
|
||
| public Score compareScore(final Dealer dealer) { | ||
| return Score.judge(cards, dealer.cards); |
There was a problem hiding this comment.
객체의 상태 값에 바로 호출하지 말아주세요! 🙏
가급적 상태 값의 접근 제한자를 private로 둬서 외부에서 직접 접근하지 못하도록 방지해주세요! 😃
상속을 받는 경우 하위 구현체가 이 상태 값을 필요로 할 때가 있을거에요. 이런 경우에는 private 접근 제한자 때문에 이 상태 값에 직접 접근하지 못할거에요. 🥲 이런 경우에는 getter를 통해서 상위 부모 클래스의 상태 값에 접근하는 방법이 있어요. 😉
| players.initializeDeck(deck); | ||
| dealer.initializeDeck(deck); |
There was a problem hiding this comment.
players가 아니라 더 상위 클래스인 Persons로 dealer와 players들을 동시에 묶는다면 이 로직은 persons.initializeDeck(deck);으로 한 번만 호출하도록 바꿔볼 수 있을 것 같아요. 🤗
| @Override | ||
| public boolean equals(Object o) { | ||
| if (this == o) { | ||
| return true; | ||
| } | ||
| if (o == null || getClass() != o.getClass()) { | ||
| return false; | ||
| } | ||
| Card card = (Card) o; | ||
| return suit == card.suit && cardNumber == card.cardNumber; | ||
| } | ||
|
|
||
| @Override | ||
| public int hashCode() { | ||
| return Objects.hash(suit, cardNumber); | ||
| } |
There was a problem hiding this comment.
Card 객체의 동등성을 정의할 필요가 있나요? 🤔
만약 테스트 코드를 위한 equals & hashCode 정의라면 그 방법보다는 getter를 만들어서 상태 값이 실제 결과 값과 같은지 확인하는 테스트 코드로 변경하는 것이 좋다고 생각해요. 🤔
안녕하세요! 경록 리뷰어님 😊
연료주입과 블랙잭을 페어인 민철님,지원님과 함께 구현했습니다.
블랙잭 게임을 해본적이 없어 블랙잭 룰을 찾아보며 구현했는데
이번 미션이 제일 어려웠던거 같네요 😂
리뷰 잘 부탁드립니다. 감사합니다.