GithubHelp home page GithubHelp logo

java-lotto-pro's Introduction

로또

진행 방법

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

온라인 코드 리뷰 과정

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

기능 요구사항

  • 쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열을 전달하는 경우 구분자를 기준으로 분리한 각 숫자의 합을 반환 (예: “” => 0, "1,2" => 3, "1,2,3" => 6, “1,2:3” => 6)
  • 앞의 기본 구분자(쉼표, 콜론)외에 커스텀 구분자를 지정할 수 있다. 커스텀 구분자는 문자열 앞부분의 “//”와 “\n” 사이에 위치하는 문자를 커스텀 구분자로 사용한다.
    예를 들어 “//;\n1;2;3”과 같이 값을 입력할 경우 커스텀 구분자는 세미콜론(;)이며, 결과 값은 6이 반환되어야 한다.
  • 문자열 계산기에 숫자 이외의 값 또는 음수를 전달하는 경우 RuntimeException 예외를 throw한다.
  • 사용자가 수동으로 추첨 번호를 입력 할 수 있도록 해야 한다.
  • 자동 생성 숫자를 입력 받는다.
    • 입력한 자동 생성 숫자가 음수이거나 숫자가 아닌경우 예외 발생
    • 구매 가능한 수량에서 입력한 자동 생성 숫자 만큼 수동 로또를 생성한다.
    • 구매 가능한 수량과 입력한 자동 생성 숫자를 제외한 나머지 수량만큼 자동 로또 생성
  • 수동 생성 번호를 입력 받는다.

프로그래밍 요구사항

  • 규칙 3: 모든 원시값과 문자열을 포장한다.
  • 규칙 5: 줄여쓰지 않는다(축약 금지).
  • 예외 처리를 통해 에러가 발생하지 않도록 한다.
  • indent(들여쓰기) depth를 2단계에서 1단계로 줄여라.
    • depth의 경우 if문을 사용하는 경우 1단계의 depth가 증가한다. if문 안에 while문을 사용한다면 depth가 2단계가 된다.
  • 메소드의 크기가 최대 10라인을 넘지 않도록 구현한다.
    • 메소드가 한 가지 일만 하도록 최대한 작게 만들어라.
  • else를 사용하지 마라.

기능 목록

  • 로또 머신
    • 인자값에 대한 유효성 체크
      • 구매 수량 입력에 대한 유효성 체크
      • 구매 금액에 대한 유효값 체크
    • 구매 금액을 입력 받아 구매 금액을 수량으로 변환한다
    • 수량만큼 로또 티켓을 발급한다
  • 로또 티켓 묶음
    • 로또 티켓을 입력한 수량만큼 생성한다
  • 로또 티켓
    • 로또를 랜덤으로 생성한다
      • 중복 없는 1-45의 숫자 6자리 생성
      • 번호를 오름차순으로 정렬
      • 보너스 번호 생성
    • 로또 번호를 입력 받아 생성한다
    • 우승 로또 티켓
      • 당첨번호에 포함된 번호 입력시 에외 발생
      • 1-45의 숫자가 아닌 경우 에외 발생
    • 숫자를 인자로 생성한다
    • 문자열을 인자로 생성한다
    • 음수 또는 숫자가 아닌 경우 예외 발생
  • 수량
    • 숫자를 인자로 생성한다
    • 음수 또는 숫자가 아닌 경우 예외 발생
  • 입력
    • 구매 금액을 입력 받는다
    • 당첨 번호를 입력 받는다
  • 출력
    • 구매 현황을 출력한다
    • 구매한 로또 번호를 출력한다
    • 당첨 현황을 출력한다
    • 2등을 출력한다
    • 수익률을 출력한다

기능 요구사항

  • 로또 구입 금애을 입력하면 구입 금액에 해당하는 로또를 발급해야한다.
  • 로또 1장의 가격은 1000원이다.
  • 2등을 위해 추가 번호를 하나 더 추첨한다.
  • 당첨 통계에 2등을 추가한다.

프로그래밍 요구사항

  • 모든 기능을 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와 같은 클래스를 추가해 분리한다.
  • 자바 코드 컨벤션을 지키면서 프로그래밍한다.
    참고문서: https://google.github.io/styleguide/javaguide.html 또는 https://myeonguni.tistory.com/1596
  • else 예약어를 쓰지 않는다.
    • 힌트: if 조건절에서 값을 return하는 방식으로 구현하면 else를 사용하지 않아도 된다.
    • else를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다.
  • java enum을 적용해 프로그래밍을 구현한다.
  • 규칙 8: 일급 콜렉션을 쓴다.

java-lotto-pro's People

Contributors

hyeongjukim avatar javajigi avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.