[🚀 사이클1 - 미션 (블랙잭 게임 실행)] 맥스 미션 제출합니다#1016
Open
simhokyung wants to merge 55 commits intowoowacourse:simhokyungfrom
Open
[🚀 사이클1 - 미션 (블랙잭 게임 실행)] 맥스 미션 제출합니다#1016simhokyung wants to merge 55 commits intowoowacourse:simhokyungfrom
simhokyung wants to merge 55 commits intowoowacourse:simhokyungfrom
Conversation
- 딜러 카드 16이하 여부 확인 테스트 구현 - 카드 추가 확인 테스트 구현
- 플레이어의 카드 추가 여부 확인 테스트 - 플레이어의 버스트 여부 확인 테스트
- 모든 플레이어들의 버스트 여부 확인 테스트 작성
- 플레이어 이름 길이가 20자를 초과할 경우 예외 발생 테스트 작성 - Null 혹은 빈 값 입력 시 예외 발생 테스트
- 기존 21 미만일 경우에만 더했던 로직은 21 이하로 변경
jamie9504
requested changes
Mar 9, 2026
jamie9504
left a comment
There was a problem hiding this comment.
안녕하세요, 맥스. 리뷰어 제이미입니다.
만나서 반갑습니다.
코멘트 남겨두었습니다.
| @@ -0,0 +1,65 @@ | |||
| package controller; | |||
There was a problem hiding this comment.
- TDD
- 맥스가 생각하는 TDD란 무엇인가요?
- TDD는 어떠한 장/단점이 있는지 알아보고 간략하게 정리해주세요.
- 인스턴스 변수 개수 제한 / 객체 분리
- 객체가 분리되었을 때, 해당 객체의 의미가 적다고 느껴진다면 해당 객체에게 조금 더 역할과 책임을 부여해주는 것도 좋겠네요.
- 맥스의 생각엔 어떠한 객체들이 현재 별로 역할이 없나요? 그 객체들이 가지고 올 수 있는 역할들이 있을까요?
- 인덴트 depth 1 제한
- 분리를 했을 때, 가독성이 더 좋아졌다고 느껴진 부분과 가독성이 안좋아졌다고 느껴진 부분을 각각 한~두 부분 골라주세요.
- 그렇게 느껴진 이유에 대한 맥스의 생각을 각각 정리해봐주세요.
- 상수 분리
- 정답이 있진 않고, 그 상황과 각자의 선호에 따라 다를 것 같은데, 적어줬던 장점 외에 추가적으로 단점들도 정리해봐주세요.
|
|
||
| public class GameController { | ||
|
|
||
| public void start() { |
There was a problem hiding this comment.
맥스의 애플리케이션에서 Controller의 역할은 무엇인가요?
controller를 start한다는 것은 어떠한 의미인가요?
Comment on lines
+48
to
+51
| if (blackjackGame.shouldDealerDraw()) { | ||
| OutputView.printAddDealerCardMessage(); | ||
| blackjackGame.playDealerTurn(); | ||
| } |
There was a problem hiding this comment.
blackjackGame을 다른 누군가가 가져다가 쓴다면, 위와 같은 순서/방법으로 호출을 해야하는 것을 짐작할 수 있을까요?
|
|
||
| OutputView.printTotalResult(dealerFinalResultDto, totalFinalResultsDto); | ||
| } | ||
| } No newline at end of file |
Comment on lines
+4
to
+5
| private CardNumber cardNumber; | ||
| private CardShape cardShape; |
Comment on lines
+12
to
+13
| @DisplayName("게임 시작 시 딜러와 모든 플레이어는 처음 카드 2장을 받는다") | ||
| void 게임_시작시_딜러와_플레이어에게_카드2장_배분() { |
There was a problem hiding this comment.
DisplayName과 한국어 메서드명을 같이 사용하면 어떠한 이점이 있나요?
| @DisplayName("덱의 카드 개수 확인 테스트 - 52장") | ||
| @Test | ||
| void 생성된_덱의_카드_개수_확인() { | ||
| Deck deck = Deck.createDeck(); |
Comment on lines
+38
to
+40
| private static String getDealerCardStatus(ResultDto resultDto) { | ||
| return resultDto.cards().getFirst(); | ||
| } |
There was a problem hiding this comment.
이건 뷰 로직일까요?
만약 해당 뷰를 다른 개발자가 다른 뷰로 대체한다면, 블랙잭 게임은 잘 동작할 수 있을까요?
| import util.NameParser; | ||
|
|
||
| public class InputView { | ||
| private static final Scanner scanner = new Scanner(System.in); |
|
|
||
| import java.util.List; | ||
|
|
||
| public abstract class Participant { |
There was a problem hiding this comment.
해당 애플리케이션에서 상속을 사용했을 때 어떠한 장/단점이 있었나요?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
개요
안녕하세요, 제이미!
이번 블랙잭 미션을 수행한 맥스입니다.
이번 미션은 처음으로 페어 프로그래밍을 진행하며 구현해본 과제라, 부족한 점이 많았을 것이라 생각합니다.
마구마구 피드백을 해주시면 감사하겠습니다!
체크 리스트
test를 실행했을 때, 모든 테스트가 정상적으로 통과했나요?어떤 부분에 집중하여 리뷰해야 할까요?
1. TDD를 실제 개발 흐름에 적용하는 방식에 대한 고민
과제 요구사항에 맞춰 테스트를 먼저 작성하면서 개발해보려고 했지만, 실제로는 TDD를 어떻게 시작해야 하는지 고민이 되었습니다. 막상 테스트부터 작성하려고 하면 어떤 객체가 필요한지, 외부에 어떤 메서드를 제공해야 하는지를 먼저 정해야 했고, 그 과정에서 자연스럽게 설계에 대한 고민이 먼저 커졌습니다.
그러다 보니 실제 흐름은 객체의 책임과 구조를 어느 정도 정리한 뒤 그에 맞는 테스트를 작성하는 쪽에 가까웠습니다.
이 과정에서 들었던 고민은, 어차피 설계를 먼저 충분히 고민한 뒤 테스트 코드를 작성하게 된다면, 그 상태에서 바로 구현을 시작하는 것이 시간적으로 더 효율적인 것은 아닌가 하는 점이었습니다.
질문
2. 인스턴스 변수 개수 제한을 맞추기 위한 객체 분리에 대한 고민
GameController가 게임 진행 규칙까지 너무 많이 알고 있다고 판단해서, 컨트롤러의 책임을 줄이기 위해BlackjackGame도메인을 만들었습니다.이 객체는 기존에 컨트롤러에서 수행하던 초기 카드 분배, 딜러 생성, 플레이어 생성, 카드 추가와 같은 게임 진행 로직을 담당하도록 설계했습니다.
처음에는
BlackjackGame의 필드를Deck,Dealer,Players로 두어 게임 상태를 직접 가지도록 구성했습니다.하지만 과제 요구사항에 따라 인스턴스 변수 개수를 2개 이하로 제한해야 했고, 이 제약을 맞추기 위해
Dealer와Players를GameParticipants라는 별도 객체로 묶었습니다.이 과정에서 요구사항은 충족할 수 있었지만, 한편으로는 제약을 맞추기 위해 객체를 계속 분리하다 보면 클래스 수가 많아지고 구조가 오히려 복잡해질 수 있겠다는 고민이 들었습니다.
질문
3. 인덴트 depth 1 제한을 맞추기 위한 메서드 분리에 대한 고민
과제 요구사항에서 인덴트 depth를 1까지만 허용하고 있어, 중첩된 제어문을 줄이기 위해 메서드를 적극적으로 분리했습니다.
예를 들어
ScoreCalculator를 리팩토링하는 과정에서for문 안에if문이 들어가면 depth 2가 되기 때문에, 이를 피하기 위해 계산 단계를 나누고 일부 조건문을 별도 메서드로 추출했습니다.이렇게 하면 요구사항은 만족시킬 수 있고, 각 메서드의 역할도 더 분명해지는 장점이 있다고 느꼈습니다.
다만 한편으로는 인덴트 depth를 줄이기 위해 메서드를 지나치게 잘게 나누면, 오히려 전체 흐름을 한 번에 파악하기 어려워질 수도 있겠다는 고민이 들었습니다.
질문
4. 상수 분리 기준에 대한 고민
매직 넘버를 줄이고 의미를 명확하게 하기 위해 일부 값을 상수로 분리했습니다.
이 과정에서 상수를 각 클래스 내부 상단에 두는 방식과, 별도의 상수 클래스로 분리하는 방식 중 어떤 기준으로 선택해야 하는지 고민이 들었습니다.
현재는 상수를 사용하는 클래스 내부 상단에 선언해두면, 해당 값을 어디서 사용하는지와 어떤 의미인지 한눈에 같이 볼 수 있어서 가독성 측면에서 더 편하다고 느꼈습니다.
반면 별도의 상수 클래스로 분리하면 공통으로 사용하는 값을 한곳에서 관리할 수 있고, 수정이 필요할 때는 더 편리하다는 장점이 있다고 생각했습니다.
질문
감사합니다!