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

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

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

💡과제 진행 소감

이번 4주 차 미션에서는 클래스의 역할과 책임을 생각해 보고, 도메인 로직과 UI를 분리하는 방법을 연습했습니다. 미션을 시작하기 전에 3주 차 공통 피드백 문서를 읽고, 사전에 제공된 클래스 예시를 살펴보며 클래스의 역할과 책임을 구체적으로 정리해 차근차근 구현해 나갔던 것 같습니다. 첫번째 미션을 할때와 달리 성장했다고 느낀점은 코드 구조에대해 생각해보지 않고, 하나의 코드에 여러 함수를 모두 작성하였는데, 이제는 구현해야 할 기능을 위주로 UI와 도메인을 나눠 가독성 있고, 구조적인 코딩을 할 수 있게 되었다는 점 인것 같습니다.

미션을 수행하면서 가장 어려웠던 점은 클래스의 역할을 명확히 정의하는 것이었습니다. 많은 데이터를 다루다 보니, 어떻게 UI와 도메인 로직을 분리해야 할까 어렵게 느껴졌지만, 클래스의 책임을 생각해 보고, 각 클래스가 어떤 역할을 수행해야 하는지 구체적으로 정리하면서 조금씩 이해할 수 있었습니다.

특히, 크리스마스 이벤트를 담당하는 Data 로직을 구현하는 부분에서 어려움을 겪었습니다. 여러 가지 이벤트를 한번에 처리해야 했기때문에, 이벤트의 종류와 처리 방법을 구체적으로 정의하는 것이 중요했습니다. 또한, 입력되는 유저의 정보를 저장하고 출력하는 기능을 구현해야 했는데, 이 부분도 처음에는 어떻게 구현해야 할지 막막했습니다. 하지만, 여러 가지 방법을 고민해 보고, 데이터 클래스를 만들어 이벤트의 종류와 처리 방법을 정의했고, 입력되는 유저의 정보를 데이터 클래스에 저장하는 방법으로 문제를 해결할 수 있었습니다. 데이터 클래스를 만들어 관리함으로써 데이터를 일관되게 관리할 수 있어 코드의 재사용성을 더욱 높일 수 있었습니다.

또한, 이번 프로젝트를 진행하면서 발생할 수 있는 모든 예외처리를 생각하면서 구현 하라는 말씀이 가장 기억에 남았습니다. 그렇기 때문에 기능 목록을 작성할 때에도 더욱 예외처리에 대해 미리 고려하며 습관을 들일 수 있도록 하였습니다. 4주 동안 내려주신 피드백을 온전히 제 코드에 녹일 수 있도록 노력했습니다. 사람들과 소통하며 많은것들을 배웠고, 또 알려줄 수 도 있어 뜻 깊은 경험이었습니다. 남은 10개월 동안도 스펀지처럼 흡수하며 성장하는 모습 보여드리고 싶습니다! 최종 코딩테스트때 뵙겠습니다 갑사합니다!

🧾 구현할 기능 목록

준비사항: 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 를 작성한 경우

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

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

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

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

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

© 2023. All rights reserved.

AgileCatch