Skip to content

Conversation

@inseong01
Copy link

javascript-planetlotto-precourse

공통 예외처리

출력 형식

사용자가 잘못된 값을 입력할 경우 "[ERROR]"로 시작하는 메시지 출력

재입력 방식

오류가 발생한 해당 지점부터 다시 입력

흐름

구입금액을 입력해 주세요.
1000

2개를 구매했습니다.
[8, 11, 13, 21, 22]
[1, 3, 6, 14, 22]

당첨 번호를 입력해 주세요.
1, 2, 3, 4, 5

보너스 번호 번호를 입력해 주세요.
6

당첨 통계
---
5개 일치 (100,000,000원) - 0개
4개 일치, 보너스 번호 일치 (10,000,000원) - 0개
4개 일치 (1,500,000원) - 0개
3개 일치, 보너스 번호 일치 (500,000원) - 0개
2개 일치, 보너스 번호 일치 (5,000원) - 1개
0개 일치 (0원) - 1개
1. 구입금액 입력

2. 구매 로또 수량 출력
3. 구매 로또 번호 출력

4. 당첨 번호 입력

5. 보너스 번호 번호 입력

6. 당첨 통계 계산
7. 통계 출력

기능

  1. 입력 및 유효성 검사

    1. 로또 구입 금액 입력

    2. 로또 번호 입력

      • 1 ~ 30 사이의 숫자 6개 입력 (,으로 구분)
      • 예외 처리
        • 문자가 포함된 경우
        • 숫자가 아닌 경우
        • 1~30 사이의 숫자가 아닌 경우
        • 번호 수량이 5개가 아닌 경우
        • 중복된 숫자가 포함된 경우
    3. 보너스 번호 입력

  2. 출력

    1. 로또 개수 출력

      • 출력 예시

        2개를 구매했습니다.
        [8, 11, 13, 21, 22]
        [1, 3, 6, 14, 22]`
        
      • 출력 설명

        number[][]
        [[ 로또 1 번호 배열 ], [ 로또 2 번호 배열 ] ...]
        
    2. 당첨 통계 출력

      • 출력 예시

        당첨 통계
        ---
        5개 일치 (100,000,000원) - 0개
        4개 일치, 보너스 번호 일치 (10,000,000원) - 0개
        4개 일치 (1,500,000원) - 0개
        3개 일치, 보너스 번호 일치 (500,000원) - 0개
        2개 일치, 보너스 번호 일치 (5,000원) - 1개
        0개 일치 (0원) - 1개
        
      • 출력 설명

        • 당첨 결과를 기반으로 당첨 통계 출력

          Map<number, number> {
            0: 0              // MATCH_0
            1: 0              // MATCH_5
            2: 0              // MATCH_4_BONUS
            3: 0              // MATCH_4
            4: 0              // MATCH_3_BONUS
            5: 0              // MATCH_2_BONUS
          }
          
  3. 핵심 로직

    1. 로또

      • 번호 검증
      • 번호 반환
      • 당첨 결과 key 반환(당첨 번호, 보너스)
    2. 유틸리티 함수

      • 입력 검증
      • Map 기반 key 개수 카운트
      • 재입력
      • 번호 생성
      • 로또 생성

도전 과제 "리팩토링"

  1. 설계

    • MVC 역할이 명확한지
  2. 구현

    • 제한 시간 내 구현했는지

    • 테스트 전부 통과하는지

  3. 코드 품질

    • depth는 2를 넘지 않는지

    • 라인이 15줄을 넘지 않는지

    • 코드를 읽었을 때 이해가 되는지

      • 매서드, 변수명이 명확한지
  4. 테스트

    • 테스트 코드를 통해 구현했는지

    • 테스트 케이스가 다양한지

- 로또 번호 검증
- 넘길 데이터 구조 확인
- 출력 매서드 2개 테스트
- 기능
  - 로또 번호 검증
  - 로또 매칭 결과 key 반환

- 로또 관련 Const 작성
- 유틸리티 구현 기능 추가
- 로또 집계 초기 Map key 배열 제거
  - [0] -> 0
- 로또 매칭 key 배열 기반 로또 당첨 통계 결과(Map) 반환
- 유틸리티 구현 기능 목록 추가
  - 재입력
- action 비동기 실행 오류 발생 시 재실행 및 오류 메시지 출력
- 로또 모델 기능 추가
  - 숫자 반환

- 유틸리티 구현 목록 추가
  - 무작위 번호 생성
  - 구입금액 비례 로또 생성
- 로또 번호 반환
  - 오름차순 적용
- 현금 만큼 생성된 로또 배열 반환
- 예제 테스트 (1/2)
  - 기능 테스트 성공

  - 예외 테스트 실패
    - 500j 입력 시 500으로 정상 숫자 반환 (parseInt 원인)
    - InputView.askAmount 코드 수정 필요 (미션 제약으로 변경 불가)
    - 15:36 예외 테스트 결함 공지, 테스트 중 예외 테스트 항목 제외
- 추가
  - 중복 번호 검증

- 수정
  - 로또 번호 자리수 제한 문구 수정
- 추가
  - 1~30 이내 숫자 검증
- 기능
  - 구현하지 않은 목록 정리
  - 구현 목록 정리

- 도전 목록
  - 도전했던, 도전할 목록 작성
- App 매서드 15 라인 이하 원칙 적용
  - 사용자 로또 생성/출력, 로또 결과 출력 두 개의 매서드로 분리
- 도전 목록 -> 도전 과제 수정
  - 작성하지 않은 도전 방향 "리팩토링" 작성 추가
- GenerateLottoBy
  - 로또 반환 코드 간략화

- CountMapKey -> GetLottoMatchResultMapOf
  - 함수명 수정

- Lotto
  - 매서드명 수
- 로또 Map key
  - LOTTO_RANK 상수화 적용
- "[ERROR]" 문구 삭제
  - Validator 오류 발생 시 전달되는 문구 차이로 인한 오류
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.

1 participant