로또 게임 기능을 구현해야 한다. 로또 게임은 아래와 같은 규칙으로 진행된다.
- 로또 번호의 숫자 범위는 1~45까지이다.
- 1개의 로또를 발행할 때 중복되지 않는 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원
IllegalArgumentException를 발생시키고, "[ERROR]"로 시작하는 에러 메시지를 출력 후 종료한다.구입금액을 입력해 주세요.
8000
8개를 구매했습니다.
[8, 21, 23, 41, 42, 43]
[3, 5, 11, 16, 32, 38]
[7, 11, 16, 35, 36, 44]
[1, 8, 11, 31, 41, 42]
[13, 14, 16, 38, 42, 45]
[7, 11, 30, 40, 42, 43]
[2, 13, 22, 32, 38, 45]
[1, 3, 5, 14, 22, 45]
당첨 번호를 입력해 주세요.
1,2,3,4,5,6
보너스 번호를 입력해 주세요.
7
당첨 통계
---
3개 일치 (5,000원) - 1개
4개 일치 (50,000원) - 0개
5개 일치 (1,500,000원) - 0개
5개 일치, 보너스 볼 일치 (30,000,000원) - 0개
6개 일치 (2,000,000,000원) - 0개
총 수익률은 62.5%입니다.
우선 저번 피드백을 반영하여 정상기능과 예외적인 상황을 나누어 기능목록을 작성해 보았다. 저번 2주차 때 보다 깔끔해졌다. 하지만 예외상황을 자세히 작성하지 못했다.
예를들어
- 보너스 번호와 로또 번호가 중복되는 경우
- 금액이 1000원 이하인 경우
좀 더 생각하고 기능을 정리할 필요성을 느꼈다.
받은 피드백은 함수라인이 15라인이 넘기면 안된다는 요구사항이 있었는데, main 문도 함수인데 신경쓰지 않고 길게 작성했다.
main(){
init()
startGame()
endGame()
}
이런식으로 로직을 짜면 훨씬 깔끔하고 좋을 거 같다.
나의 코드를 보면 application클래스에 비즈니스 로직과 UI 로직이 같이 들어있다.
비즈니스 로직과 UI 로직을 구분하는게 유지보수 하는데 용이해 보인다.
모든 멤버변수에 getter를 생성해 놓고 상태값을 꺼내 그 값으로 객체 외부에서 로직을 수행한다면, 객체가 로직(행동)을 갖고 있는 형태가 아니고 메시지를 주고 받는 형태도 아니게 된다. 또한, 객체 스스로 상태값을 변경하는 것이 아니고, 외부에서 상태값을 변경할 수 있는 위험성도 생길 수 있다.
데이터를 꺼내지(get) 말고 메시지를 던지도록 구조를 바꿔 데이터를 가지는 객체가 일하도록 한다.
이번 공통 피드백 중 객체는 객체스럽게 사용한다가 가장 좋았던 거 같다. 객체를 사용하는데 객체의 특성을 고려하지 않고 사용했다고 생각이 들었다. 남은 주차도 피드백을 반영해 더욱 발전해 나아가겠다.
잘보고갑니다!