Skip to content

Conversation

@GunBros
Copy link

@GunBros GunBros commented Dec 18, 2025

안녕하세요 재성님. 4단계 미션 구현입니다! 다음과 같은 질문이 있습니다!!

1. LottoMachine에 대한 책임
LottoMachine 컨트롤러는 로또 생성에 관련한 책임을 맡고 있는데 현재 수동 번호 입력 받기와 자동 번호 생성이 분리되어 있는 상태입니다. 제 생각에는 컨트롤러에서는 생성될 때부터 수동 번호들도 생성자로 받는 것이 알맞아 보이는데 방법이 잘 떠오르지 않네요.. 좋은 방법이 있을까요?

2. 자동 개수와 수동 개수
자동 개수는 전체 로또 개수에서 수동 개수를 빼서 구하는 작업을 필요할 때마다 수행하고 있는데 이 방법보다는 전체 로또 개수, 자동 개수, 수동 개수를 각각 가지고 있는 것이 나을까요?

3. 예외 처리
로또 프로그램에서 예외가 발생할 수 있는 케이스가 정말 많은데 이 예외들을 적절하게 처리할 방법이 떠오르지 않습니다.. 사용자에게 알려야하니 Application 단에서 모든 에러를 받아서 처리해야할지 아니면 각각의 책임이 있는 domain 객체, 컨트롤러 , 파서 등 각각의 객체에서 받아서 처리해야할지 고민이 되는데 조언 부탁드립니다.

Copy link
Contributor

@javajigi javajigi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확실히 3단계까지 객체 설계를 잘해서인지 4단계에 변화가 크지 않네요. 👍
캐싱에 대한 피드백도 잘 반영했고요.

로또 생성과 관련해 질문과 연결된 피드백 남겼으니 한번 도전해 보면 좋겠습니다.

  1. LottoMachine에 대한 책임

  2. 자동 개수와 수동 개수
    위 2개 질문은 피드백 남긴 내용을 통해 고민해 보면 좋겠습니다.

  3. 예외 처리
    기본적으로 도메인 객체에서는 throw하고, throw한 예외를 Controller 또는 View에서 catch하는 방식으로 접근해 볼 것을 추천합니다.

import java.util.ArrayList;
import java.util.List;

public class LottoMachine {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3단계에서 4단계로 요구사항이 변경될 때 로또를 생성하는 부분의 요구사항만 변경됐다.
로또를 생성하는 부분을 다음과 같은 구조의 인터페이스로 분리해 보는 연습을 해보면 어떨까?
이와 같이 인터페이스로 구현했을 때의 잇점에 대해 고민해 보는 시간을 가져본다.
Lottos는 사용자가 구매한 n장의 로또를 추상화한 객체임

public interface LottosGenerator {
    Lottos generate();
}
  1. 자동 개수와 수동 개수
    자동 개수는 전체 로또 개수에서 수동 개수를 빼서 구하는 작업을 필요할 때마다 수행하고 있는데 이 방법보다는 전체 로또 개수, 자동 개수, 수동 개수를 각각 가지고 있는 것이 나을까요?

이 구조로 리팩터링하면서 위 질문에 대한 답도 스스로 찾아볼 것을 추천해 본다.

public String count() {
return String.valueOf(price.count());
public String toCountString() {
return String.format("수동으로 %s장, 자동으로 %s장을 구매했습니다.", manualCount.toString(), totalCount.diff(manualCount).toString());
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 값을 출력하기 위해 이 객체의 인스턴스 변수로 totalCount, manualCount를 필드로 가지는 것은 좋은 선택으로 보이지 않음.
UI에 출력하기 위해 문자열을 생성하는 책임을 View 객체가 담당하도록 구현하는 것은 어떨까?

}

public LottoNumber(int number) {
public static LottoNumber get(int value) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants