Languages/JavaScript

[우아한테크코스/프리코스] #3 로또

성중 2022. 11. 16. 15:59

3주차 미션은 로또 게임을 구현하는 것으로, 다음 두 가지 목표가 추가되었다

  1. 클래스(객체)를 분리하는 연습
  2. 도메인 로직에 대한 단위 테스트를 작성하는 연습
구입금액을 입력해 주세요.
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%입니다.

이런 느낌으로 진행되는 게임이다

딱 봐도 숫자 야구에 비해 신경 쓸 부분이 많아 보인다🥲

 

이번에도 MissionUtils 라이브러리를 사용해야 하며 추가된 요구사항은 다음과 같다

  • 함수(또는 메서드)의 길이가 15라인을 넘어가지 않도록 구현한다
  • else를 지양한다. 값을 early return 하거나 switch문을 사용해보자
  • 도메인 로직에 단위 테스트를 구현한다. UI 로직에 대한 단위 테스트는 제외한다

 

이번에도 기능 목록을 정리하고 가보자!

 

정리한 로또 기능 목록


Pull Request 주소🔽

 

[로또] 김성중 미션 제출합니다. by joseph-106 · Pull Request #74 · woowacourse-precourse/javascript-lotto

 

github.com

 

클래스를 분리하고 단위 테스트를 작성해보면서 OOP와 TDD에 조금 더 익숙해질 수 있었다

 

테스트 커버리지 100%를 목표로 하는 것은 비효율적이듯이, 가독성과 유지보수성에 있어 적절한 선을 찾는 직관이 무엇보다 중요한 것이라는 생각이 들었고, 우테코를 통해 이를 항상 의식하면서 코딩하는 좋은 습관이 생길 것 같다

 

3주차 공통 피드백
  • 함수(메서드) 라인에 대한 기준(15라인)을 넘어간다면 함수 분리를 위한 고민을 한다
  • 발생할 수 있는 예외 사항에 대해 고민하는 습관을 들인다
  • 비즈니스 로직과 UI 로직을 분리한다 (단일 책임 원칙)
  • private class 필드로 객체의 상태를 외부에서 직접 접근하는 방식을 최소화한다
  • 객체는 객체스럽게 사용한다. 단순히 상태 값을 꺼내는 용도가 아닌 직접 일하도록 한다
  • 필드에 중복이 있거나 불필요한 필드가 없는지 확인해 필드의 수를 최소화한다
  • 성공하는 케이스 뿐만 아니라 예외에 대한 케이스도 테스트한다
  • 테스트 코드도 코드다. 리팩터링을 통해 개선해 나가야 한다
  • 테스트를 위한 코드는 구현 코드에서 분리되어야 한다
  • 단위 테스트하기 어려운 코드는 클래스 외부로 분리하는 시도를 해본다

피드백을 받고 OOP에서 요구하는 클래스를 다루는 감각이 여전히 부족하다는 생각이 들었다. private class 필드를 활용한 정보 은닉과 단일 책임 원칙을 적용한 비즈니스/UI 로직 분리 등 .. 개선할 부분이 많다. 다음 미션이 마지막인 만큼 객체를 객체스럽게 다루기 위해 더 고민하고 적용해보도록 하자🤔

 

본 내용은 우아한테크코스의 프리코스 과정을 바탕으로 작성되었습니다.