쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열을 전달하는 경우 구분자를 기준으로 분리한 각 숫자의 합을 반환 (예: “” => 0, "1,2" => 3, "1,2,3" => 6, “1,2:3” => 6)
앞의 기본 구분자(쉼표, 콜론)외에 커스텀 구분자를 지정할 수 있다. 커스텀 구분자는 문자열 앞부분의 “//”와 “\n” 사이에 위치하는 문자를 커스텀 구분자로 사용한다.
예를 들어 “//;\n1;2;3”과 같이 값을 입력할 경우 커스텀 구분자는 세미콜론(;)이며, 결과 값은 6이 반환되어야 한다.
문자열 계산기에 숫자 이외의 값 또는 음수를 전달하는 경우 RuntimeException 예외를 throw한다.
사용자가 수동으로 추첨 번호를 입력 할 수 있도록 해야 한다.
자동 생성 숫자를 입력 받는다.
입력한 자동 생성 숫자가 음수이거나 숫자가 아닌경우 예외 발생
구매 가능한 수량에서 입력한 자동 생성 숫자 만큼 수동 로또를 생성한다.
구매 가능한 수량과 입력한 자동 생성 숫자를 제외한 나머지 수량만큼 자동 로또 생성
수동 생성 번호를 입력 받는다.
프로그래밍 요구사항
규칙 3: 모든 원시값과 문자열을 포장한다.
규칙 5: 줄여쓰지 않는다(축약 금지).
예외 처리를 통해 에러가 발생하지 않도록 한다.
indent(들여쓰기) depth를 2단계에서 1단계로 줄여라.
depth의 경우 if문을 사용하는 경우 1단계의 depth가 증가한다. if문 안에 while문을 사용한다면 depth가 2단계가 된다.
메소드의 크기가 최대 10라인을 넘지 않도록 구현한다.
메소드가 한 가지 일만 하도록 최대한 작게 만들어라.
else를 사용하지 마라.
기능 목록
로또 머신
인자값에 대한 유효성 체크
구매 수량 입력에 대한 유효성 체크
구매 금액에 대한 유효값 체크
구매 금액을 입력 받아 구매 금액을 수량으로 변환한다
수량만큼 로또 티켓을 발급한다
로또 티켓 묶음
로또 티켓을 입력한 수량만큼 생성한다
로또 티켓
로또를 랜덤으로 생성한다
중복 없는 1-45의 숫자 6자리 생성
번호를 오름차순으로 정렬
보너스 번호 생성
로또 번호를 입력 받아 생성한다
우승 로또 티켓
당첨번호에 포함된 번호 입력시 에외 발생
1-45의 숫자가 아닌 경우 에외 발생
돈
숫자를 인자로 생성한다
문자열을 인자로 생성한다
음수 또는 숫자가 아닌 경우 예외 발생
수량
숫자를 인자로 생성한다
음수 또는 숫자가 아닌 경우 예외 발생
입력
구매 금액을 입력 받는다
당첨 번호를 입력 받는다
출력
구매 현황을 출력한다
구매한 로또 번호를 출력한다
당첨 현황을 출력한다
2등을 출력한다
수익률을 출력한다
기능 요구사항
로또 구입 금애을 입력하면 구입 금액에 해당하는 로또를 발급해야한다.
로또 1장의 가격은 1000원이다.
2등을 위해 추가 번호를 하나 더 추첨한다.
당첨 통계에 2등을 추가한다.
프로그래밍 요구사항
모든 기능을 TDD로 구현해 단위 테스트가 존재해야 한다. 단 UI(System.out, System.in) 로직은 제외
핵심 로직을 구현하는 코드와 UI를 담당하는 로직을 구분한다.
UI 로직을 InputView, ResultView와 같은 클래스를 추가해 분리한다.
indent(인덴트, 들여쓰기) depth를 2를 넘지 않도록 구현한다. 1까지만 허용한다.
예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다.
힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메소드)를 분리하면 된다.
함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현한다.
함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다.
모든 로직에 단위 테스트를 구현한다. 단, UI(System.out, System.in) 로직은 제외