- 딜러와 플레이어를 관리한다.
- 카드를 한 장 이상 받는다.
- 버스트인지 확인한다.
- 블랙잭인지 확인한다.
- 카드에 적힌 숫자의 합을 계산한다.
- 가진 모든 카드를 조회한다.
- 참가자의 이름을 조회한다.
- ParticipantName (참가자 이름)
- 플레이어의 이름의 앞뒤를 공백을 제거한다.
- 플레이어의 이름은 공백이 들어갈 수 없다.
- 플레이어의 이름은 1자 ~ 20자까지 가능하다.
- ParticipantCard (참가자가 가진 카드)
- 카드를 추가한다.
- 카드에 적힌 숫자의 합을 계산한다.
- 버스트 (카드의 합이 21 초과)인지 확인한다.
- 블랙잭 (카드가 2장이면서, 합이 21)인지 확인한다.
- 모든 카드를 조회한다.
- 베팅 금액이 정수값인지 검증한다.
- 베팅 금액이 1,000원 이상, 100,000,000원 이하인지 검증한다.
- 베팅 금액의 합을 반환한다.
- 베팅 금액의 차를 반환한다.
- 베팅 금액의 곱을 반환한다.
- 딜러와 플레이어를 관리한다.
- 플레이어와 딜러의 동작을 관리한다.
- 플레이어는 '딜러'라는 이름을 가질 수 없다.
- 돈을 베팅한다.
- 베팅한 금액을 그대로 얻는다.
- 베팅한 금액을 잃는다.
- 베팅한 금액의 보너스를 얻는다.
- 카드를 받는다.
- 카드를 한 장 더 받을 수 있는지 판단한다.
- 블랙잭인지 판단한다.
- 버스트인지 판단한다.
- 카드의 점수를 계산한다.
- 점수를 계산한다.
- 돈을 전부 잃는다.
- 플레이어의 수는 1명 ~ 7명까지 가능하다.
- 플레이어의 이름은 중복될 수 없다.
- 첫 번째 카드를 조회한다.
- 돈을 참가자가 잃은만큼 얻는다.
- 돈을 참가자가 얻은 만큼 잃는다.
- 카드를 받는다.
- 카드를 한 장 더 받아야 하는지 판단한다.
- 블랙잭인지 판단한다.
- 버스트인지 판단한다.
- 카드의 점수를 계산한다.
- 점수를 계산한다.
- 돈을 전부 잃는다.
- 52장의 카드 뭉치를 생성한다.
- 카드 한 장을 뽑는다.
- 카드 패턴과 카드 번호를 조합하여, 카드를 생성한다.
- 카드가 Ace인지 확인한다.
- CardPattern (카드 패턴)
- '하트', '스페이드', '다이아', '클로버'를 반환한다.
- CardNumber (카드 번호)
- 2~10, Ace, King, Queen, Jack을 반환한다.
- 카드가 Ace인지 확인한다.
- 카드의 번호를 조회한다.
- 주어진 카드 뭉치를 랜덤으로 섞는다.
- 주어진 카드 뭉치를 섞는다.
- 점수의 합을 계산한다.
- 점수의 차를 계산한다.
- 기준 점수보다 더 큰지 계산한다.
- 기준 점수보다 더 크거나 같은지 계산한다.
- 게임 시작 시, 참가자들에게 카드 2장을 건네준다.
- 첫 턴의 결과를 판단하여 플레이어의 돈을 딜러에게 혹은 플레이어에게 보너스를 준다.
- 참가자가 원한다면 카드 1장을 건네준다.
- 최종적으로 수익을 계산한다.
- 딜러가 추가로 돈을 받을 수 있는지 체크한다.
- 수익률 조건에 따라 베팅 금액을 계산한다.
- 처음에 2장을 받은 후, 딜러가 승리한지 판단하고 돈을 분배한다.
- 처음에 2장을 받은 후, 플레이어가 승리한지 판단하고 돈을 분배한다.
- 최종적으로 딜러가 승리한지 판단하고 돈을 분배한다.
- 최종적으로 플레이어가 승리한지 판단하고 돈을 분배한다.
- 조건에 따라 곱해야 하는 값을 관리한다.
- 플레이어의 이름을 쉼표로 구분하여 입력받는다.
- 일반 참가자가 카드를 한 장 더 받을지에 대한 유무를 입력받는다.
- 게임 시작 시, 플레이어의 카드 정보를 출력한다.
- 카드를 받을지에 대한 여부를 입력하면, 현재 가지고 있는 카드를 출력한다.
- 딜러가 카드를 더 받을지에 대한 여부를 출력한다.
- 게임이 완료되면, 플레이어의 카드 종류와 카드의 합을 출력한다.
- 게임이 완료되면, 각 플레이어의 카드 합을 판단하여 최종 승패를 출력한다.
- 게임을 실행한다.
- DrawCardCommand (사용자 입력 명령어)
- 사용자가 어떤 명령어를 입력했는지 판단한다.
- indent(인덴트, 들여쓰기) depth를 2를 넘지 않도록 구현한다. 1까지만 허용한다.
- 3항 연산자를 쓰지 않는다.
- else 예약어를 쓰지 않는다. (switch/case 포함)
- 모든 기능을 TDD로 구현해 단위 테스트가 존재해야 한다. 단, UI(System.out, System.in) 로직은 제외
- 핵심 로직을 구현하는 코드와 UI를 담당하는 로직을 구분한다.
- 함수(또는 메서드)의 길이가 10라인을 넘어가지 않도록 구현한다.
- 함수(또는 메소드)가 한 가지 일만 하도록 최대한 작게 만들어라.
- 배열 대신 컬렉션을 사용한다.
- 모든 원시 값과 문자열을 포장한다
- 줄여 쓰지 않는다(축약 금지).
- 일급 컬렉션을 쓴다.
- 모든 엔티티를 작게 유지한다.
- 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
- 딜러와 플레이어에서 발생하는 중복 코드를 제거해야 한다.