우아한 테크코스 6기 프리코스 3주차 회고

정훈·2023년 11월 9일
0

우테코

목록 보기
7/8

이번주 미션은 로또 게임이다.
요번 3주차는 2주차와 달리 시간이 너무 쫓기다보니, 제대로 요구사항에 맞게 하지 못하였다. (어려웠다는게 맞는 것 같다..)

3주차의 주요 목표는 클래스 분리,단위 테스트 작성 이였다. 2주차 공통 피드백 사항에서도 README에 상세히 작성하라는 글을 보고 하나의 작은 단위테스트를 실행 할 떄 계속해서 docs를 업데이트 해야 되겠구나라고 생각이 들었다.

다른 프로젝트 할 때도 똑같이 해왔지만, 이게 뭔가 나만 느끼는건지 모르겠는데, 프레임워크에 의존하지않고 단순 언어로만 구현을 할려하다보니 뭔가 너무 어색하고 쉽사리 어떻게 해야할지 너무 어려웠다.. 막막했다.

어떻게해야 할지 몰라, 처음부터 엄청나게 작은 단위 함수 테스트 부터 시작했다. 그러면서, 실패케이스와,성공케이스 둘로 나뉘어 테스트코드를 짜며, docs 까지 업데이트를 하면서 진행을 하였지만 도메인 영역에 대한 테스트를 시작할려고 하면 정말이지 손대기가 너무 어려웠다. 왜 인지 모르겠다... 그러다보니 무작정 코드 부터치고 단순히 동작하는 쓰레기를 만들었다...

기능 요구사항


본 미션의 요구사항은 위 사진과 같다. 하지만 본인은 문제를 잘못 이해하여 제출하는 당일랄 급하게 고치다보니 테스트코드는 잘 넘어갔더라도 여러 예외 조건에 대한 처리를 안하였다.

실수한 부분


이 코드가 등수를 매기기 위한 첫번째 코드라고 볼 수 있는데, 매치 카운터가 5개 보너스 카운터가 하나 일때 임의로 보너스카운트는 0, 매치카운터는 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개

당첨 내역을 위 와 같이 보여지게 할려면 어떻게 해야 좋을까? 라는 생각으로고민한 결과 ENUM 을 통해 구현 하였다.

문제의 요구 사항의 맞추기 위해 count라는 필드 변수를 두어 당첨번호와 로또 번호가 count만큼의 개수에 맞게 된다면 등수에 대해 확인 할 수 있지 않을까 라는 생각에 코드를 짜게 되었다.

하지만 위에서 설명한 것 처럼 5등이면서 보너스 1개일때 조건 만 두어 체크를 했다면 .. 3개,4개,5개.. 일때 보너스 번호도 포함되어 있을 수 도 있는데, 단순 하나의 조건만 두었기 때문에.. 제출하고 나서 수정하였다.. 커밋은 안하였지만 아래와 같다 .

  private void lottoCountIncrement(LottoCount lottoCount, int lottoMatchesCount, int bonus) {
        if (lottoCount.getCount() == lottoMatchesCount + bonus) { //요부분 
            lottoCount.incrementMatchesCount();
        }
    }

bouns 번호를 같이 합계를 더해서 계산을 했어야 했는데 ... 하지 않았다... 이제 와서 생각해보면
테스트코드에 중요성이 정말이지 너무나도 느껴졌다.

제출하기전에 리팩토링을 했으면 얼마나 좋았을까..

테스트 코드의 중요성

테스트코드는 각 단위별로 잘 사용을 하고 있는 것 같았지만,점점 시간이 지나 테스트코드에 의존하지 않고 실제 코드에 바로 적용하면서 테스트를 했던 것 같다. 도메인 영역에 테스트를 하는 순간부터 순간 어디서부터 시작을 해야하는지 도통 감을 잡을 수가 없었다.이러한 이유로 바로 실제 코드에 적용했던 것 같다. 하지만 본 미션에서는 테스트코드를 해야 잘 풀릴거다 라는 느낌이 엄청 많이 받았지만, 사람이 경험을 해봐야 다음부터 그러지 않는다는 걸 느꼈고.. 또한 클린코드 아키텍처 책을 읽으면서 들었던 내용인건지,테스트코드에 대해서 학습할때 잠깐 보았던 내용인데, 테스트코드를 작성하지 않고 실제코드를 먼저 적용하고 다시 테스트코드를 작성하게 된 다면 거의 80-90퍼 이상 프로그래머가 테스트코드를 작성 안한다고 나와 있었다. 요번 미션을 수행하면서 정말 뼈저리게 느낀 점이 많았다..

느낀점

요번 3주차는 느낀점이 너무 많았다. 실수도 엄청 많았고.....실제로 문제를 잘못 이해 하여 다시 뜯어 고칠려고하는 순간 부터 너무 막막했다. 단순히 도메인 테스트까진 안했더라도 함수 하나하나 단위테스트가 있었더라면 그것만 보고 금새 고칠수 있지 않을까 싶었다. 코드도 코드지만, 따로 머릿속에서도 정리가 안되어 5등이면서 보너스 번호1개를 맞춘 조건만 걸고 제출하게 되어, 너무 허탈 한 것 같지만 몸소 깨닫게 된 경험을 절대 잊지 말자....

또한 정말 멘탈 케어하기가 너무 힘들었다. 요구사항을 깊게 보고 문서 작성을 내가 이해한 프로세스에 맞게 녹여낼려고 노력하였지만, 좀 처럼 쉽지 않았다. 프리코스 3주차까지 하면서 얻은 것도 많았지만 좀 처럼 고쳐지지 않는 부분은 문제 요구 사항 파악, 스스로 자책 하는 행위 등이 있는 것 같다. 문제 요구 사항에 맞게 하고 열심히 성장하고 싶어, 눈을 부릅뜨고 피드백 문서까지 보고 왔다갔다 계속 열중해서 했지만.. 결과는 내 스스로가 만족이 안되었다. 결론적으로 우테코 프리코스에 참여하면서도 몇가지 나의 목표는 잘 이루고 있는데 코스마다 나를 자책하는 행위는 더더욱 커져갔고 실수는 많아졌다.

나를 깍아내리는 행위를 할때마다 나를 위로해주기 위해 지피티나,,,, 유튜브 멘탈 케어해주는 영상... 보면서 나를 위로했던 것 같다. 다음번엔 실수하지말고 이번 계기를 통해 내 스스로의 문제를 고쳐볼려고 노력하자

0개의 댓글