우테코 프리코스

우테코 프리코스 3주차 후기 : 로또 (안드로이드)

roder 2024. 1. 29. 14:23

# 깃허브 주소

 

https://github.com/leeugun123/kotlin-lotto-6-test

 

GitHub - leeugun123/kotlin-lotto-6-test

Contribute to leeugun123/kotlin-lotto-6-test development by creating an account on GitHub.

github.com

 

 

# 3주차 우테코 로또 후기

 

2주차 프리코스 자동차 경주 게임을 진행하면서

내가 너무 코드를 정리정돈 없이 개판으로 짠다는 것을 깨닫게 됐다.

다른 분들의 코드를 보니 각 패키지별로 모듈을 나누어 클래스를 작성하고,

MVC 패턴으로 아키텍처를 구성하여 유지보수가 용이하도록 코드를 만드셨다.

 

사실 기존 안드로이드는 아키텍처를 구성할때 MVC패턴으로 분리하는 것이

여려워 MVVM 패턴으로 구성하였는데

안드로이드가 아닌 프로그램으로서 MVC패턴을 구성하니 

안드로이드의 MVVM과 어떤 차이가 있는지 알게 되었다.

 

https://sheep1sik.tistory.com/52

 

MVC 패턴

안녕하세요 공공돌🧸 입니다 !! 오늘은 MVC란 무엇인지에 대해서 알아보겠습니다. 제가 알고 있던 MVC 패턴이란 Model, View, Controller로 나누어서 코딩을 한다는 정도로 알고 있었지만, 이번 3주 차

sheep1sik.tistory.com

 

공공돌님의 블로그를 보면서 MVC패턴을 더욱 확실하게 익히게 되었다.

 

# 깃허브 PR 주소

 

https://github.com/woowacourse-precourse/kotlin-lotto-6/pull/34/files

 

[로또] 이유건 미션 제출합니다. by leeugun123 · Pull Request #34 · woowacourse-precourse/kotlin-lotto-6

 

github.com

 

 

 

 

HaHyunKang님의 피드백처럼

winningNumber(당첨번호)와 bonusNumber(보너스 번호)를

List로 관리하는 것이 아닌 Model 패키지에 따로 data class를 작성하여

유지보수에 용이하게 만들었다.

 

winningNumber가 6개의 숫자로 이루어진 변수형이지만,

추가적인 기능 도입 시 List<Int>로 변수를 선언하는 것은

뭔가 향후 유지보수에 매우 힘들겠다는 생각이 들었다.

 

또한 SeoYeonn05님의 피드백도 많이 고민해봤는데,

코드를 테스트할때 5개의 당첨번호 + 보너스 번호와

6개의 당첨번호의 입출력은 확실히 구분되어 나왔다.

어떤 부분에서 else 값으로 넣으면 다른 값이 들어갈때

모두  FIVE_MATCH가 나오는지에 대한 로직이 잘 이해가 가지 않았다.

 

 

 

https://jake-seo-dev.tistory.com/155

 

코드의 매직 넘버 (Magic Number) 란 무엇일까?

매직 넘버란? 개발서적 등을 읽다보면 '매직 넘버(Magic Number)' 라는 말이 나온다. 이 말의 뜻은 무엇일까? 간단히 설명하자면, '의미 있는 이름의 상수로 대체될 수 있는 숫자' 를 말한다. 이를테면

jake-seo-dev.tistory.com

 

처음에는 왜 굳이 매직 넘버를 사용하여 코드를 작성하는데

번거롭게 하는 거지?라는 생각이 들었지만  위 블로그의 포스트를 읽어보니

매직넘버가 아닌 숫자와 문자를 그대로 입력하면 협업 시

다른 프로그래머가 그 상수의 의도를 모르고 값을 변경할 수도 있다.

그렇기 때문에 숫자를 코드에 넣을 시 반드시 const val과 함께 대문자로

어떤 목적으로 변수가 사용되는지 이름을 지어야 한다. 

 

특히 대표적으로 로또 당첨 번호의 범위와 몇개를 무작위로 뽑는지는

로또 당첨 프로그램에서 꽤 중요한 요소이기 때문에 반드시 매직넘버로 만들어야 한다.

 

 

 

코드 작성 시 MVC패턴의 개념을 이해하지 못한채로

프로그램을 만들었기 때문에 UI와 Controller가 혼용하는 문제가 발생했다.

 

깃허브에 들어가보면 알 수 있겠지만, UI부분과 Controller 부분을 따로

모듈화 하여 작성하였으며 기존 LottoUI에서 로또 당첨 흐름을 시작하는 것을

수정하여Controller에서 LottoUI를 제어하고 Model를 가져오는 등 

Controller답게 View와 Model의 중간자 역할을 하도록 프로그램을 개선하였다.