본문 바로가기
멋쟁이사자처럼 동아리/코드 리뷰

코드 리뷰 리뷰어 : 이동호 로또 미션

by PlusUltraCode 2024. 6. 22.

안녕하세요 정현님, 코드 리뷰어 이동호입니다.

과제하느라 고생이 많으셨어요. 코드 리뷰를 진행하겠습니다. ^^


PlusUltraCode 정현씨의 대부분의 예외처리를 해당 객체 안에서 예외 처리 함수를 만들고 진행하셨습니다. 만약 예외 처리가 한두 개가 아닌 많아지게 될 경우, 해당 객체는 정말 해야 하는 일들이 있는데 예외 함수에 가려질 수 있다고 생각해요. 예외 처리 함수들을 따로 클래스 객체로 만들어서 사용하시는 게 더 좋아 보입니다. 백엔드 팀 리더분들의 코드를 살펴봤는데 Record라는 것을 사용하여 예외 처리를 진행한 걸 봤습니다.


Anhye0n 감사합니다! 그 부분 참고하여 커밋해보겠습니다.


src/main/java/domain/GenerateLotto.java

PlusUltraCode ArrayList<ArrayList<Integer>> totalLotto 형태로 코드를 작성하셨습니다. Lotto라는 객체를 하나 만들어서 ArrayList totalLotto 형태로 바꿔주신다면 코드를 읽는 것도 수월하고, 무엇보다 확장성과 유지보수에 좋다고 생각해요. 만약 프로그램을 만들어놓은 상태에서 로또의 색깔을 추가해야 하는 상황이 발생할 경우 GenerateLotto에서 직접 함수를 추가해야 해서 GenerateLotto의 역할이 너무 많아질 수 있습니다. Lotto 객체가 있으면 Lotto 객체의 멤버 변수를 만들어 그 부분만 추가할 수 있어 편리하다고 생각합니다.


src/main/java/domain/GenerateLotto.java

PlusUltraCode 하나의 정수를 1~45번 중 랜덤으로 가져와서 6개의 크기가 채워지면 lotto 리스트에 넣는 함수로 보입니다. 로또 번호가 중복될 수 있어서 contains() 함수를 이용하여 로또 번호가 이미 존재하는지 판별하면 좋을 것 같습니다.


src/main/java/domain/GenerateRandom.java

PlusUltraCode 따로 랜덤 객체를 만든 것은 너무 좋은 습관 같습니다. 이렇게 따로 랜덤 객체를 만들어 놓으면 랜덤 값을 받는 로또 객체를 테스트할 때 더욱 쉽게 테스트할 수 있다고 생각해요.


src/main/java/domain/GenerateLotto.java

PlusUltraCode 현재 Input 객체가 domain에 있습니다. MVC 구조에서 보시면 view 패키지 안에 Input과 Print 객체를 선언하는 게 좋을 것 같습니다. 또한, domain 객체 안에 Input()을 사용하여 텍스트를 입력받기보다는 controller 패키지 안에서 domain과 view를 사용하여 입력받는 것이 좋을 것 같습니다.


src/main/java/Main.java

PlusUltraCode Main이라는 객체는 최종 마무리 객체라고 생각해요. 하나의 controller 객체를 만들어서 대부분의 내용을 그 객체에 구현해놓고, Main이라는 곳에 마무리 정리 내용을 적는 게 더 좋을 것 같습니다.


src/main/java/view/Print.java

PlusUltraCode 이 부분은 저도 뭐가 좋은지 잘 모르겠습니다. for 문을 이용하여 System.out.print()의 사용을 줄일지, 아니면 가독성을 위해 하나하나 전개할지는 아직도 고민이 있네요.


src/main/java/domain/WinningLotto.java

PlusUltraCode 이 부분은 for 문을 사용해서 계산하는 게 더 좋을 것 같습니다.


src/main/java/domain/Input.java

PlusUltraCode 문제에서 예외 상황을 정의해주지 않아서 대부분의 경우의 수를 고려해야 될 것 같습니다. 숫자가 아닌 문자열 형태나 공백을 입력받았을 때 처리하는 예외도 있으면 좋을 것 같아요.


src/main/java/view/Print.java

PlusUltraCode 주요 함수마다 단위 테스트가 있으면 더 좋을 것 같습니다. 프로그램의 크기가 커짐에 따라 디버깅을 위해 매번 프로그램을 재실행시키는 데에는 많은 시간이 소요된다고 합니다. 각 함수마다 경우의 수를 고려해서 테스트하면 이러한 부담을 줄일 수 있다고 합니다.


src/main/java/domain/Input.java

PlusUltraCode 전체적으로 함수 이름과 변수 이름을 잘 작성하신 것 같아요. 읽는 데 불편하지 않고 바로바로 의미를 알 수 있었습니다.


src/main/java/domain/Input.java

PlusUltraCode Input 객체를 record라고 선언하신 이유를 알고 싶어요 :)


src/main/java/exception/BonusNumber.java

PlusUltraCode record를 이용하여 validate 구문을 함께 사용해 예외 처리를 잘 진행하신 것으로 보입니다 :)


src/main/java/exception/Lotto.java

PlusUltraCode :) 더 깔끔해지셨어요!!


src/main/java/exception/ManualNumber.java

PlusUltraCode validateLottoRange를 빼먹은 것 같아요.


PlusUltraCode 안녕하세요 정현씨 :)

record 관련해서 리팩토링을 진행해주신 것을 볼 수 있었습니다. validate를 관리하기 위해 record를 선언해주신 것으로 보입니다. 다만 아쉬운 점은 Lotto record 파일을 이용하여 Lottos를 만들어 보는 것을 추천드립니다. Lotto라는 원시값을 이용하여 Lottos로 원시값 포장이라고 부릅니다 :)