[우아한테크코스 백엔드 5기]프리코스 3주차 로또

SJ H·2022년 11월 14일
0

우아한 테크코스

목록 보기
4/5
post-thumbnail

🎯미션 - 로또

로또 미션 깃허브
과제 제출 코드


🚀 구현한 기능

  • 로또 예외 처리

    • 숫자 문자열 예외 처리
      - [X] 입력 시 처리
      - [X][예외] 인풋 값이 숫자가 아닐 경우
      - [X] 입력 후 처리
      - [X][예외] 1000 단위로 나눠 떨어지지 않을 경우
  • 로또 발행

    • "구입금액을 입력해 주세요." 출력
      • 구입금액을 입력 받는다
      • 구입금액 예외 처리
    • 중복되지 않는 6개의 숫자로 생성
    • (입력값 / 1000)개 만큼 발행
    • "{입력값 / 1000}개만큼 구매했습니다" 출력
    • 발행한 로또 출력
      • 오름차순으로 정렬
  • 당첨 번호 예외 처리

    • 당첨 번호를 ","로 나눠 숫자화 후 예외 처리
      • 입력 시 처리
        • [예외] 숫자가 아닐 경우
      • 입력 후 처리
        • [예외] 1~45 사이의 값이 아닐 경우
        • [예외] 숫자 개수가 6개가 아닐 경우
        • [예외] 숫자에 중복이 있을 경우
    • 보너스 번호 숫자 문자열 예외 처리
      • 입력 시 처리
        • [예외] 숫자가 아닐 경우
      • 입력 후 처리
        • [예외] 1~45 사이의 값이 아닐 경우
        • [예외] 당첨 번호와 중복이 있을 경우
  • 당첨 번호 생성

    • 당첨 번호
      • "당첨 번호를 입력해 주세요." 출력
      • 당첨 번호를 입력 받는다
      • 당첨 번호 예외 처리
      • 당첨 번호 저장
    • 보너스 번호
      • "보너스 번호를 입력해 주세요." 출력
      • 보너스 번호를 받는다.
      • 보너스 번호 예외 처리
      • 보너스 번호 저장
  • 당첨 내역 출력

    • 당첨 갯수 확인
      • 일치 하는 번호 개수에 따라 각 등수의 갯수 증가
    • 당첨 내역 출력
  • 수익률 출력

    • 수익률 계산
      • (당첨 금액 / 구입 금액) * 100 으로 계산
      • 소수점 둘째 자리에서 반올림
    • 계산 후 출력

🪶후기

📚집중하려 했던 것

  1. 메일 내용에 있던클래스 분리하기를 중점적으로 진행했습니다. 자세히 보고 나눌 수 있겠다 싶으면 바로 분리했습니다.
  2. 1번과 마찬가지로 도메인 로직 단위 테스트 작성단위 테스트를 작성할 수 있도록 공부하고, 전부 작성했습니다.
  3. 공통 피드백 의 내용을 지킬 수 있도록 노력했습니다. 각 주차마다 9개 이상의 피드백을 작성해주시는데요. 1주차, 2주차 피드백 모두 지키는 것을 목표로 했습니다.
  4. 3주차 추가 요구사항에 eunm을 사용하라해서, 관련된 자료를 찾아보고 사용했습니다.

소감

기본에 충실하기

이번 3주차의 목표는 기본적으로 주어진 요구 사항, 공통 피드백을 충실하게 지키는 것 이였습니다.

게다가 3주차는 추가된 요구 사항이 여러개라 고생했던 한 주였습니다! 코수타를 듣고, 이번 주차 미션을 진행하며, 요구사항과 피드백을 지키는 것에 충실하자는 목표를 가지고 임했습니다.

특히 이번 주차 미션의 핵심인 클래스(객체)를 분리 하는 것과 도메인 로직에 대한 단위 테스트를 작성하는 것에 집중했습니다. 클래스, 객체에 대해 더 찾아보고 어떤 식으로 나눠야 할지, 어떻게 나누는게 옳은 것인지 끊임없이 고민하고, 생각했습니다.

그래서 하나의 기능을 담당하는 것(로또번호, 당첨번호, 보너스 번호 등)들을 하나씩 분리했습니다. 테스트 코드 같은 경우는, 단위 테스트가 뭔지 테스트 자체에 대해 다시 검색해봤습니다.

게다가 도메인 로직에 대한 테스트 코드 작성 중에, ParmeterizedTest 라는 value 값을 미리 설정해두고 순서대로 실행하게 하는 아주 훌륭한 테스트 방법을 찾아내서 적극적으로 사용했습니다.

자바 Enum 사용

자바 Enum을 사용하라는 말이 있어 Enum에 대해 처음부터 공부하고 적용해봤습니다. 추가적으로 Enum을 더 효율적으로 쓰기 위해 찾아보다, EnumMap 이라는 콜렉션을 알게 되어 정말 편하게 작업을 진행한 것 같습니다.

정말 다양한 기능을 하는데 사용하는건 굉장히 간편했습니다. 그래서인지, Enum을 너무 편하게 생각한 것 아닐까? 제대로 사용하고 있는게 맞을까? 에 대한 고민도 많이 했습니다.

편한대로 쓰다가 안티 패턴 등을 적용시킬 수도 있으니까요! 결과적으로 요구 사항과 이번 3주차의 중점적인 일들을 모두 완료하고 나서, 자세히 생각해보니 로또 당첨 번호와 보너스 번호도 중복되면 안 될 것 같았습니다.

추가적으로 예외 처리를 해주고, 나머지 또 잘못된 부분이 없는가 고민해보고 넘어갔습니다.

2번째 3주차 메일

미션 중간에 3주차 미션에 관해 메일을 한번 더 주셨었죠. 저는 그 말씀의 내용이 UI와 같은 보이는 부분에서 입력시에 검증할 것은 입력 시에 검증하고, 최소한의 검증을 마친 결과값이 들어오면 그 값에 대한 예외 처리를 다시 해주라는 뜻으로 받아들였습니다.

가령 구입금액은 숫자여야 하고, 숫자인게 확인 되면 그 다음으로는 1000원 이상인지, 1000원 단위인지 등을 확인하는 것이죠. 실무에서도 무조건 백엔드에서 모두 검사하는게 아니라, 프론트엔드에서도 검증해주는 최소한의 로직이 있을거라 생각했습니다. 짧은 메세지였지만, 매우 뜻 깊은 얘기를 전달해주신 것 같습니다. 당연하다면 당연한 얘기인데 말이죠!

스터디 '생각하라'

매주 수요일에 진행하기로 한 스터디에서도 정말 많은 피드백과 서로의 얘기를 들으며 크게 성장할 수 있었습니다! 이번 3주차 미션을 하면서도 그 영향을 많이 받은 것 같아요.

만들길 정말 잘했다고 생각이 들었습니다. 10분이나 계셨지만 무난하게 서로 발표를 진행하고 의견을 주고 받았으며, 다음 주차에 대한 각오로 서로의 사기진작도 겸했습니다. 내일 진행될 스터디도 즐겁게 진행할 예정입니다 ㅎㅎㅎ

아쉬운 점

마지막 수익률 출력 시에 세 자리 마다 콤마를 넣는 것을 생각 못했습니다...분명 혼자서 프로그램을 여러번 돌려 보면서 분명 20000000.0% 이렇게 출력이 나오는 것을 분명 확인했음에도 불구하고 눈치채지 못했네요...당첨 내역 출력에 세 자리 수마다 콤마를 넣어줬으면서 왜 수익률은 생각 못했을까요😬
이번 주 모토가기본에 충실하기였던 만큼 더 스스로에게 화가 납니다 ㅠㅠ...
너무 분해서 눈물까지 나려하는데...다시는 이런 일 없게 해야겠습니다..

마무리

이번 주차의 가장 큰 목표인 '기본에 충실하기'를 진행하면서, 당연히 MVC 패턴, OOP, TDD와 같은 것들이 좋은 건 사실이지만 지금 당장 급하게 적용할 필요는 없고, 이해한 것이 있다면 그 부분만 적절하게 사용하는거지 굳이 억지로 쓸 필요는 없다는 생각을 했습니다.

이번 주차 초반에 이것저것 생각하면서 하려니 오히려 제대로 진행이 안되는 느낌이 들었거든요. 특히 수요일에 진행한 코수타에서 무려 박재성 캡틴님이 'TDD는 쓰레기다!' 라는 말씀을 해주셔서, 감사하단 생각이 들었습니다.

압박감이 어느정도 풀린 기분이었거든요ㅠㅠ...물론 정말 쓰레기라는 뜻은 아니겠지만 오히려 현재에 집중할 수 있는 좋은 계기가 되었습니다. 앞으로도 더 열심히 공부하겠습니다!

profile
하하

0개의 댓글