오봉이와 함께하는 개발 블로그
우아한테크코스 웹 백엔드 5기 - [3주 차] 프리코스 후기 본문
728x90
미션 - 로또
요구 사항 목록
모든 에러 메시지는 [ERROR]
로 시작한다.
로또 구입 금액을 입력 받는다.
- 1000원 단위로 딱 맞아 떨어지지 않으면 예외 발생 후 에러 메시지
- 즉 나머지가 있으면 예외 발생
- 공백을 포함한 문자가 들어오면 예외 발생 후 에러 메시지
- 숫자만 들어와야 한다.
- 정상 작동하기 때문에 예외로 하지 않겠음.
- empty("")가 들어오면 예외 발생 후 에러 메시지
구입 금액에 맞는 만큼 로또 번호를 출력한다.
당첨 번호를 입력 받는다.
- 번호는 쉼표를 기준으로 구분
- 당첨 번호에 중복이 있다면 예외 발생 후 에러 메시지
- 당첨 번호가 45보다 크거나, 1보다 작다면 예외 발생 후 에러 메시지
- 당첨 번호가 6개가 아니면 예외 발생 후 에러 메시지
- 쉼표(,)가 다섯 개가 아니면 예외 발생 후 에러 메시지
- 당첨 번호에 쉼표를 제외하고 공백을 포함한 문자가 들어오면 예외 발생 후 에러 메시지
- 숫자와 쉼표만 허용한다.
- 첫 번째 입력 값이 쉼표면 예외 발생 후 에러 메시지
보너스 번호를 입력 받는다.
- 번호는 1보다 작거나 45보다 크면 예외 발생 후 에러 메시지
- 보너스 번호는 당첨 번호에 있는 숫자가 입력되면 예외 발생 후 에러 메시지
- 문자(공백 포함) 입력시 예외 발생 후 에러 메시지
당첨 번호와 보너스 번호를 합한 리스트와 구매한 로또 번호를 비교한다.
- 당첨 내역을 출력한다.
- 1 ~ 5등까지만 출력한다.
- 구입 금액 대비 당첨 금액의 수익률을 출력한다.
- 수익률은 소수점 둘째 자리에서 반올림한다.
후기
이번 미션은 2주 차 미션에 비해 난이도가 급격하게 상승했다고 느꼈다.
테스트와 메서드 분리에 조금 더 신경 써야 했으며, 프로그램은 정상 작동 하는데 아래 테스트는 또 통과하지 않았다.
@Test
void 예외_테스트() {
assertSimpleTest(() -> {
runException("1000j");
assertThat(output()).contains(ERROR_MESSAGE);
});
}
어떤 이유인지 몰라도 값을 전달하고 바로 예외가 발생되어 프로그램이 종료되면 테스트가 통과되지 않게 해놓으셨다.
의도를 잘 파악했다면 자신 있겠지만, 의도를 알 수 없기 때문에 자신은 없고 테스트 케이스가 통과하고 제시하신 요구 사항에 맞게 구현을 하긴 했다.
위 테스트는 유저가 로또를 몇 장 구입할 건지에 대한 입력값으로 받는 테스트인데, 그럼 또 당첨 번호와 보너스 번호를 입력할 때도 저런 방식으로 구현을 해야 하는지에 대한 생각이 있었으나, 그럼 해당 부분도 테스트로 만드셨을 것이라 판단되어 입력 즉시 예외가 발생하고 프로그램이 종료되도록 했다.
조금 더 생각을 해보고 리팩토링을 해야 할지 정해야겠다.
가면 갈수록 난이도가 어려워지고 조건이 추가된다.
도메인 로직에 단위 테스트를 적용하는 것과 메서드 분리, Enum을 어떻게 사용하는지가 이번 미션에서 중요하다 판단되어 신경 쓰며 작성했다.
특히 Enum은 함수형 프로그램처럼 해야 좋을지, 객체로 사용하는 것이 좋을지 고민 했는데 결국 객체로 사용했다.
꽤 많은 시간을 사용했고, 4주 차에는 꼬박 일주일이 걸릴 거 같다.
3주 차 피드백이 정말 궁금해진다.
작성 코드는 아래 링크를 참고해 주세요.
728x90
'1상' 카테고리의 다른 글
근황 (0) | 2022.12.06 |
---|---|
출근 준비 (0) | 2022.12.01 |
백수생활 종료(?) (2) | 2022.11.29 |
우아한테크코스 웹 백엔드 5기 - [2주 차] 프리코스 후기 (0) | 2022.11.03 |
우아한테크코스 웹 백엔드 5기 - [1주 차] 프리코스 후기 (0) | 2022.11.01 |
Comments