우아한테크코스 5기 프론트엔드 프리코스 3주차 회고
우아한테크코스 3주차 끝~~~!!!
이제 진짜 얼마 안남았네요 🥲 아쉽습니다...
📌 우아한테크코스 3주차 과제 제출 주소 및 소감
https://github.com/woowacourse-precourse/javascript-lotto/pull/32
📌우아한테크코스 3주차 과제 내용
https://github.com/woowacourse-precourse/javascript-lotto
*과제 내용에 대한 코드나 풀이법에 대해서는 위 과제 내용 링크에 상세히 기재하였으니, 참고하시길 바랍니다.
3주차도 2주차와 동일하게 터미널을 통해서 결과물을 출력하는 미션이였어요.
아마, 이렇게 되면 4주차, 최종 코테도 DOM을 다루는 미션은 나오지 않고
클래스로 미션을 구현하는 형식으로 진행될것이라고 조심스럽게 예상해봅니다.
이번 주차 미션은 로또 당첨 게임~!
일단 미션 주제가 너무 재밌었습니다 ㅋㅋㅋ
구현 다 해놓고 여자친구랑 부모님에게 돌려보게 해봤는데,
다들 재밌어해가지고 여러번을 해보시더라고요 ㅋㅋㅋ
옆에서 보면서 또 저는 뿌듯~ 하게 보고 있고 ㅋㅋㅋ 이게 매력아니겠습니까?
그러다가 입력을 잘못했는데 다음 단계로 넘어가는 예외 상황들도 같이 찾기도 하고요
구현한거 저만 돌려보는 것보다 사람들에게 시켜보는 것이 제가 못보던 부분들도 같이 찾게하는 효과가 있더라고요?
아주 좋았습니다. 이래서 게임들이 베타테스트 이런거 내보고 하나봐요. 적극 활용해야겠습니다.
미션 받은 첫날에는 기.능.목.록 작성에 아주 신경을 많이 썼어요.
저번 2주차때 기능목록의 힘을 맛보고 나서 '이야 이래서 쓰는거 구만~?' 느꼈으니,
당연히 이번에도 놓칠 수 없죠.
https://github.com/soohyun-dev/javascript-lotto/tree/soohyun-dev/docs
제가 이번 미션에서 구현한 기능 목록입니다.
우선 큰 단위로 나누어봤어요.
이번 미션에서의 '클래스 분리' 가 큰 목표로 있었거든요.
저번엔 제가 모듈화를 하지 않고 한 클래스 내에서 모든 기능들을 다 수행하여서 아쉬움이 남았어서
이번에는 기능들을 나눠봐야겠다!! 싶었는데, 딱 클래스 분리가 목표라서 제가 생각한 목표와 일치했어요.
큰 단위로 나눈 기능들은 다 클래스로 나눠서 제작하려고 하였고,
이제 큰 단위 기능내의 작은 기능들이 있잖아요? 이 기능들은 메서드로 분류해서 기능들을 단위별로 수행하게 만들려고 노력했어요.
처음부터 기능목록을 잘 작성해야지! 하고 처음에 임했는데, 나중에 클래스가 여러개 만들어지고 유사한 기능? 굳이 안나누고 메서드로 분류해도 될법한 기능들이 있더라고요.
예를 들면 로또 번호를 생성해주는 기능?
처음에 이걸 클래스로 분류했는데, 나중에는 메서드로 바꿔서 돈을 로또로 바꿔주는 클래스 내에 같이 넣어줬습니다.
처음에 작성한 기능목록이 무조건 확실하다는 생각보다는
이렇게 나중에 수정사항이 생길 수도 있으니 좀 유연하게 접근해야할 것 같더라고요.
물론, 안바뀌는게 최고이긴 합니다!
최종적으로,
이렇게 나누어 봤고요.
크게.
1. 게임을 수행하는 App 클래스
2. 돈을 받으면 로또로 바꿔주는 ChangeLotto 클래스
3. 당첨 번호와 로또를 비교해주는 CompareLotto 클래스
4. 수익율을 계산해주는 Profit 클래스
5. 예외처리를 담당하고 있는 error 패키지 내의
(1) 당첨 번호 입력의 예외 처리를 담당하고 있는 Lotto 클래스
(2) 보너스 번호 입력의 예외 처리를 담당하고 있는 BonusNumber 클래스
(3) 구입 금액의 예외 처리를 담당하고 있는 Puchase 클래스
(4) 위 3가지의 예외 처리를 묶어주고 있는 Exception 클래스
로 나누어 봤습니다.
각각의 클래스가 무엇을 맡고 있는지 클래스 명으로 최대한 드러내려고 하였고,
각 클래스는 자신이 맡고 있는 기능들에만 충실하게 하려고 했습니다.
2주차때
이렇게 딸랑 App 클래스만 가지고 모든 기능을 수행했던 것과는 다르게 기능들을 나누어 보려고 노력했어요.
미흡한 부분들이 많겠지만, 그래도 전보다 성장한 느낌이 나서 뿌듯했습니다 ㅎㅎ
제출 후 안 사실..... Lotto.js 파일은 초기에 주어진 파일이였는데, 함부로 옮겼으면 안됐습니다.....ㅜㅜㅠㅜㅠ
이 부분에서 실수를 했네요 😥
다음 이번 미션의 핵심은 테스트 코드 였습니다!!!!
기본으로 주어진 ApplicationTest 와 LottoTest 를 제외하고 더 추가적으로 테스트들을 작성해보았어요.
추후에 Lotto Test 에도 기능을 추가할 수 있어서 더 추가하였고요.
이번에 중점으로 둘건 그냥 테스트 코드가 아닌 '단위별 테스트코드' 였습니다.
큰 기능 테스트들보다 작은 단위별 테스트들을 돌려보면서 해당 기능들을 구현하고 나서 바로바로 피드백을 받을 수 있었어요.
이게 진짜 아 너무 좋더라고요
효과 아주 톡톡히 봤습니다.
게임을 돌려보면서 모든 기능 확인, 예외처리를 확인하기가 정말 번거로워요.
그리고 큰 단위 기능 테스트에서는 놓칠 수 있는 부분들도 많고요.
근데, 클래스 내의 메서드들을 구현하고 바로바로 테스트 하고 싶을때 테스트를 맞춰서 제작해가지고 돌려보면 바로바로 내가 잘 구현했는지, 기능이 어디까지 잘 수행되는건지를 한눈에 파악할 수 있었어요.
특히, 클래스 단위로 테스트들을 분류한 뒤 메서드로 나눠서 테스트들을 제작하니까 어느 부분에서 오류가 난다! 고쳐라! 이런 피드백을 바로 받을 수 있었다는 점이 정말 좋았습니다.
제가 구현한 기능에 대한 신뢰도도 상승하고요.
Consoel.readline 이나 Console.print 와 같은 테스트는 하지 않아도 된다고 하셔서
최대한 기능 위주로 테스트들을 만들어 보아서 활용하였고
총 34개의 테스트들을 사용했습니다.
물론! 이 테스트들이 다 맞는다고 구현이 확실하냐? 는 장담 못해요.
왜냐면 제가 놓친 부분들도 분명 있을 거라고 생각하거든요.
하지만, 그 갭을 최소한을 줄여줄 수 있다는 점에서 정말 의미있는 것 같습니다.
예외처리 ⛔
이번 미션에서는 예외 처리할 부분도 많았어요.
처음에 생각했던 것보다 예외 처리를 해줘야하는 부분들이 많았기 때문에 계속적으로 추가해줬어요.
2주차 피드백으로 기능 목록을 검토하라. 라고 했었거든요.
계속적으로 추가하여야 한다고.
이 부분에서 특히 그랬던 것 같아요.
위에서 언급했던 것처럼 제가 생각하고 테스트, 게임을 계속 돌려보면서 놓칠 수 있는 부분들도 있기 때문에
게임을 직접 시켜보는 것도 하나의 좋은 방법 같아요.
이번 미션에서는 요구사항을 꼼꼼하게 읽어보고 처리해야할 부분들을 최대한 짐작해서 기능목록에 작성하고 이후 기능들을 구현하면서 추가적으로 발생하는 예외들을 계속적으로 업데이트하는 것이 중요했다고 생각해요.
후기
저는 이번에 주어진 요구사항에 맞게 최대한으로 구현해보자 목표를 삼았어요.
코수타에서 TDD 얘기가 나왔었는데, 당장 요구사항도 잘 지키지 못하면서 그런 시도를 하는 것보다
요구사항을 다 지키는 것을 목적으로 삼으라고
요구사항 다 지키는것도 생각보다 어려울 것이라고요.
진짜 공감했습니다...요구사항 다 지키는 것도 만만치 않아요 😅
미션을 얼마나 꼼꼼하게 잘 이해하고 있는지를 더 중요하게 여기는 것 같았어요
잘하시는 분들 진짜 많아요. PR 보면
와 어떻게 이렇게 풀었지?
와 이걸 이렇게 푸네... 진짜 잘한다 라고 느낀적이 참 많아요.
그 느낌들이 다 동기로 다가오더라고요.
와, 나도 꼭 열심히해서 이렇게 코드 작성해보고 싶다!
이런 마음들이요.
너무 천장을 보지 않고 전날보다 한단계씩 성장하는 저의 모습들이 점점 보이니까 이 프리코스가 진짜 뜻깊게 느껴집니다.
이제, 한 주밖에 남지 않아서 아쉬움이 큰데 다음 미션도 정말 최선을 다해서 구현해보도록 할게요 ~!!
볼품 없던 잉어킹이 고된 시간을 이기고 갸랴도스로 거듭난다는 것을 기억하면서.
여담으로 로또는 정말 살게 못됩니다...^^
제가 5천만원어치 사서 돌려봤는데 3등 2번 나오고 1등, 2등은 나오지도 않더라고요;;
순간, 구현 잘못한줄알고 다 뜯어봤습니다 ㅋㅋㅋㅋㅋㅋㅋㅋ
다음 4주차도 모두 파이팅~!!!! 😚
'성장기록 > 우아한테크코스' 카테고리의 다른 글
우아한테크코스 5기 프론트엔드 프리코스 그 이후 (0) | 2022.11.24 |
---|---|
우아한테크코스 5기 프론트엔드 프리코스 4주차 회고 (0) | 2022.11.23 |
우아한테크코스 5기 프론트엔드 프리코스 2주차 회고 (2) | 2022.11.09 |
우아한테크코스 5기 프론트엔드 프리코스 1주차 회고 (0) | 2022.11.03 |
우아한테크코스 5기 지원 소감 (0) | 2022.10.25 |