[미션 2] 로또 게임 구현 완료했습니다. 리뷰 부탁드립니다. - #3
Conversation
hyukjin-lee
left a comment
There was a problem hiding this comment.
갓파쿠님 고생하셨습니다 ~
한달 전에 비하면 이정도도 정말 큰 성장을 이뤄내신 것 같습니다.
제가 부족한 탓에 코드의 핀트가 조금 엇나간 것 같은데
그걸 떠나서도 정말 고생하신게 느껴질 정도로 좋았습니다.
이제 과정이 얼추 종료되어가니 한 가지 당부의 말씀드리자면,
객체지향은 현업의 수많은 상황들을 경험하지 않고서는
제대로 이해하기 어렵습니다. 그리고 정답도 없구요.
지금 저희가 하는 과정도 요구사항에 비해 많이 과한 코드인 것은 분명합니다.
그저 연습을 하기 위해 이렇게 코드를 짜는 것일 뿐이지요.
그렇기 때문에 지금 하는 것들을 '절대적인 지식이다!' '이런 코드가 짱이야!' 라고 생각하지는 마시길 바랍니다.
축구선수가 되기 위해 운동장에서 혼자 공놀이 하는 정도로 여기시고
항상 공부하실 때 본인이 알고 있는 지식에 대해 의문을 가져보고
새로운 지식과 깨달음에 열려있으시면 좋을 것 같네요.
이번 과정 정말 수고 많으셨습니다. (로또 구현에 대한 질문과 추가 리뷰는 언제든지 환영입니다)
(+ 자바의 패키지명은 소문자가 컨벤션입니다 ~ 각 언어의 컨벤션에 따라서 라이브러리, 프레임워크들이 제작되기 때문에 기본 컨벤션은 지켜줘야해요 ~^^)
|
|
||
| public class Lotto { | ||
| private final static int LOTTO_NUM_SIZE = 6; | ||
| private final List<LottoNo> lottoNums; |
| } | ||
| } | ||
|
|
||
| public void checkDuplicated(List<LottoNo> lotto) { |
| lottoNumbers.add(lottoNo.getLottoNumber()); | ||
| } | ||
|
|
||
| return lottoNumbers; |
| return lotto.size() == LOTTO_NUM_SIZE; | ||
| } | ||
|
|
||
| boolean isValidLottoSize(Set<LottoNo> lotto) { |
There was a problem hiding this comment.
접근제어자를 package-private 으로 하신 이유가 있을까요?
| private final static int INVALID_NUM = 0; | ||
| public final static LottoNo INVALID_LOTTO_NO = new LottoNo(INVALID_NUM); | ||
|
|
||
| private int lottoNumber; |
There was a problem hiding this comment.
LottoNo 는 변경되지 않는 lottoNumber 하나를 가지고 있어야하므로
final 키워드를 넣어도 될 것 같네요 ㅎㅎ
|
|
||
| public Money getTicketPrice() { | ||
| return ticketPrice; | ||
| } |
There was a problem hiding this comment.
여기도 행위가 없고 데이터 + getter 뿐이네요.
그런데 이렇게 클래스를 나눠보려고 최대한 시도하신 점 👍
|
|
||
| public Money getInvestMoney() { | ||
| return investMoney; | ||
| } |
| Collections.shuffle(lottoNums); | ||
|
|
||
| return lottoNums; | ||
| } |
There was a problem hiding this comment.
데이터와 프로세스가 따로 있는 것 == 절차지향 프로그래밍
현 상황 :
데이터 = LottoSeller, Ticket, User 등 (데이터 + getter)
프로세스 = Service (데이터 get 해서 로직 처리)
답 : MVC와 layered architecture를 잊고 view 와 비즈니스 로직을 분리하는 것만 기억하고 짜보기
| input = scanner.nextLine(); | ||
| } | ||
|
|
||
| return manualLotto; |
There was a problem hiding this comment.
view 에서는 데이터를 scan 해오는 책임만 있습니다.
지금은 변환 로직까지 여기서 처리하고 있네요~!
| @@ -0,0 +1,29 @@ | |||
| public final class PurchaseResultView { | |||
너무 오래 걸려서 죄송합니다...ㅠㅠ
일단 변수, 클래스들을 네이밍하는 것이 아직도 조금 힘드네유.....
이름에 역할을 담고자 하니, 길이가 자연스럽게 길어지고, 그러다 보니 코드를 한눈에 알아보기 힘들어 지는 것 같고...., 그래서 이번 미션에서는 최대한 코드 정렬을 깔끔하게 하기 위해 노력했던 것 같아요.
그리고 상태 데이터를 get하지 말고, 메세지를 보내라, 객체를 객체스럽게 사용해라
이 두가지를 계속 생각하면서 코드를 짜려고 노력했지만...ㅠㅠ(눈물,,,)
이번 미션을 하면서 제가 여전히 부족함을 한번더 뼈저리게 느낀 것 같습니다....
이 과정을 통해서 얻은 것들이 너무너무 많고, 안했으면 정말 후회했을 것 같아요.
하지만 더 최선을 다할 수 있었음에도 다하지 않은 제가 쪼끔 부끄럽네유....
그래도 이번을 기회를 통해 뭔가 열정을 얻은 것 같아요!
모르는 것에 대해 궁금해 하고, 알아내려고 노력하는 제 자신이 신기했습니다ㅎㅎ
어떤 과정인지도 제대로 인지하지 못하고 시작했었는데,, 정말 제게 과분할 정도로 너무 좋은 경험이었습니다!!
멘토님 정말 항상 감사함다!!
마지막 리뷰여서인지 더 기대가 됩니닷 두근두근 킥킥