우아한 테크코스 5기 모바일 프리코스 3주차 회고록

반달·2022년 11월 22일
0

프리코스 3주차

로또 게임 만들기

  • 로또 구입 금액을 입력하면 구입 금액에 해당하는 만큼 로또를 발행해야 한다.
  • 로또 1장의 가격은 1,000원이다.
  • 당첨 번호와 보너스 번호를 입력받는다.
  • 사용자가 구매한 로또 번호와 당첨 번호를 비교하여 당첨 내역 및 수익률을 출력하고 로또 게임을 종료한다.
  • 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException를 발생시키고, "[ERROR]"로 시작하는 에러 메시지를 출력 후 종료한다.

3주차의 학습 목표는 다음과 같다.

클래스의 분리와 도메인로직에 대한 단위테스트를 해보기

미션을 완벽히 수행하는 것도 중요하지만 우테코쪽에서 제시하는 학습 목표를 중점으로 생각할 필요가 있다.

3주차는 처음으로 클래스라는 개념을 도입해서 프로그래밍을 하는 어플리케이션이었는데 확실히 2주차에 비하면 난이도가 갑작스럽게 뛴 느낌을 받았다..🥲 함수 분리도 어려웠는데 클래스분리라니...ㅠㅠ


이번 프리코스를 진행하면서 어려웠던 점

1. 도메인이 대체 뭐지? 로또 게임 구조는 또 어떻게 짜야하지?

도메인이란?

  • 사용자들이 관심을 가지고 있는 특정 분야나 주제를 말하며 소프트웨어는 도메인에 존재하는 문제를 해결하기 위해 개발된다.

도메인을 이해하려고 구글링을 해가며 수많은 포스팅들을 봐도 모르겠었지만 그나마 나의 이해를 도와준 말이었다.

그렇다면 이번 과제에 대한 도메인은 무엇일까?

로또 게임이니 로또이다.
나는 로또에 대한 문제를 해결하면 됐었다.
때문에 생각하기를 내가 직접 로또를 구매하는 과정에 착안하여 만들기로 하였다.

로또판매점에 로또를 사러가고 -> 원하는만큼 로또를 구매하고 -> 당첨인지 확인하고 -> 당첨되었다면 은행에 당첨금을 받으러간다.

로또를 구매하려면 로또판매점이 필요할거고, 로또를 확인하려면 로또가 있어야 할거고, 당첨금을 받으려면 은행이 필요하다.

따라서 나는 다음과 같이 파일구조를 만들어 보았다.

뭔가 회고록으로 작성하니 술술 풀어나간 것 처럼 보이지만, 사실... 나는 로또게임의 구조를 짜는데에만 시간을 며칠이나 사용했다... 😱 그치만 앞으로는 이것보다는 덜 고생하지 않을까 싶다!

다음은 객체지향에 대해 미숙한 내가 많은 도움을 받았던 포스팅을 하나 남겨두겠다.
생각하라, 객체지향처럼


3주차 코드리뷰 후기

지난주차에 이어 코드리뷰 스터디를 진행하였다.
아무래도 지난 2주차 때 스터디원들이 만족하였고 스터디장인 나또한 6명이나 되는 분들의 코드를 경험하고 이해하면서 배울점이 많았기에 코드리뷰 스터디는 4주차까지 모두 진행하기로 했다.

1. 게임을 진행시키는 기능을 하는 클래스의 부재

나는 바보다.
프로그래밍 요구사항에

함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현하라

가 있었는데, 당연히.. main()은 제외 겠지? 라고 착각하였다..ㅎㅎ
지금 와서 생각해보면 왜 당연스럽게 제외라고 생각했는지도 모르겠다...
아니 심지어 2주차 과제에선 내 스스로 게임을 진행시키는 클래스를 또 두었다;;..

아무튼 main()에 클래스들을 인스턴스화 하고 게임 진행에 맞추어 메소드들을 호출해가는 방식으로 구현했다.
그러다 보니 자연스럽게 main()는 규모가 커져서 결국 15줄 제한을 지키지 못했다.😇

아마 너무 많은 생각을 하다보니 정작 지켜야할 것들을 좀씩 빼먹은 모양이다.. 참 아쉬운점이다.
그치만 이번에 실수를 했으면 다음에 반복안하면 되기에 괜찮다!

2. const val 상수들을 전역에서 사용될 수 있게한 점이 아쉽습니다.

const val 상수를 전역 부분에 선언을 해서 코드 아무데서나 사용을 할 수가 있습니다.
따로 object를 만들어 관리하시는건 어떨까요?

위 사진을 보면 알 수 있듯이 지금 application.ktmain() 부분에서도 예외관련 상수들을 불러올 수 가 있다.
이것 보다는 다음부터 따로 예외 관련 object를 생성하여 사용을 하는 방향으로 가야할거 같다.

3. 호출만 하는 Class 라면 Object로 만드는게 어떨까요?

확인해보니 Bank 클래스와 LottoMarket 클래스는 호출만 되고 그 이후에 메소드만 꺼내와 프로그램이 진행되는 방식이었다.

이 부분은 클래스가 얼마나 호출될지를 고려하여 다음부턴 classobject를 선택해야겠다.


마치며

다른 사람이 아닌 어제의 나와 경쟁하라 - 포비 캡틴

3주차까지 벌써 21명이 넘는 나와 경쟁을 했다.
첫번째 날의 나와 지금의 나를 비교하면 엄청난 성장을 한것이 느껴졌다.
물론 3주차 미션은 좀 상처도 많았다 너무 어려움을 느끼기도 했고 스트레스 또한 많이 받았다.
하지만 그 어려움과 스트레스가 나를 망치기 보다는 시련이라는 말로 어제보다 더 성장한 나로 발전시키는 것 같다.

시련은 있어도 실패는 없는거다. - 故 정주영 회장

드디어 마지막 주차가 다가왔는데 3주간 정말 시간이 빠르게 지나간다 역시.. ㅎㅎ 사람이 넘 집중하면 그만큼 시간도 빨리가니 내가 그만큼 열심히 집중했다는 증거라고 생각한다.

남은 4주차 미션도 분명 어렵겠지만, 내가 할 수 있는 최선을 다해 잘 마무리 지어서 최종 테스트를 보러 가고싶다.

이 글을 읽으시는 코치님 , 그리고 동기분들 한 주간 고생 많으셨고, 남은 4주차도 파이팅했으면 좋겠습니다! 파이팅!

profile
깊이 있는 안드로이드 개발자가 되기 위해

0개의 댓글