Skip to content

ssamzag/java-lotto-pro

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

로또

진행 방법

  • 로또 요구사항을 파악한다.
  • 요구사항에 대한 구현을 완료한 후 자신의 github 아이디에 해당하는 브랜치에 Pull Request(이하 PR)를 통해 코드 리뷰 요청을 한다.
  • 코드 리뷰 피드백에 대한 개선 작업을 하고 다시 PUSH한다.
  • 모든 피드백을 완료하면 다음 단계를 도전하고 앞의 과정을 반복한다.

온라인 코드 리뷰 과정

1단계 - 학습 테스트 실습

  • String 클래스 학습

    • split()
    • contains()
    • containsExactly()
    • substring()
    • charAt()
    • StringIndexOutOfBoundsException
    • Junit @DisplayName 활용
  • Set Collection 학습

    • size()
    • contains()
    • Junit ParameterizedTest 활용

2단계 - 문자열 덧셈 계산기

  • TDD/리팩토링 실습
    • 프로그래밍 요구사항
      • intent depth 1단계
      • 메소드 라인 10 이하로 작성
        • 메소드가 한 가지 일만 하도록 처리
      • else 사용 금지
    • 기능 요구사항
      • 빈문자열, null일 경우 0 반환
        • (예 : “” => 0, null => 0)
      • 숫자하나를 문자열로 입력받으면 그대로 반환
        • (예 : “1”)
      • 숫자 두 개를 컴마(,) 또는 콜론(:)을 구분자로 입력받으면 두 숫자 합 반환'
        • (예 : “1,2:3” => 6)
      • "//" 와 "\n" 문자 사이 커스텀 구분자
        • (예 : “//;\n1;2;3” => 6)
      • 예외처리
        • 음수
        • 숫자 외의 문자

3단계 - 로또(자동)

  • 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 - 결과를 화면에 출력하는 클래스
  • 리뷰어(김재연 님) 코드리뷰

    • 컬렉션 방어적 복사
      • 외부에서 객체 조작방지
    • 쓸데없는 예외처리 메시지 상수화 의문제기
      • 코드만 늘어나고 특별히 이득이 없으므로 상수화된 변수들 제거
    • 정적 팩토리 메서드는 생성자 아래 위치하는 것이 관례
      • 반영완료
    • LottoResult 멤버변수명 변경 제안
      • LottoResult.lottoResult -> LottoResult.winningRank
    • Optional Null 체크 대신 if문 제안
      • if 문 변경 완료
    • 캐싱된 LottoNumbers 객체 Thread-safe 제안
      • 방어적 복사 적용
    • 캐싱 객체 테스트 검증필요
      • equals&hashCode 오버라이딩 삭제
      • 테스트 코드 반영

4단계 - 로또(2등)

  • 요구사항

    • 보너스 번호를 추가로 입력 받음
    • 당첨 통계에 2등 추가
  • 반영목록

    • View
      • InputView
        • 보너스번호 입력
      • ResultView
        • 2등 출력
    • Domain
      • WinningNumber
        • 우승로또번호와 보너스 번호를 감싼 객체
      • LottoRank
        • 2등 매치, 상금 정보
        • winningMoney int 형을 Money 객체로 변경
        • 상금 합계 기능
      • LottoResult
        • 생성자 인자 WinningNumber 객체로 변경
    • Controller
      • 보너스 번호
  • 리뷰어(김재연 님) 코드리뷰

    • Map<Integer, LottoNumber> lottoNumbersCache 변수명 변경
      • -> cachedLottoNumberGroup
    • Map 컬렉션 get() -> getOrDefault() 활용
    • for 문 조건식에 계산 메서드 사용 금지 img.png
    • LottoRank.of 메서드 2등 구하는 로직 개선
      • bonus 멤버변수 추가

5단계 - 로또(수동)

  • 요구사항

    • 구매 로또 수량을 입력받음
    • 입력받은 수량만큼 로또번호를 입력받음
      • 로또번호는 문자 , 로 구분

      img_1.png

    • 수동, 자동 구매수량 출력
  • 반영목록

    • Domain
      • LottoGame.java
        • 수동로또 생성자 인자로 추가
      • Quantity.java
        • 수동번호 멤버변수 및 생성자 인자에 추가
    • Controller
      • App.java
        • 로또 수동 구매 입력 view 추가
    • View
      • InputView.java
        • 수동 구매수량 입력
        • 수동 구매수량 만큼 로또번호 입력
      • ResultView.java
        • 수동 / 자동 구매 수량 출력
    • 공통
      • 일급컬렉션 및 원시값포장객체의 멤버변수 이름 수정
  • 코드리뷰 피드백(리뷰어: 김재연 님)

    • LottoGame 생성자 파라미터 Lottos manualLottos 네이밍 관련
      • 코멘트: LottoGame이 외부 구현을 안다는 가정 하에 나온 이름으로 보여집니다. 실제로 manualLottos가 아닌 값이 입력될 경우 네이밍과 개념이 불일치하여 오히려 개발자에게 혼란을 줄 수 있을 것 같아요!
    • 일급컬렉션 및 원시값포장 클래스의 멤버변수명이 일치하는 케이스 수정
      • value, values, element, elements와 같은 이름들을 많이 사용한다고 함
    • LottoRank.of 메소드 test 케이스 추가
      • 2등 (5, true) 외의 케이스
        • 로직 수정이 필요해 보임

About

Step5 Branch

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published