Code Monkey home page Code Monkey logo

java-lotto's Introduction

로또 미션을 위한 저장소

미션 회고 및 학습 내용

미션 포인트 ⏰

  • Controller, View를 분리하기
  • 객체를 포장하여 역할 단위로 분리하기
  • 객체에 따라 적절한 역할 분배하기
    • LottoCount라는 객체에서, 금액과 수동 로또를 통해 자동 로또의 갯수 생성
    • GameResult라는 객체에서, 통계정보를 참고하여 최종 결과를 만들어냄
  • Factory method 사용하여 생성 및 퍼블릭 인터페이스 관리
    • 객체의 생성을 분리
    • 필요한 형태만을 퍼블릭 인터페이스를 통해 제공(of, from 등등 적절한 네이밍 전략 파악)

학습 내용 📖

  • Factory Method의 사용법 및 적용방법 학습
  • Controller가 View를 어디까지 알아야하는가?
  • 불변객체에 대한 이해 및 사용
  • 원시값을 포장하면 Validation을 객체의 생성과 동시에 할 수 있다.
  • 주석보단, 의도가 드러나는 프로그래밍을 생각해보자.
  • IDE의 도움을 받아 컨벤션을 습관화하자.

아직 어려운 개념들 😂

  • toString()을 통해 화면에 드러나는 정보를 표기하는게 맞을까?
    • toString()은 로그성 데이터를 일반적으로 표현한다.
    • 객체의 값에 접근하여(Getter)를 통해 표현하는 것이 맞다고 생각함.
  • 비즈니스 로직의 실행순서를 Controller가 보장하는 것이 맞을까?

게임 순서

  • 구입 금액을 입력 받는다.

    • 1000단위가 아닌 경우는 예외처리
    • 문자열이 포함되는 경우 예외처리
    • 공백 및 NULL 예외처리
    • 1000원 ~ 100,000원까지만 가능
    • 구입 금액 또한 클래스로 분리하고
      • 기능은 생성자를 통한 검증
      • 장수를 계산해서 보내는 부분도
  • 금액 / 1000 의 갯수만큼 로또를 자동으로 생성 및 출력한다.

    • Number : 각각의 수
      • 1~45 사이의 값인지
      • 문자열이 포함되는 경우 예외처리
      • 공백 및 NULL 예외처리
    • Number를 6개 가지고 있는 로또 한 장을 지칭하는 객체(Lotto)
      • Lotto.size() = 6
      • 중복된 수가 있으면 안된다.
    • Lotto 를 금액 / 1000만큼 생성한다.
      • Lotto를 구매한 만큼 가지고 있는 Lottos 객체를 생성한다.
        • 금액 / 1000 == Lottos.size()
    • 이렇게 생성된 Lottos 를 출력한다.
  • 당첨번호(보너스 번호 제외) 6자리를 , 를 기준으로 분리한다.

    • 싱글톤 ?
    • 당첨번호를 담당하는 WinningLotto 객체를 생성한다.
    • 공백 및 NULL 예외처리
    • 데이터 타입 처리
    • 갯수 6개
    • 번호의 범위
    • 각각 다른 번호인지
  • 보너스 볼 하나를 입력한다

    • 보너스 볼 객체 Bonus
    • Number 하나를 갖는 객체
  • 당첨 통계를 출력한다

    • LottoModel ← Lottos , Winning
    • OutputView
    • Enum 에서 맞힌 갯수, 금액, 몇장인지를 가지는 Enum에서 처리
  • 참고

    • 숫자를 생성할 때 그리고 보너스 넘버를 생성할 때 로직이 겹치니까 해결책으로
      • Validator를 따로 둔다.
      • Number를 상속받는다.

구현 순서

  • 구입 금액 테스트

    • 1000단위가 아닌 경우는 예외처리
    • 문자열이 포함되는 경우 예외처리
    • 공백 및 NULL 예외처리
    • 1000원 ~ 100,000원까지만 가능
    • 장수로 변환하는 매소드 추가
  • Utility 클래스 검증

    • 공백 제거
    • , Parsing 검증
  • Number

    • 1~45 사이의 값인지
    • 문자열이 포함되는 경우 예외처리
    • 공백 및 NULL 예외처리
    • Enum을 통해서 Number 기능을 같이 하는 방안 고려 (현재 static 부분)
  • LottoFactory

  • Lotto

    • Lotto.size() = 6
    • 중복된 수가 있으면 안된다.
  • Lottos

    • Lotto를 구매한 만큼 가지고 있는 Lottos 객체를 생성한다
    • 금액 / 1000 == Lottos.size()
  • WinningLotto

    • 보너스넘버와 WinningNumbers의 값이 겹치지 않아야 한다.
    • BonusNumber (상속 : Number)
    • WinningNumbers
      • 상속받고 있고 (Lotto) : 로직이 같고, 로또와 의미를 구분하기 위함
  • Result

    • 인자 : WinningLotto, Lottos
    • 기능
      • 맞힌 갯수별로 장수 + 수익금 계산
      • 수익률
      • OutputView 보내기
  • 추가 요구사항(수동)

    • 수동으로 구매할 로또의 개수를 입력 받는다.
      • 개수라는 클래스를 두고
        • 음수 예외처리
        • 금액을 초과하는 경우
        • 문자열
        • Null & 공백
        • 금액이랑 비교
    • 수동으로 구매할 로또의 번호를 개수만큼 입력받는다.
      • 기존의 LottoFactory 를 재활용한다.
    • 수동으로 구매할 로또의 개수를 입력 받는다.
      • 개수라는 클래스를 두고
        • 음수 예외처리
        • 금액을 초과하는 경우
        • 문자열
        • Null & 공백
        • 금액이랑 비교
    • 수동으로 구매할 로또의 번호를 개수만큼 입력받는다.
      • 기존의 LottoFactory 를 재활용한다.

프로그래밍 요구사항

  • indent(인덴트, 들여쓰기) depth를 2단계에서 1단계로 줄여라.
    • depth의 경우 if문을 사용하는 경우 1단계의 depth가 증가한다. if문 안에 while문을 사용한다면 depth가 2단계가 된다.
  • else를 사용하지 마라.
  • 메소드의 크기가 최대 10라인을 넘지 않도록 구현한다.
    • method가 한 가지 일만 하도록 최대한 작게 만들어라.
  • 배열 대신 ArrayList를 사용한다.
  • enum을 적용해 프로그래밍을 구현한다.
  • 예외가 발생하는 부분에 대해 자바 Exception을 적용해 예외처리한다.
  • 사용자가 입력한 값에 대한 예외 처리를 철저히 한다.

힌트

  • 로또 자동 생성은 Collections.shuffle() 메소드 활용한다.
  • Collections.sort() 메소드를 활용해 정렬 가능하다.
  • ArrayList의 contains() 메소드를 활용하면 어떤 값이 존재하는지 유무를 판단할 수 있다.

추가 요구 사항

  • 현재 로또 생성기는 자동 생성 기능만 제공한다. 사용자가 수동으로 추첨 번호를 입력할 수 있도록 해야 한다.
  • 입력한 금액, 자동 생성 숫자, 수동 생성 번호를 입력하도록 해야 한다.

java-lotto's People

Contributors

kimsiyoung avatar pobiconan 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.