Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[로또] 최윤정 미션 제출합니다. #163

Open
wants to merge 44 commits into
base: main
Choose a base branch
from

Conversation

cbj0010
Copy link

@cbj0010 cbj0010 commented Nov 8, 2023

이번과제를 하면서 디스코드에 올라온 글에 대한 답변을 달았는데 ! 다 같이 보면 좋을 거 같아서 첨부합니다!

⁇객체에 책임을 부여하는 나름의 기준이 있을까요??

⭐️객체지향 설계의 중심에는 메시지가 있습니다! 객체가 메시지를 선택하는게 아니라 ❗️메시지가 객체를 선택하게 해야되는것❗️이 중요한데요.⭐️

저번에 진행했던 자동차 게임을 예시로 들어보겠습니다. 저두 처음에는 음.. 게임을 진행하려면 자동차가 있어야겠고,, 전체 전진 화면을 보여주는 티비가 있어야 겠고,, 티비에 자동차가 전진하는 걸 보여주기 위해서는 자동차List가 있어야겠고...이렇게 생각을 했습니다. 그런데 이렇게 생각을 하는 것은 객체가 메시지를 선택하게 되는 길로 빠지는 것인데요. 그렇다면 메시지가 객체를 선택하는 것은 어떻게 하는걸까요?

게임을 시작해 봅시다. 진행자가 게임을 진행하기 위해서는 자동차가 필요합니다. 그렇다면 허공에 대고 야! 나 자동차 필요해 자동차 줘! 라고 외쳐봅니다.
그러면 거기 있는 사람들 중에서 어? 나 자동차 줄 수 있어!! 라고 대답 할 수 있는 사람이 있을 것 입니다.
여기서 메시지는 "자동차 줘! "입니다. 그리고 그 메시지를 받을 수 있는 사람이 객체가 되는 것이구요.

즉, 이 방법은 What/Who의 반복입니다. 어떤 행위가 필요한지를 먼저 결정하고!(what), 그 후에 이 행위(메시지)를 수행할 객체(who)를 결정하는 것입니다.

이렇게 하려면 메시지를 중심으로 협력을 설계하게 됩니다.

이런식으로 What/Who의 반복을 생각하면서 설계하려고 노력하니 조금 답답함이 줄게 되었습니다! ㅎㅎ


로또 이야기

  • 1등을 오백만명 배출한 로또지점에 오신걸 환영합니다~
  • 나는 오늘 로또를 10장 구매해야지!! 나 꼭 1등 당첨될거야!
  • 나 로또 10장 사야겠다. 음 그럼 얼마 필요하지?
  • 로또 한장에 1000원이네? 그러면 10000원 필요하겠다!
  • 아주머니~ 로또 10장 주세요!
  • 10000원 지불하고 로또 10장 받기 성공~!
  • 나는 당첨번호가 {x,x,x,x,x,x}이렇게랑 보너스는 Y가 나올거 같아!
    내가 받은 로또 10장을 한번 긁어볼까?
    어? 당첨번호가?̊̈-?̊̈
    • 1등 → 헉? 당첨번호가 다 맞잖아?
    • 2등 → 헉? 당첨번호 5개랑 보너스 번호가 맞잖아?
    • 3등 → 헉? 당첨번호 5개가 맞잖아?
    • 4등 → 힝 ㅠ 당첨번호 4개가 맞네
    • 5등 → 그래도 당첨번호 3개나 맞았네!
  • 10장의 당첨이 어떻게 되었지? 한번 나열해볼까?
  • 음 당첨 수익률이 어캐되징 함 보여줘바! 오오~!

로또구입 -> 구입한 로또 개수 조회 -> 구입한 로또 조회 -> 종료

User

  • 몇개의 로또를 살 것 인지 로또 판매 아줌씨한테 알려준다.
  • 로또 번호를 입력받는다. - inputMoney()
    • 당첨번호를 입력한다.- inputLottoNumber()

      • 당첨번호는 ,를 기준으로 나눈다
    • 보너스 번호를 입력한다. - inputBonusNum()

      • 보너스 번호는 1개이며 1~45 사이의 숫자여야한다.
      • 먼저 입력한 당첨 번호와 중복되면 안된다.

로또를 판매하는 아주머니

  • 로또 수량을 체크한다.
    • 구입 금액은 1,000원 단위이며, 1,000원으로 나누어 떨어지지 않는 경우 예외 처리한다.
  • 로또 공장에서 고객이 요구한 로또만큼 가져와서 준다.

Lotto

  • 당첨번호는 6개이다.
  • 1~45 사이의 숫자여야 한다.
  • 중복 숫자는 없어야 한다.
  • 로또 번호는 오름차순으로 정리되어야 한다.
  • ,으로 구별한다.
  • 위의 조건을 지키지 않은 경우 예외를 발생시킨 후 다시 당첨번호를 입력받게 한다.

LottoFactory

  • 1~45개 사이의 6개의 숫자를 생성한다.
  • 중복 숫자는 없어야 한다.
    • 중복 발생시 다시 숫자 랜덤뽑게 하기
  • 로또 번호는 오름차순으로 정리되어야 한다.

Compare

  • 손님과 랜덤 로또 번호를 비교할 수 있다. compare()
    • 로또가 같은 숫자를 포함하고 있으면 당첨이다. checkSameNumber()
      • 3개번호 일치 - 5000원
      • 4개 번호 일치 - 50000원
      • 5개 번호 일치 - 1500000
      • 5개번호+ 보너스 번호 일치 - 3000000
      • 6개 번호 일치 1등 - 2000000000

WinningNumberChecker

  • 몇개가 당첨 되었는지 알 수 있다.

YieldCalculator

  • 수익률을 계산할 수 있다.

interface로 랜덤 숫자 생성 주입
로또 공장에서 고객이 요구한 로또만큼 가져와서 준다.
로또 수량을 체크하고 구입 금액의 조건을 처리함
로또에 중복이 있을 경우와 중복이 없는 경우 오름차순으로 정리 된 제대로 된 예쁜 로또를 만들 수 있다.
로또에 중복이 있을 경우와 중복이 없는 경우 오름차순으로 정리 된 제대로 된 예쁜 로또를 만들 수 있다.
로또에 중복이 있을 경우와 중복이 없는 경우 오름차순으로 정리 된 제대로 된 예쁜 로또를 만들 수 있다.
당첨번호가 6개 일때, 중복숫자가 없을 때, 로또번호 오름차순 정렬, 조건을 지키지 못했을 때 다시 입력받을 수 있도록
1~45 사이의 숫자, 중복체크
제대로 입력하지 않았을 경우 예외처리
만들어낸 로또랑 사용자가 입력한 로또랑 비교해서 몇개가 맞았는지 기록하는 함수 생성
출력 문구 class로 모아두기
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant