[우테코] 우아한테크코스 모바일 안드로이드 6기 - 3주차 프리코스 (로또)

[우테코] 우아한테크코스 모바일 안드로이드 6기 - 3주차 프리코스 (로또)

[GitHub] AgileCatch - 레파지토리 바로가기 Click!

💡과제 진행 소감

이번 과제를 통해 클래스를 분리하는 방법과 도메인 로직에 대한 단위 테스트를 작성하는 방법을 공부했습니다. 기존에는 메인에서 한꺼번에 코드를 작성하고 나중에 분리하는 방식으로 과제를 진행했는데 이번은 함수가 한 가지 기능만 담당하도록 세세히 구현할 기능을 분리하여 구현했습니다.

목표를 달성하기 위해 먼저 README.md를 상세히 작성하여 변경사항을 바로 업데이트하고, 변경사항과 코드의 진행을 바로 나타날 수 있도록 자세히 기록했습니다. 또한, 함수 한 가지가 한 가지 기능을 하며 else를 지양하기 위해, if 문에서 조건을 만족하지 않을 경우 return을 통해 함수를 종료하는 방식으로 구현하였습니다. 이렇게 함으로써 함수의 흐름을 명확하게 하고, 코드를 간결하게 할 수 있었고, 자연스레 제공해줬던 요구사항이 지켜졌던 것 같습니다.

과제를 진행하면서 왜 이렇게 동작을 분리하고, 관리하는 것인지에 대해 공부했는데 역시 코드의 구조를 분리해 더욱 유지보수하기 좋은 동작을 하기 위함임을 알게 되었습니다!

이번 과제를 통해 코드의 구조를 개선하는 방법을 배웠고, 이를 통해 코드를 더욱 효율적으로 작성할 수 있게 되었다고 생각합니다. 앞으로 더 나은 코드를 작성하기 위해 코드의 단위 테스트를 더욱 철저히 작성하여 코드의 품질을 향상시키고, 코드의 구조를 개선하기 위해 필요한 디자인 패턴을 적용할 것입니다. 감사합니다!

🧾 구현할 기능 목록

준비사항: mvc 아키텍처 적용하기

  1. 사용자로부터 구입 금액을 입력받는다.
    • 입력값이 null이아닐때, 숫자만입력 받을 수 있도록 한다.
    • 1000원 단위로 입력 받을 수 있도록 예외처리 한다.
  2. 입력받은 구입 금액에 해당하는 만큼 로또를 발행한다.
  3. 발행된 로또의 번호를 오름차순으로 정렬하여 출력한다.
  4. 당첨 번호를 입력받는다.
    • 1~45까지 중복되지 않는 숫자 6개를 입력받는다.
    • 중복된 숫자를 받은경우 예외처리를한다.
  5. 보너스 번호를 입력받는다.
    • 당첨 번호와 중복되지 않는 번호를 입력받을 수 있도록 한다.
  6. 사용자가 구매한 로또와 당첨 번호를 비교하여 당첨 내역을 출력한다.
    • EnumClass를 사용하여 로또 등수와 상금을 정의 해 주었다.
    • fromMatchCount로 등수와 상금을 찾을 수 있도록 하였다.
  7. 당첨 통계와, 총 수익률을 계산하여 출력한다.
  8. 예외 상황에 대한 처리를 구현한다.
    • 로또 번호의 범위가 1부터 45 사이가 아닌 경우
    • 로또 번호의 입력값이 숫자가 아닌경우
    • 로또 번호가 6개가 아닌경우
  9. 단위테스트 작성
    • Lotto Class 단위테스트 작성
    • ExceptionTest 작성
    • LottoControllerTest 작성

🫱🏻‍🫲🏼 커밋 메세지 컨벤션

TagDescription
[New] :First commit
[Feat] :새로운 기능을 추가
[Fix] :버그 수정
[Design] :CSS 등 사용자 UI 디자인 변경
[Comment] :문서 수정, 필요한 주석 추가 및 변경
[Test] :테스트 코드, 리팩토링 테스트 코드 추가
[Refactor] :코드 리팩토링
[Rename] :파일 또는 폴더 명을 수정하거나 옮기는 작업만인 경우
[Docs] :문서를 추가하고 READEME.md 를 작성한 경우

📢 2주차 공동 피드백 적용사항

💡 새롭게 알게된 사항은 밑줄 처리 하였습니다!

  • README.md를 상세히 작성한다
  • 기능 목록을 재검토한다
    • 예외적인 상황도 기능 목록에 정리
  • 기능 목록을 업데이트한다.
    • 기능을 구현하면서 문서를 계속 업데이트
  • 값을 하드 코딩하지 않는다
  • 구현 순서도 코딩 컨벤션이다
    • 프로퍼티, init블록, 부 생성자, 메서드, 동반 객체순으로 작성
  • 변수 이름에 자료형은 사용하지 않는다
  • 한 함수가 한 가지 기능만 담당하게 한다
  • 함수가 한 가지 기능을 하는지 확인하는 기준을 세운다
  • 테스트를 작성하는 이유에 대해 본인의 경험을 토대로 정리해본다
  • 처음부터 큰 단위의 테스트를 만들지 않는다

🗣️ 추가 요구사항 적용사항

  • 클래스(객체)를 분리하는 연습
  • 도메인 로직에 대한 단위 테스트를 작성하는 연습
  • 함수(또는 메서드)의 길이가 15라인을 넘어가지 않도록 구현한다
  • 함수(또는 메서드)가 한 가지 일만 잘 하도록 구현한다
  • else를 지양한다

© 2023. All rights reserved.

AgileCatch