3주차 미션은 로또 게임을 구현하는 것으로, 다음 두 가지 목표가 추가되었다
- 클래스(객체)를 분리하는 연습
- 도메인 로직에 대한 단위 테스트를 작성하는 연습
구입금액을 입력해 주세요.
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 주소🔽
클래스를 분리하고 단위 테스트를 작성해보면서 OOP와 TDD에 조금 더 익숙해질 수 있었다
테스트 커버리지 100%를 목표로 하는 것은 비효율적이듯이, 가독성과 유지보수성에 있어 적절한 선을 찾는 직관이 무엇보다 중요한 것이라는 생각이 들었고, 우테코를 통해 이를 항상 의식하면서 코딩하는 좋은 습관이 생길 것 같다
3주차 공통 피드백
- 함수(메서드) 라인에 대한 기준(15라인)을 넘어간다면 함수 분리를 위한 고민을 한다
- 발생할 수 있는 예외 사항에 대해 고민하는 습관을 들인다
- 비즈니스 로직과 UI 로직을 분리한다 (단일 책임 원칙)
- private class 필드로 객체의 상태를 외부에서 직접 접근하는 방식을 최소화한다
- 객체는 객체스럽게 사용한다. 단순히 상태 값을 꺼내는 용도가 아닌 직접 일하도록 한다
- 필드에 중복이 있거나 불필요한 필드가 없는지 확인해 필드의 수를 최소화한다
- 성공하는 케이스 뿐만 아니라 예외에 대한 케이스도 테스트한다
- 테스트 코드도 코드다. 리팩터링을 통해 개선해 나가야 한다
- 테스트를 위한 코드는 구현 코드에서 분리되어야 한다
- 단위 테스트하기 어려운 코드는 클래스 외부로 분리하는 시도를 해본다
피드백을 받고 OOP에서 요구하는 클래스를 다루는 감각이 여전히 부족하다는 생각이 들었다. private class 필드를 활용한 정보 은닉과 단일 책임 원칙을 적용한 비즈니스/UI 로직 분리 등 .. 개선할 부분이 많다. 다음 미션이 마지막인 만큼 객체를 객체스럽게 다루기 위해 더 고민하고 적용해보도록 하자🤔
본 내용은 우아한테크코스의 프리코스 과정을 바탕으로 작성되었습니다.
'Languages > JavaScript' 카테고리의 다른 글
[HUFS/GnuVil] #22 이벤트 (0) | 2022.11.18 |
---|---|
[HUFS/GnuVil] #21 Set과 Map, 비동기 프로그래밍 (0) | 2022.11.18 |
[HUFS/GnuVil] #20 이터러블, 스프레드 문법, 디스트럭처링 할당 (1) | 2022.11.11 |
[HUFS/GnuVil] #19 DOM (0) | 2022.11.11 |
[HUFS/GnuVil] #18 브라우저의 렌더링 과정 (0) | 2022.11.11 |