🚀 2단계 - 로또(자동)
기능 요구사항
- 로또 구입 금액을 입력하면 구입 금액에 해당하는 로또를 발급해야 한다.
- 로또 1장의 가격은 1000원이다.
구입금액을 입력해 주세요. 14000 14개를 구매했습니다. [8, 21, 23, 41, 42, 43] [3, 5, 11, 16, 32, 38] [7, 11, 16, 35, 36, 44] [1, 8, 11, 31, 41, 42] [13, 14, 16, 38, 42, 45] [7, 11, 30, 40, 42, 43] [2, 13, 22, 32, 38, 45] [23, 25, 33, 36, 39, 41] [1, 3, 5, 14, 22, 45] [5, 9, 38, 41, 43, 44] [2, 8, 9, 18, 19, 21] [13, 14, 18, 21, 23, 35] [17, 21, 29, 37, 42, 45] [3, 8, 27, 30, 35, 44] 지난 주 당첨 번호를 입력해 주세요. 1, 2, 3, 4, 5, 6 당첨 통계 --------- 3개 일치 (5000원)- 1개 4개 일치 (50000원)- 0개 5개 일치 (1500000원)- 0개 6개 일치 (2000000000원)- 0개 총 수익률은 0.35입니다.(기준이 1이기 때문에 결과적으로 손해라는 의미임) 힌트
- 로또 자동 생성은 Collections.shuffle() 메소드 활용한다.
- Collections.sort() 메소드를 활용해 정렬 가능하다.
- ArrayList의 contains() 메소드를 활용하면 어떤 값이 존재하는지 유무를 판단할 수 있다.
프로그래밍 요구사항
- 모든 기능을 TDD로 구현해 단위 테스트가 존재해야 한다. 단, UI(System.out, System.in) 로직은 제외
- 핵심 로직을 구현하는 코드와 UI를 담당하는 로직을 구분한다.
- UI 로직을 InputView, ResultView와 같은 클래스를 추가해 분리한다.
- indent(인덴트, 들여쓰기) depth를 2를 넘지 않도록 구현한다. 1까지만 허용한다.
- 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다.
- 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메소드)를 분리하면 된다.
- 함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현한다.
- 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다.
- 모든 로직에 단위 테스트를 구현한다. 단, UI(System.out, System.in) 로직은 제외
- 핵심 로직을 구현하는 코드와 UI를 담당하는 로직을 구분한다.
- UI 로직을 InputView, ResultView와 같은 클래스를 추가해 분리한다.
- 자바 코드 컨벤션을 지키면서 프로그래밍한다.
- else 예약어를 쓰지 않는다.
- 힌트: if 조건절에서 값을 return하는 방식으로 구현하면 else를 사용하지 않아도 된다.
- else를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다.
기능 목록 및 commit 로그 요구사항
- 기능을 구현하기 전에 README.md 파일에 구현할 기능 목록을 정리해 추가한다.
- git의 commit 단위는 앞 단계에서 README.md 파일에 정리한 기능 목록 단위로 추가한다.
요구 사항 정리
##toDo
1. 구입 금액 입력 받기
- "구입 금액을 입력해주세요" 메세지 출력
- 사용자로부터 금액을 입력받는다.
- "몇개를 구매했습니다." 메세지 출력
2. 당첨 번호 입력 받기
- "지난 주 당첨 번호를 입력해 주세요." 메세지 출력
- 사용자로 부터 6개의 번호를 입력 받는다.
3. 사용자가 입력한 당첨 번호 검증.
- ", " 구분자로 나눈 뒤
- 6개의 수로 이루어져 있는지 확인
4. 지난주 당첨 번호와 구매한 로또의 당첨번호를 비교하는 로직 실행
- 구매한 갯수 만큼 로또 발행
- 발행한 로또 번호 출력
- 구매한 로또를 한 장씩 꺼냄
- 당첨 번호와 비교 후, 일치하는 번호의 갯수를 저장
5. 결과 출력
- "당첨 통계" 메세지 출력
- "--------" 메세지 출력
- "3개 일치 (5000원)- *개" 메세지 출력
- "3개 일치 (5000원)- *개" 메세지 출력
- "3개 일치 (5000원)- *개" 메세지 출력
- "3개 일치 (5000원)- *개" 메세지 출력
- "총 수익률은 *입니다.(기준이 1이기 떄문에 결과적으로 [이익이/손해]라는 의미임)
indent 지키고, tdd로 어떻게 구현할 지 생각하고, 모델을 생각하면서 클래스를 짜려고 하니 생각보다 시간이 너무 오래 걸렸다.
그래도 레이싱 게임 할 때 만큼은 막막하지 않았다.
2주차 시작이 조금 늦었다, 이번주 야근과, 수요일 수업으로 인하여 코드를 좀 늦게 짜버렸다.
내일 한번 더 코드 점검을 한 다음 멘토님께 보내보자.
할 수 있다!
천천히, 그리고 꾸준히
어제의 나보다 앞으로 한 걸음 더 내딛기 위해 열심히 노력하자.
'강의 > TDD, Clean Code with Java 12기' 카테고리의 다른 글
[로또] step1 - 문자열 덧셈 계산기 - 피드백(20일 차) (0) | 2021.08.08 |
---|---|
[로또] step2 - 로또(자동) (18일차) (0) | 2021.08.06 |
[로또] step1 - 문자열 덧셈 계산기 (15일 차) (0) | 2021.08.03 |
Step5 - 자동차 경주(우승자) - 피드백 (15일차) (0) | 2021.08.03 |
Step5 - 자동차 경주(우승자) (14일차) (0) | 2021.08.03 |