Skip to content

JangYEhoon00/javascript-lotto-8

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

javascript-lotto-precourse

프리코스-로또

이번 미션에서는 도전하고 싶은 부분

  1. MVC 패턴 숙지
  2. Airbnb js 코드 컨벤션 적용
  3. 메서드의 책임 최소화
  4. 테스트 코드 원칙에 의거한 테스트 코드 구현

1. 모델 (Model): 데이터 관리의 핵심

  • 모델의 역할:
    • 데이터 저장 및 관리: 애플리케이션에서 사용하는 데이터를 데이터베이스에 저장하고, 필요할 때 데이터를 가져오거나 수정, 삭제하는 역할을 합니다.
    • 데이터베이스와 상호작용: 데이터베이스와 직접 통신하여 데이터를 처리합니다. (예: 테이블 생성, 데이터 검색, 데이터 삽입 등)
    • 데이터 유효성 검증: 데이터가 올바른 형식인지 확인하고, 잘못된 데이터가 저장되지 않도록 합니다. (예: 이메일 형식 검사, 필수 입력 필드 확인)
    • 비즈니스 로직 처리: 데이터와 관련된 복잡한 규칙이나 계산을 처리합니다. (예: 할인율 계산, 사용자 등급 계산 등)

2. 뷰 (View): 사용자 인터페이스 담당

  • 뷰의 역할:
    • 사용자 인터페이스 생성: 웹 페이지를 구성하는 HTML, CSS, JavaScript 코드를 작성하여 사용자에게 보여지는 화면을 만듭니다.
    • 데이터 출력: 모델에서 가져온 데이터를 사용자에게 보기 좋게 출력합니다.
    • 템플릿 사용: HTML에 Ruby 코드를 추가하여 동적인 웹 페이지를 만듭니다. (ERB, Haml 등의 템플릿 엔진 사용)
    • 사용자 입력 처리: 사용자가 입력한 데이터를 화면에서 처리하고, 컨트롤러에 전달합니다.
  • 뷰의 예시 (Rails):
    • app/views 폴더에 있는 파일 (예: users/index.html.erbposts/show.html.erb)
    • ERB(Embedded Ruby) 문법을 사용하여 HTML 코드 안에 Ruby 코드를 작성할 수 있습니다.
  • 뷰의 특징:
    • 웹 브라우저에 보여지는 HTML, CSS, JavaScript 코드를 포함합니다.
    • 모델에서 가져온 데이터를 예쁘게 표현합니다.
    • 사용자의 입력에 따라 동적으로 웹 페이지를 변경합니다.

뷰를 쉽게 이해하는 방법:

  • 무대 디자이너: 뷰는 마치 무대 디자이너와 같습니다. 사용자에게 보여지는 화면을 디자인하고 꾸밉니다.
  • 프레젠테이션 전문가: 뷰는 데이터를 프레젠테이션하는 전문가입니다. 데이터를 보기 좋게 정리하여 보여줍니다.

3. 컨트롤러 (Controller): 모델과 뷰 연결 담당

  • 컨트롤러의 역할:
    • 사용자 요청 처리: 웹 브라우저에서 온 사용자 요청을 분석하고, 어떤 모델을 사용해야 하는지, 어떤 뷰를 보여줘야 하는지 결정합니다.
    • 모델 호출: 모델을 사용하여 데이터를 가져오거나 변경합니다.
    • 뷰 호출: 데이터를 뷰에 전달하고, 뷰를 실행하여 사용자에게 웹 페이지를 보여줍니다.
    • 흐름 제어: 웹 애플리케이션의 흐름을 제어합니다. (예: 로그인 여부 확인, 사용 권한 확인 등)
    • 데이터 전달: 모델에서 가져온 데이터를 뷰에 전달합니다.
  • 컨트롤러의 예시 (Rails):
    • app/controllers 폴더에 있는 파일 (예: UsersController.rbPostsController.rb)
    • 액션(action)이라고 불리는 메서드를 사용하여 요청을 처리합니다.
  • 컨트롤러의 특징:
    • 모델과 뷰 사이의 중개자 역할을 합니다.
    • 사용자의 요청에 따라 적절한 모델과 뷰를 선택합니다.
    • 웹 애플리케이션의 논리적인 흐름을 제어합니다.

컨트롤러를 쉽게 이해하는 방법:

  • 교통 경찰관: 컨트롤러는 마치 교통 경찰관과 같습니다. 교통 흐름을 제어하고, 필요에 따라 차량(데이터)을 목적지(뷰)로 안내합니다.
  • 매니저: 컨트롤러는 웹 애플리케이션의 매니저와 같습니다. 사용자의 요청을 처리하고, 필요한 작업을 수행합니다.

미션에 따른 역할 구분

  • 1개의 로또를 발행할 때 중복되지 않는 6개의 숫자를 뽑는다. 중복되지 않는 6개의 숫자는 화면에 보여주는 역할만 담당하므로 뷰에 해당
  • 당첨 번호 추첨 시 중복되지 않는 숫자 6개와 보너스 번호 1개를 뽑는다. 화면에 보여주는 역할만 담당하므로 뷰에 해당
  • 당첨은 1등부터 5등까지 있다. 당첨 기준과 금액은 아래와 같다.
    • 1등: 6개 번호 일치 / 2,000,000,000원
    • 2등: 5개 번호 + 보너스 번호 일치 / 30,000,000원
    • 3등: 5개 번호 일치 / 1,500,000원
    • 4등: 4개 번호 일치 / 50,000원
    • 5등: 3개 번호 일치 / 5,000원 등수에 대한 데이터는 상수화 번호를 확인한 다음 일치하는 번호에 따른 값을 출력
  • 로또 구입 금액을 입력하면 구입 금액에 해당하는 만큼 로또를 발행해야 한다. 입력된 값에 따라 데이터를 뷰로 보내기 때문에 있으므로 컨트롤러에 해당
  • 로또 1장의 가격은 1,000원이다. 이건 상수로 묶어서 처리
  • 당첨 번호와 보너스 번호를 입력받는다. 입력된 값에 따라 데이터를 뷰로 보내기 때문에 있으므로 컨트롤러에 해당
  • 사용자가 구매한 로또 번호와 당첨 번호를 비교하여 당첨 내역 및 수익률을 출력하고 로또 게임을 종료한다.
  • 사용자가 잘못된 값을 입력할 경우 "[ERROR]"로 시작하는 메시지와 함께 Error를 발생시키고 해당 메시지를 출력한 다음 해당 지점부터 다시 입력을 받는다.

  • 입력값 숫자로 변경
  • 시행횟수가 0보다 작을경우 또는 0일경우 예외처리
  • 입력금액보다 게임 하는 금액이 클 경우 예외처리
  • 에러 메시지 상수화

Money 클래스에서 해야할일

  • 입력받은 금액을 문자열에서 숫자로 변경
  • 일어날 수 있는 문제에 대한 예외처리
  • 최대 가능 횟수 계산
  • 거스름돈 계산

Lotto 클래스 해야할일

  • 랜덤 번호 생성
  • 생성된 번호 정렬
  • 매직넘버와 생성된 번호를 비교후 불리언 값으로 비교
  • 입력받은 배열을 숫자 배열로 변경

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%