- 로또 요구사항을 파악한다.
- 요구사항에 대한 구현을 완료한 후 자신의 github 아이디에 해당하는 브랜치에 Pull Request(이하 PR)를 통해 코드 리뷰 요청을 한다.
- 코드 리뷰 피드백에 대한 개선 작업을 하고 다시 PUSH한다.
- 모든 피드백을 완료하면 다음 단계를 도전하고 앞의 과정을 반복한다.
-
String 클래스 학습
- split()
- contains()
- containsExactly()
- substring()
- charAt()
- StringIndexOutOfBoundsException
- Junit @DisplayName 활용
-
Set Collection 학습
- size()
- contains()
- Junit ParameterizedTest 활용
- TDD/리팩토링 실습
- 프로그래밍 요구사항
- intent depth 1단계
- 메소드 라인 10 이하로 작성
- 메소드가 한 가지 일만 하도록 처리
- else 사용 금지
- 기능 요구사항
- 빈문자열, null일 경우 0 반환
- (예 : “” => 0, null => 0)
- 숫자하나를 문자열로 입력받으면 그대로 반환
- (예 : “1”)
- 숫자 두 개를 컴마(,) 또는 콜론(:)을 구분자로 입력받으면 두 숫자 합 반환'
- (예 : “1,2:3” => 6)
- "//" 와 "\n" 문자 사이 커스텀 구분자
- (예 : “//;\n1;2;3” => 6)
- 예외처리
- 음수
- 숫자 외의 문자
- 빈문자열, null일 경우 0 반환
- 프로그래밍 요구사항
-
Todo 리스트
- 로또 구입 금액을 입력받는다
- 로또를 구매한다
- 로또는 1장에 1000원
- 금액만큼 로또를 자동으로 생성한다
- 지난주 당첨 번호르 입력 받는다
- 당첨 결과를 출력한다
- 로또 1장씩 결과를 찾아 반환
- 결과클래스에 상태값 저장
- 로또 일치수 & 당첨금액 관리하는 enum 클래스를 만든다
-
반영목록
- domain
- LottoNumber - 로또번호 1~45 캐싱 및 유효성 체크
- Lotto - 로또번호 6개를 저장
- LottoFactory - Lotto 객체를 생산하는 클래스
- 자동로또 객체 반환
- 로또번호 String 문자열을 로또객체로 반환(,로 구분)
- Lottos - 구매한 로또 번호들을 가지는 클래스
- Money - 구매금액 관련 클래스
- 1000원 이하면 예외발생
- krw 변환 문자열 반환
- Quantity - 구매수량
- 구매가능 수량 초과시 예외발생
- LottoGame - 로또 상태를 가지는 클래스
- LottoResult - 당첨결과 클래스
- 수익률 반환
- LottoRank - 금액, 등수별 매칭개수를 관리하는 enum 클래스
- controller *[X] App - 입력 및 결과를 제어
- view
- InputView - 구매관련 값을 입력 받는 클래스
- ResultView - 결과를 화면에 출력하는 클래스
- domain
-
리뷰어(김재연 님) 코드리뷰
- 컬렉션 방어적 복사
- 외부에서 객체 조작방지
- 쓸데없는 예외처리 메시지 상수화 의문제기
- 코드만 늘어나고 특별히 이득이 없으므로 상수화된 변수들 제거
- 정적 팩토리 메서드는 생성자 아래 위치하는 것이 관례
- 반영완료
- LottoResult 멤버변수명 변경 제안
- LottoResult.lottoResult -> LottoResult.winningRank
- Optional Null 체크 대신 if문 제안
- if 문 변경 완료
- 캐싱된 LottoNumbers 객체 Thread-safe 제안
- 방어적 복사 적용
- 캐싱 객체 테스트 검증필요
- equals&hashCode 오버라이딩 삭제
- 테스트 코드 반영
- 컬렉션 방어적 복사
-
요구사항
- 보너스 번호를 추가로 입력 받음
- 당첨 통계에 2등 추가
-
반영목록
- View
- InputView
- 보너스번호 입력
- ResultView
- 2등 출력
- InputView
- Domain
- WinningNumber
- 우승로또번호와 보너스 번호를 감싼 객체
- LottoRank
- 2등 매치, 상금 정보
- winningMoney int 형을 Money 객체로 변경
- 상금 합계 기능
- LottoResult
- 생성자 인자 WinningNumber 객체로 변경
- WinningNumber
- Controller
- 보너스 번호
- View
-
리뷰어(김재연 님) 코드리뷰
-
요구사항
-
반영목록
- Domain
- LottoGame.java
- 수동로또 생성자 인자로 추가
- Quantity.java
- 수동번호 멤버변수 및 생성자 인자에 추가
- LottoGame.java
- Controller
- App.java
- 로또 수동 구매 입력 view 추가
- App.java
- View
- InputView.java
- 수동 구매수량 입력
- 수동 구매수량 만큼 로또번호 입력
- ResultView.java
- 수동 / 자동 구매 수량 출력
- InputView.java
- 공통
- 일급컬렉션 및 원시값포장객체의 멤버변수 이름 수정
- Domain
-
코드리뷰 피드백(리뷰어: 김재연 님)
- LottoGame 생성자 파라미터 Lottos manualLottos 네이밍 관련
- 코멘트: LottoGame이 외부 구현을 안다는 가정 하에 나온 이름으로 보여집니다. 실제로 manualLottos가 아닌 값이 입력될 경우 네이밍과 개념이 불일치하여 오히려 개발자에게 혼란을 줄 수 있을 것 같아요!
- 일급컬렉션 및 원시값포장 클래스의 멤버변수명이 일치하는 케이스 수정
- value, values, element, elements와 같은 이름들을 많이 사용한다고 함
- LottoRank.of 메소드 test 케이스 추가
- 2등 (5, true) 외의 케이스
- 로직 수정이 필요해 보임
- 2등 (5, true) 외의 케이스
- LottoGame 생성자 파라미터 Lottos manualLottos 네이밍 관련