From f18cd838b52bee4dff2a5ce251df2e2a12a3c866 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Wed, 28 Jan 2026 17:00:30 +0900 Subject: [PATCH 01/25] init project --- src/main/java/.gitkeep | 0 .../kakao/onboarding/precource/dukeyun/baseball/App.java | 9 +++++++++ 2 files changed, 9 insertions(+) delete mode 100644 src/main/java/.gitkeep create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/App.java diff --git a/src/main/java/.gitkeep b/src/main/java/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/App.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/App.java new file mode 100644 index 00000000..73d9784e --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/App.java @@ -0,0 +1,9 @@ +package com.kakao.onboarding.precource.dukeyun.baseball; + +public class App { + + public static void main(String[] args) { + System.out.println("Hello World"); + } + +} From f9e88545e251758ac936334e4cf7a00b74947961 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Wed, 28 Jan 2026 17:17:33 +0900 Subject: [PATCH 02/25] =?UTF-8?q?docs:=20README=20=EC=9A=94=EA=B5=AC?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8d7e8aee..37d1ca95 100644 --- a/README.md +++ b/README.md @@ -1 +1,73 @@ -# java-baseball-precourse \ No newline at end of file +# java-baseball-precourse + +## 기능 요구사항 + +- [ ] 기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다. +- [ ] 같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 포볼 또는 낫싱이란 힌트를 얻고, + 그 힌트를 이용해서 먼저 상대방(컴퓨터)의 수를 맞추면 승리한다. + - [예] 상대방(컴퓨터)의 수가 425일 때, + - 123을 제시한 경우 : 1스트라이크 + - 456을 제시한 경우 : 1스트라이크 1볼 + - 789를 제시한 경우 : 낫싱 +- [ ] 위 숫자 야구게임에서 상대방의 역할을 컴퓨터가 한다. 컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다. + 게임 플레이어는 컴퓨터가 생각하고 있는 3개의 숫자를 입력하고, 컴퓨터는 입력한 숫자에 대한 결과를 출력한다. +- [ ] 이 같은 과정을 반복해 컴퓨터가 선택한 3개의 숫자를 모두 맞히면 게임이 종료된다. +- [ ] 게임을 종료한 후 게임을 다시 시작하거나 완전히 종료할 수 있다. +- [ ] 사용자가 잘못된 값을 입력할 경우 [ERROR]로 시작하는 에러 메시지를 출력하고 게임을 계속 진행할 수 있어야 한다. + +--- + +## 프로그램 실행 결과 + +``` +숫자를 입력해주세요 : 123 +1스트라이크 1볼 +숫자를 입력해주세요 : 145 +1볼 +숫자를 입력해주세요 : 671 +2볼 +숫자를 입력해주세요 : 216 +1스트라이크 +숫자를 입력해주세요 : 713 +3스트라이크 +3개의 숫자를 모두 맞히셨습니다! 게임 끝 +게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요. +1 +숫자를 입력해주세요 : 123 +1볼 +``` + +--- + +## 프로그래밍 요구사항1 - 제약사항 + +- [ ] 자바 코드 컨벤션을 지키면서 프로그래밍한다. + - https://naver.github.io/hackday-conventions-java/ +- [ ] indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 구현한다. 2까지만 허용한다. + - 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다. + - 힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메소드)를 분리하면 된다. +- [ ] 자바 8에 추가된 stream api를 사용하지 않고 구현해야 한다. 단, 람다는 사용 가능하다. +- [ ] else 예약어를 쓰지 않는다. + - 힌트: if 조건절에서 값을 return하는 방식으로 구현하면 else를 사용하지 않아도 된다. + - else를 쓰지 말라고 하니 switch/case로 구현하는 경우가 있는데 switch/case도 허용하지 않는다. +- [ ] 함수(또는 메소드)의 길이가 15라인을 넘어가지 않도록 구현한다. + - 함수(또는 메소드)가 한 가지 일만 잘 하도록 구현한다. + +--- + +## 프로그래밍 요구사항2 - 단위 테스트 + +- [ ] 도메인 로직에 단위 테스트를 구현해야 한다. 단, UI(System.out, System.in, Scanner) 로직은 제외한다. + - [ ] 핵심 로직을 구현하는 코드와 UI를 담당하는 로직을 분리해 구현한다. + - [ ] 힌트는 MVC 패턴 기반으로 구현한 후 View, Controller를 제외한 Model에 대한 단위 테스트를 추가하는 것에 집중한다. +- [ ] JUnit5와 AssertJ 사용법에 익숙하지 않은 개발자는 첨부한 "학습테스트를 통해 JUnit 학습하기.pdf" 문서를 참고해 사용법을 학습한 후 JUnit5 기반 단위 테스트를 구현한다. + +--- + +## 과제 진행 요구사항 + +- [ ] 미션은 https://github.com/next-step/java-baseball-precourse 저장소를 fork/clone해 시작한다. +- [ ] 기능을 구현하기 전에 java-baseball-precourse/README.md 파일에 구현할 기능 목록을 정리해 추가한다. +- [ ] git의 commit 단위는 앞 단계에서 README.md 파일에 정리한 기능 목록 단위 또는 의미 있는 단위로 Commit한다. + - [ ] AngularJS Commit Message Conventions 참고해 commit log를 남기려고 노력해 본다. +- [ ] 과제 진행 및 제출 방법은 프리코스 과제 제출 문서를 참고한다. From 5e98d42a090eaaee4cd06e64628929976365e2f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Wed, 28 Jan 2026 17:52:09 +0900 Subject: [PATCH 03/25] =?UTF-8?q?feat:=20BaseballNumber=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=EC=9E=90=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 길이 검증 구현 - 숫자 범위 검증 구현 --- .../dukeyun/baseball/BaseballNumber.java | 34 ++++++++++++++++++ src/test/java/.gitkeep | 0 .../dukeyun/baseball/BaseballNumberTest.java | 36 +++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java delete mode 100644 src/test/java/.gitkeep create mode 100644 src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java new file mode 100644 index 00000000..6ae5de83 --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java @@ -0,0 +1,34 @@ +package com.kakao.onboarding.precource.dukeyun.baseball; + +import java.util.List; + +public class BaseballNumber { + + private static final int LEN = 3; + private static final int MIN_RANGE = 0; + private static final int MAX_RANGE = 9; + + private final List numbers; + + public BaseballNumber(List numbers) { + checkLength(numbers); + checkRange(numbers); + this.numbers = numbers; + } + + private static void checkRange(List numbers) { + for (int number : numbers) { + if (number < MIN_RANGE || MAX_RANGE < number) { + throw new RuntimeException( + String.format("숫자 범위는 %d 이상 %d 이하여야 합니다. (문제 숫자: %d)", MIN_RANGE, MAX_RANGE, number)); + } + } + } + + private static void checkLength(List numbers) { + if (numbers.size() != LEN) { + throw new RuntimeException(String.format("숫자야구 길이는 %d이어야 합니다.(현재 길이 : %d)", LEN, numbers.size())); + } + } + +} diff --git a/src/test/java/.gitkeep b/src/test/java/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java new file mode 100644 index 00000000..052580e2 --- /dev/null +++ b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java @@ -0,0 +1,36 @@ +package com.kakao.onboarding.precource.dukeyun.baseball; + +import java.util.List; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +class BaseballNumberTest { + @Test + void 기준_길이보다_길면_생성이_안된다() { + Assertions.assertThatThrownBy(() -> + new BaseballNumber(List.of(1, 2, 3, 4)) + ).isInstanceOf(RuntimeException.class); + } + + @Test + void 기준_길이보다_짧으면_생성이_안된다() { + Assertions.assertThatThrownBy(() -> + new BaseballNumber(List.of(1, 2)) + ).isInstanceOf(RuntimeException.class); + } + + @Test + void 숫자가_범위가_최소_허용_범위보다_작으면_생성이_안된다() { + Assertions.assertThatThrownBy(() -> + new BaseballNumber(List.of(-1, 2, 3)) + ).isInstanceOf(RuntimeException.class); + } + + @Test + void 숫자가_범위가_최소_허용_범위보다_크면_생성이_안된다() { + Assertions.assertThatThrownBy(() -> + new BaseballNumber(List.of(10, 2, 3)) + ).isInstanceOf(RuntimeException.class); + } +} \ No newline at end of file From 0d88641399959a8c98c3588088840f6bba93b4a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Wed, 28 Jan 2026 17:54:37 +0900 Subject: [PATCH 04/25] =?UTF-8?q?refactor:=20BaseballNumber=20=EC=88=AB?= =?UTF-8?q?=EC=9E=90=20=EB=B2=94=EC=9C=84=20=EA=B2=80=EC=A6=9D=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dukeyun/baseball/BaseballNumber.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java index 6ae5de83..aee4400c 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java @@ -12,20 +12,24 @@ public class BaseballNumber { public BaseballNumber(List numbers) { checkLength(numbers); - checkRange(numbers); + checkNumbersRange(numbers); this.numbers = numbers; } - private static void checkRange(List numbers) { + private void checkNumbersRange(List numbers) { for (int number : numbers) { - if (number < MIN_RANGE || MAX_RANGE < number) { - throw new RuntimeException( - String.format("숫자 범위는 %d 이상 %d 이하여야 합니다. (문제 숫자: %d)", MIN_RANGE, MAX_RANGE, number)); - } + checkNumberRange(number); } } - private static void checkLength(List numbers) { + private void checkNumberRange(int number) { + if (number < MIN_RANGE || MAX_RANGE < number) { + throw new RuntimeException( + String.format("숫자 범위는 %d 이상 %d 이하여야 합니다. (문제 숫자: %d)", MIN_RANGE, MAX_RANGE, number)); + } + } + + private void checkLength(List numbers) { if (numbers.size() != LEN) { throw new RuntimeException(String.format("숫자야구 길이는 %d이어야 합니다.(현재 길이 : %d)", LEN, numbers.size())); } From fb4ceb876a6507fb427d3e77de1718f379ab303f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Wed, 28 Jan 2026 18:00:56 +0900 Subject: [PATCH 05/25] =?UTF-8?q?feat:=20=EC=88=AB=EC=9E=90=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=20=EA=B4=80=EB=A0=A8=20=EA=B2=80=EC=A6=9D=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dukeyun/baseball/BaseballNumber.java | 12 +++++++++ .../dukeyun/baseball/BaseballNumberTest.java | 26 +++++++++++++++---- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java index aee4400c..fb9b74fd 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java @@ -13,9 +13,21 @@ public class BaseballNumber { public BaseballNumber(List numbers) { checkLength(numbers); checkNumbersRange(numbers); + checkDuplication(numbers); this.numbers = numbers; } + private void checkDuplication(List numbers) { + int[] freq = new int[MAX_RANGE - MIN_RANGE + 1]; + for (int number : numbers) { + int index = number - MIN_RANGE; + freq[index]++; + if (freq[index] > 1) { + throw new RuntimeException(String.format("숫자가 중복 되었습니다.(중복 숫자: %d)", number)); + } + } + } + private void checkNumbersRange(List numbers) { for (int number : numbers) { checkNumberRange(number); diff --git a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java index 052580e2..0fc08d67 100644 --- a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java +++ b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java @@ -1,36 +1,52 @@ package com.kakao.onboarding.precource.dukeyun.baseball; +import static org.assertj.core.api.Assertions.*; + import java.util.List; -import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; class BaseballNumberTest { @Test void 기준_길이보다_길면_생성이_안된다() { - Assertions.assertThatThrownBy(() -> + assertThatThrownBy(() -> new BaseballNumber(List.of(1, 2, 3, 4)) ).isInstanceOf(RuntimeException.class); } @Test void 기준_길이보다_짧으면_생성이_안된다() { - Assertions.assertThatThrownBy(() -> + assertThatThrownBy(() -> new BaseballNumber(List.of(1, 2)) ).isInstanceOf(RuntimeException.class); } @Test void 숫자가_범위가_최소_허용_범위보다_작으면_생성이_안된다() { - Assertions.assertThatThrownBy(() -> + assertThatThrownBy(() -> new BaseballNumber(List.of(-1, 2, 3)) ).isInstanceOf(RuntimeException.class); } @Test void 숫자가_범위가_최소_허용_범위보다_크면_생성이_안된다() { - Assertions.assertThatThrownBy(() -> + assertThatThrownBy(() -> new BaseballNumber(List.of(10, 2, 3)) ).isInstanceOf(RuntimeException.class); } + + @Test + void 중복된_숫자로_생성할_수_없다() { + assertThatThrownBy(() -> + new BaseballNumber(List.of(1, 1, 3)) + ).isInstanceOf(RuntimeException.class); + } + + @Test + void 올바른_조건으로_생성할_수_있다() { + assertThatCode( + () -> new BaseballNumber(List.of(1, 2, 3)) + ).doesNotThrowAnyException(); + } + } \ No newline at end of file From dbb7b036f043780f9bc02cce540c703e8e9f6b10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Wed, 28 Jan 2026 18:18:37 +0900 Subject: [PATCH 06/25] =?UTF-8?q?feat:=20=EC=8A=A4=ED=8A=B8=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=ED=81=AC=20=EA=B0=AF=EC=88=98=20=EA=B3=84=EC=82=B0=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../precource/dukeyun/baseball/BaseballNumber.java | 12 ++++++++++++ .../dukeyun/baseball/BaseballNumberTest.java | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java index fb9b74fd..239141c9 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java @@ -47,4 +47,16 @@ private void checkLength(List numbers) { } } + public int countStrike(BaseballNumber baseballNumber) { + int count = 0; + + for (int index = 0; index < LEN; index++) { + if (numbers.get(index).equals(baseballNumber.numbers.get(index))) { + count++; + } + } + + return count; + } + } diff --git a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java index 0fc08d67..5a8a19a2 100644 --- a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java +++ b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java @@ -49,4 +49,16 @@ class BaseballNumberTest { ).doesNotThrowAnyException(); } + @Test + void 스트라이크_갯수를_계산할_수_있다() { + BaseballNumber systemNumber = new BaseballNumber(List.of(1, 2, 3)); + + assertThat(systemNumber.countStrike(new BaseballNumber(List.of(1, 2, 3)))).isEqualTo(3); + assertThat(systemNumber.countStrike(new BaseballNumber(List.of(1, 2, 4)))).isEqualTo(2); + assertThat(systemNumber.countStrike(new BaseballNumber(List.of(1, 3, 4)))).isEqualTo(1); + assertThat(systemNumber.countStrike(new BaseballNumber(List.of(3, 2, 1)))).isEqualTo(1); + assertThat(systemNumber.countStrike(new BaseballNumber(List.of(4, 5, 6)))).isEqualTo(0); + assertThat(systemNumber.countStrike(new BaseballNumber(List.of(3, 1, 2)))).isEqualTo(0); + } + } \ No newline at end of file From a2f5270eb7aab904084294e6fadf8932c771fe28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Wed, 28 Jan 2026 18:21:35 +0900 Subject: [PATCH 07/25] =?UTF-8?q?feat:=20=EB=B3=BC=20=EA=B0=AF=EC=88=98=20?= =?UTF-8?q?=EA=B3=84=EC=82=B0=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dukeyun/baseball/BaseballNumber.java | 17 +++++++++++++++++ .../dukeyun/baseball/BaseballNumberTest.java | 11 +++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java index 239141c9..9a365908 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java @@ -59,4 +59,21 @@ public int countStrike(BaseballNumber baseballNumber) { return count; } + public int countBall(BaseballNumber baseballNumber) { + int count = 0; + + for (int pivotIndex = 0; pivotIndex < LEN; pivotIndex++) { + for (int index = 0; index < LEN; index++) { + if (pivotIndex == index) { + continue; + } + + if (numbers.get(pivotIndex).equals(baseballNumber.numbers.get(index))) { + count++; + } + } + } + + return count; + } } diff --git a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java index 5a8a19a2..0950d89e 100644 --- a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java +++ b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java @@ -61,4 +61,15 @@ class BaseballNumberTest { assertThat(systemNumber.countStrike(new BaseballNumber(List.of(3, 1, 2)))).isEqualTo(0); } + @Test + void 볼_갯수를_계산할_수_있다() { + BaseballNumber systemNumber = new BaseballNumber(List.of(1, 2, 3)); + + assertThat(systemNumber.countBall(new BaseballNumber(List.of(1, 2, 3)))).isEqualTo(0); + assertThat(systemNumber.countBall(new BaseballNumber(List.of(1, 2, 4)))).isEqualTo(0); + assertThat(systemNumber.countBall(new BaseballNumber(List.of(1, 3, 4)))).isEqualTo(1); + assertThat(systemNumber.countBall(new BaseballNumber(List.of(3, 2, 1)))).isEqualTo(2); + assertThat(systemNumber.countBall(new BaseballNumber(List.of(4, 5, 6)))).isEqualTo(0); + assertThat(systemNumber.countBall(new BaseballNumber(List.of(3, 1, 2)))).isEqualTo(3); + } } \ No newline at end of file From d592e85d7f9f1bd0c2feb7d105e445cefab1cecb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Sun, 8 Feb 2026 22:19:21 +0900 Subject: [PATCH 08/25] =?UTF-8?q?feat:=20=EB=A6=AC=ED=94=8C=EB=A0=88?= =?UTF-8?q?=EC=9D=B4=20=EA=B2=8C=EC=9E=84=20=EC=8B=9C=EC=8A=A4=ED=85=9C=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../precource/dukeyun/baseball/Console.java | 12 +++++++++ .../precource/dukeyun/baseball/Game.java | 9 +++++++ .../dukeyun/baseball/GameSystem.java | 6 +++++ .../baseball/ReplayableGameSystem.java | 22 ++++++++++++++++ .../ReplayableGameSystemConsoleView.java | 26 +++++++++++++++++++ .../baseball/ReplayableGameSystemView.java | 7 +++++ 6 files changed, 82 insertions(+) create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/Console.java create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/Game.java create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/GameSystem.java create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystem.java create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystemConsoleView.java create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystemView.java diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/Console.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/Console.java new file mode 100644 index 00000000..323b8205 --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/Console.java @@ -0,0 +1,12 @@ +package com.kakao.onboarding.precource.dukeyun.baseball; + +import java.util.Scanner; + +public class Console { + + private static final Scanner scanner = new Scanner(System.in); + + public static String readLine() { + return scanner.nextLine(); + } +} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/Game.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/Game.java new file mode 100644 index 00000000..e651f072 --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/Game.java @@ -0,0 +1,9 @@ +package com.kakao.onboarding.precource.dukeyun.baseball; + +public interface Game { + + void init(); + + void play(); + +} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/GameSystem.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/GameSystem.java new file mode 100644 index 00000000..28800c6f --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/GameSystem.java @@ -0,0 +1,6 @@ +package com.kakao.onboarding.precource.dukeyun.baseball; + +public interface GameSystem { + + void run(); +} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystem.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystem.java new file mode 100644 index 00000000..d7fb39d6 --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystem.java @@ -0,0 +1,22 @@ +package com.kakao.onboarding.precource.dukeyun.baseball; + +public class ReplayableGameSystem implements GameSystem { + + private final ReplayableGameSystemView systemView; + private final Game game; + + public ReplayableGameSystem(ReplayableGameSystemView systemView, Game game) { + this.systemView = systemView; + this.game = game; + } + + @Override + public void run() { + boolean replay = false; + while (!replay) { + game.init(); + game.play(); + replay = systemView.requestReplayInput(); + } + } +} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystemConsoleView.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystemConsoleView.java new file mode 100644 index 00000000..c0594082 --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystemConsoleView.java @@ -0,0 +1,26 @@ +package com.kakao.onboarding.precource.dukeyun.baseball; + +public class ReplayableGameSystemConsoleView implements ReplayableGameSystemView { + + private static final String RESTART = "1"; + private static final String EXIT = "2"; + private static final String REPLAY_REQUEST_PROMPT = "게임을 새로 시작하려면 " + RESTART + ", 종료하려면 " + EXIT + "를 입력하세요."; + + @Override + public boolean requestReplayInput() { + System.out.println(REPLAY_REQUEST_PROMPT); + String input = Console.readLine(); + validInput(input); + return isReplay(input); + } + + private void validInput(String input) { + if (!input.equals(RESTART) && !input.equals(EXIT)) { + throw new IllegalArgumentException("입력은 " + RESTART + " 이거나" + EXIT + " 여야 합니다."); + } + } + + private boolean isReplay(String input) { + return input.equals(RESTART); + } +} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystemView.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystemView.java new file mode 100644 index 00000000..f24a602f --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystemView.java @@ -0,0 +1,7 @@ +package com.kakao.onboarding.precource.dukeyun.baseball; + +public interface ReplayableGameSystemView { + + boolean requestReplayInput(); + +} From 0fc6e62db862b995dea6b9d389e41e81cb747246 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Sun, 8 Feb 2026 22:25:43 +0900 Subject: [PATCH 09/25] =?UTF-8?q?feat:=20=ED=84=B4=EC=A0=9C=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../precource/dukeyun/baseball/Console.java | 2 +- .../dukeyun/baseball/TurnBaseGame.java | 31 +++++++++++++++++++ .../dukeyun/baseball/TurnBaseGameService.java | 9 ++++++ .../dukeyun/baseball/TurnBaseGameView.java | 13 ++++++++ .../precource/dukeyun/baseball/TurnInput.java | 4 +++ .../dukeyun/baseball/TurnResult.java | 7 +++++ 6 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGame.java create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGameService.java create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGameView.java create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnInput.java create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnResult.java diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/Console.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/Console.java index 323b8205..fb391c0a 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/Console.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/Console.java @@ -7,6 +7,6 @@ public class Console { private static final Scanner scanner = new Scanner(System.in); public static String readLine() { - return scanner.nextLine(); + return scanner.nextLine().trim(); } } diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGame.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGame.java new file mode 100644 index 00000000..c7ab825f --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGame.java @@ -0,0 +1,31 @@ +package com.kakao.onboarding.precource.dukeyun.baseball; + +public class TurnBaseGame implements Game { + + private final TurnBaseGameView turnBaseGameView; + private final TurnBaseGameService turnBaseGameService; + + public TurnBaseGame(TurnBaseGameView turnBaseGameView, TurnBaseGameService turnBaseGameService) { + this.turnBaseGameView = turnBaseGameView; + this.turnBaseGameService = turnBaseGameService; + } + + @Override + public void init() { + turnBaseGameService.init(); + } + + @Override + public void play() { + turnBaseGameView.printStart(); + + while (true) { + TurnResult turnResult = turnBaseGameService.playTurn(turnBaseGameView.requestTurnInput()); + turnBaseGameView.printResult(turnResult); + if (turnResult.isGameCleared()) { + turnBaseGameView.printClear(); + return; + } + } + } +} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGameService.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGameService.java new file mode 100644 index 00000000..a2d0be63 --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGameService.java @@ -0,0 +1,9 @@ +package com.kakao.onboarding.precource.dukeyun.baseball; + +public interface TurnBaseGameService { + + void init(); + + TurnResult playTurn(TurnInput turnInput); + +} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGameView.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGameView.java new file mode 100644 index 00000000..49a8ca2f --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGameView.java @@ -0,0 +1,13 @@ +package com.kakao.onboarding.precource.dukeyun.baseball; + +public interface TurnBaseGameView { + + void printStart(); + + TurnInput requestTurnInput(); + + void printClear(); + + void printResult(TurnResult turnResult); + +} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnInput.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnInput.java new file mode 100644 index 00000000..4c7d04c0 --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnInput.java @@ -0,0 +1,4 @@ +package com.kakao.onboarding.precource.dukeyun.baseball; + +public interface TurnInput { +} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnResult.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnResult.java new file mode 100644 index 00000000..a7ed5314 --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnResult.java @@ -0,0 +1,7 @@ +package com.kakao.onboarding.precource.dukeyun.baseball; + +public interface TurnResult { + + boolean isGameCleared(); + +} From 3868a6725fa8b962e32a551afb4b9f505a98e110 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Sun, 8 Feb 2026 23:06:25 +0900 Subject: [PATCH 10/25] =?UTF-8?q?refactor:=20=ED=8C=A8=ED=82=A4=EC=A7=80?= =?UTF-8?q?=20=EA=B5=AC=EC=A1=B0=EB=A5=BC=20=EB=8F=84=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=EA=B3=BC=20=ED=94=84=EB=A0=88=EC=9E=84=EC=9B=8C=ED=81=AC?= =?UTF-8?q?=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - baseball 패키지: 야구 게임 도메인 로직 - framework 패키지: 재사용 가능한 게임 프레임워크 - utils 패키지: 유틸리티 클래스 --- .../precource/dukeyun/baseball/Game.java | 9 ------ .../dukeyun/baseball/GameSystem.java | 6 ---- .../precource/dukeyun/baseball/TurnInput.java | 4 --- .../dukeyun/baseball/TurnResult.java | 7 ----- .../{ => baseball}/BaseballNumber.java | 30 ++++++++++--------- .../dukeyun/baseball/framework/game/Game.java | 9 ++++++ .../game/turn}/TurnBaseGame.java | 4 ++- .../game/turn}/TurnBaseGameService.java | 2 +- .../game/turn}/TurnBaseGameView.java | 2 +- .../framework/game/turn/TurnInput.java | 4 +++ .../framework/game/turn/TurnResult.java | 7 +++++ .../framework/gamesystem/GameSystem.java | 6 ++++ .../gamesystem}/ReplayableGameSystem.java | 8 +++-- .../ReplayableGameSystemConsoleView.java | 4 ++- .../gamesystem}/ReplayableGameSystemView.java | 2 +- .../dukeyun/baseball/{ => utils}/Console.java | 2 +- 16 files changed, 57 insertions(+), 49 deletions(-) delete mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/Game.java delete mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/GameSystem.java delete mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnInput.java delete mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnResult.java rename src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/{ => baseball}/BaseballNumber.java (61%) create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/Game.java rename src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/{ => framework/game/turn}/TurnBaseGame.java (82%) rename src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/{ => framework/game/turn}/TurnBaseGameService.java (56%) rename src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/{ => framework/game/turn}/TurnBaseGameView.java (67%) create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnInput.java create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnResult.java create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/GameSystem.java rename src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/{ => framework/gamesystem}/ReplayableGameSystem.java (66%) rename src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/{ => framework/gamesystem}/ReplayableGameSystemConsoleView.java (84%) rename src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/{ => framework/gamesystem}/ReplayableGameSystemView.java (50%) rename src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/{ => utils}/Console.java (75%) diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/Game.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/Game.java deleted file mode 100644 index e651f072..00000000 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/Game.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.kakao.onboarding.precource.dukeyun.baseball; - -public interface Game { - - void init(); - - void play(); - -} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/GameSystem.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/GameSystem.java deleted file mode 100644 index 28800c6f..00000000 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/GameSystem.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.kakao.onboarding.precource.dukeyun.baseball; - -public interface GameSystem { - - void run(); -} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnInput.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnInput.java deleted file mode 100644 index 4c7d04c0..00000000 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnInput.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.kakao.onboarding.precource.dukeyun.baseball; - -public interface TurnInput { -} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnResult.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnResult.java deleted file mode 100644 index a7ed5314..00000000 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnResult.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.kakao.onboarding.precource.dukeyun.baseball; - -public interface TurnResult { - - boolean isGameCleared(); - -} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumber.java similarity index 61% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java rename to src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumber.java index 9a365908..fd0b67ff 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumber.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumber.java @@ -1,16 +1,18 @@ -package com.kakao.onboarding.precource.dukeyun.baseball; +package com.kakao.onboarding.precource.dukeyun.baseball.baseball; import java.util.List; public class BaseballNumber { - private static final int LEN = 3; - private static final int MIN_RANGE = 0; - private static final int MAX_RANGE = 9; - + private final BaseballGameConfig config; private final List numbers; public BaseballNumber(List numbers) { + this(new BaseballGameConfig(), numbers); + } + + public BaseballNumber(BaseballGameConfig config, List numbers) { + this.config = config; checkLength(numbers); checkNumbersRange(numbers); checkDuplication(numbers); @@ -18,9 +20,9 @@ public BaseballNumber(List numbers) { } private void checkDuplication(List numbers) { - int[] freq = new int[MAX_RANGE - MIN_RANGE + 1]; + int[] freq = new int[config.getMaxRange() - config.getMinRange() + 1]; for (int number : numbers) { - int index = number - MIN_RANGE; + int index = number - config.getMinRange(); freq[index]++; if (freq[index] > 1) { throw new RuntimeException(String.format("숫자가 중복 되었습니다.(중복 숫자: %d)", number)); @@ -35,22 +37,22 @@ private void checkNumbersRange(List numbers) { } private void checkNumberRange(int number) { - if (number < MIN_RANGE || MAX_RANGE < number) { + if (number < config.getMinRange() || config.getMaxRange() < number) { throw new RuntimeException( - String.format("숫자 범위는 %d 이상 %d 이하여야 합니다. (문제 숫자: %d)", MIN_RANGE, MAX_RANGE, number)); + String.format("숫자 범위는 %d 이상 %d 이하여야 합니다. (문제 숫자: %d)", config.getMinRange(), config.getMaxRange(), number)); } } private void checkLength(List numbers) { - if (numbers.size() != LEN) { - throw new RuntimeException(String.format("숫자야구 길이는 %d이어야 합니다.(현재 길이 : %d)", LEN, numbers.size())); + if (numbers.size() != config.getLength()) { + throw new RuntimeException(String.format("숫자야구 길이는 %d이어야 합니다.(현재 길이 : %d)", config.getLength(), numbers.size())); } } public int countStrike(BaseballNumber baseballNumber) { int count = 0; - for (int index = 0; index < LEN; index++) { + for (int index = 0; index < config.getLength(); index++) { if (numbers.get(index).equals(baseballNumber.numbers.get(index))) { count++; } @@ -62,8 +64,8 @@ public int countStrike(BaseballNumber baseballNumber) { public int countBall(BaseballNumber baseballNumber) { int count = 0; - for (int pivotIndex = 0; pivotIndex < LEN; pivotIndex++) { - for (int index = 0; index < LEN; index++) { + for (int pivotIndex = 0; pivotIndex < config.getLength(); pivotIndex++) { + for (int index = 0; index < config.getLength(); index++) { if (pivotIndex == index) { continue; } diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/Game.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/Game.java new file mode 100644 index 00000000..9f2986e8 --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/Game.java @@ -0,0 +1,9 @@ +package com.kakao.onboarding.precource.dukeyun.baseball.framework.game; + +public interface Game { + + void init(); + + void play(); + +} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGame.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGame.java similarity index 82% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGame.java rename to src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGame.java index c7ab825f..0c6d62d8 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGame.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGame.java @@ -1,4 +1,6 @@ -package com.kakao.onboarding.precource.dukeyun.baseball; +package com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn; + +import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.Game; public class TurnBaseGame implements Game { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGameService.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGameService.java similarity index 56% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGameService.java rename to src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGameService.java index a2d0be63..454395f9 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGameService.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGameService.java @@ -1,4 +1,4 @@ -package com.kakao.onboarding.precource.dukeyun.baseball; +package com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn; public interface TurnBaseGameService { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGameView.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGameView.java similarity index 67% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGameView.java rename to src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGameView.java index 49a8ca2f..d925c48f 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/TurnBaseGameView.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGameView.java @@ -1,4 +1,4 @@ -package com.kakao.onboarding.precource.dukeyun.baseball; +package com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn; public interface TurnBaseGameView { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnInput.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnInput.java new file mode 100644 index 00000000..156ba7e0 --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnInput.java @@ -0,0 +1,4 @@ +package com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn; + +public interface TurnInput { +} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnResult.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnResult.java new file mode 100644 index 00000000..9d40b62d --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnResult.java @@ -0,0 +1,7 @@ +package com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn; + +public interface TurnResult { + + boolean isGameCleared(); + +} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/GameSystem.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/GameSystem.java new file mode 100644 index 00000000..9f206265 --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/GameSystem.java @@ -0,0 +1,6 @@ +package com.kakao.onboarding.precource.dukeyun.baseball.framework.gamesystem; + +public interface GameSystem { + + void run(); +} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystem.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystem.java similarity index 66% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystem.java rename to src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystem.java index d7fb39d6..16afa8a0 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystem.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystem.java @@ -1,4 +1,6 @@ -package com.kakao.onboarding.precource.dukeyun.baseball; +package com.kakao.onboarding.precource.dukeyun.baseball.framework.gamesystem; + +import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.Game; public class ReplayableGameSystem implements GameSystem { @@ -12,8 +14,8 @@ public ReplayableGameSystem(ReplayableGameSystemView systemView, Game game) { @Override public void run() { - boolean replay = false; - while (!replay) { + boolean replay = true; + while (replay) { game.init(); game.play(); replay = systemView.requestReplayInput(); diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystemConsoleView.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystemConsoleView.java similarity index 84% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystemConsoleView.java rename to src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystemConsoleView.java index c0594082..9375a321 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystemConsoleView.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystemConsoleView.java @@ -1,4 +1,6 @@ -package com.kakao.onboarding.precource.dukeyun.baseball; +package com.kakao.onboarding.precource.dukeyun.baseball.framework.gamesystem; + +import com.kakao.onboarding.precource.dukeyun.baseball.utils.Console; public class ReplayableGameSystemConsoleView implements ReplayableGameSystemView { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystemView.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystemView.java similarity index 50% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystemView.java rename to src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystemView.java index f24a602f..a0ff14cc 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/ReplayableGameSystemView.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystemView.java @@ -1,4 +1,4 @@ -package com.kakao.onboarding.precource.dukeyun.baseball; +package com.kakao.onboarding.precource.dukeyun.baseball.framework.gamesystem; public interface ReplayableGameSystemView { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/Console.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/utils/Console.java similarity index 75% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/Console.java rename to src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/utils/Console.java index fb391c0a..f04fcdb2 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/Console.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/utils/Console.java @@ -1,4 +1,4 @@ -package com.kakao.onboarding.precource.dukeyun.baseball; +package com.kakao.onboarding.precource.dukeyun.baseball.utils; import java.util.Scanner; From dfba8b3539441f71824f61d60bb4a35044926e0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Sun, 8 Feb 2026 23:07:18 +0900 Subject: [PATCH 11/25] =?UTF-8?q?feat:=20=EC=95=BC=EA=B5=AC=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20=ED=95=B5=EC=8B=AC=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - BaseballNumberGenerator 인터페이스 및 랜덤 구현체 추가 - BaseballGameService: 게임 로직 처리 - BaseballGameConsoleView: 콘솔 출력 처리 - BaseballGameTurnInput/Result: 턴 기반 게임 입출력 모델 --- .../baseball/BaseballGameConsoleView.java | 81 +++++++++++++++++++ .../baseball/BaseballGameService.java | 45 +++++++++++ .../baseball/BaseballGameTurnInput.java | 40 +++++++++ .../baseball/BaseballGameTurnResult.java | 29 +++++++ .../baseball/BaseballNumberGenerator.java | 5 ++ .../RandomBaseballNumberGenerator.java | 34 ++++++++ 6 files changed, 234 insertions(+) create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConsoleView.java create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameService.java create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInput.java create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnResult.java create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumberGenerator.java create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/RandomBaseballNumberGenerator.java diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConsoleView.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConsoleView.java new file mode 100644 index 00000000..7923adbe --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConsoleView.java @@ -0,0 +1,81 @@ +package com.kakao.onboarding.precource.dukeyun.baseball.baseball; + +import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn.TurnBaseGameView; +import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn.TurnInput; +import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn.TurnResult; +import com.kakao.onboarding.precource.dukeyun.baseball.utils.Console; + +public class BaseballGameConsoleView implements TurnBaseGameView { + + private static final String REQUEST_INPUT_MESSAGE = "숫자를 입력해주세요 : "; + private static final String CLEAR_MESSAGE_FORMAT = "%d개의 숫자를 모두 맞히셨습니다! 게임 끝"; + + private static final String BALL_UNIT = "볼"; + private static final String STRIKE_UNIT = "스트라이크"; + private static final String NOTHING = "낫싱"; + + private final BaseballGameConfig config; + + public BaseballGameConsoleView() { + this(new BaseballGameConfig()); + } + + public BaseballGameConsoleView(BaseballGameConfig config) { + this.config = config; + } + + private static void printNumStrike(int numStrike) { + System.out.printf("%d%s", numStrike, STRIKE_UNIT); + } + + private static void printNumBall(int numBall) { + System.out.printf("%d%s ", numBall, BALL_UNIT); + } + + private static void printNewLine() { + System.out.println(); + } + + private static void printNothing() { + System.out.print(NOTHING); + } + + @Override + public void printStart() { + } + + @Override + public TurnInput requestTurnInput() { + System.out.print(REQUEST_INPUT_MESSAGE); + return new BaseballGameTurnInput(Console.readLine()); + } + + @Override + public void printClear() { + System.out.printf(CLEAR_MESSAGE_FORMAT + "%n", config.getLength()); + } + + @Override + public void printResult(TurnResult turnResult) { + BaseballGameTurnResult baseballGameTurnResult = (BaseballGameTurnResult)turnResult; + + int numBall = baseballGameTurnResult.getNumBall(); + int numStrike = baseballGameTurnResult.getNumStrike(); + + if (numBall == 0 && numStrike == 0) { + printNothing(); + printNewLine(); + return; + } + + if (numBall != 0) { + printNumBall(numBall); + } + + if (numStrike != 0) { + printNumStrike(numStrike); + } + + printNewLine(); + } +} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameService.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameService.java new file mode 100644 index 00000000..dc05481b --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameService.java @@ -0,0 +1,45 @@ +package com.kakao.onboarding.precource.dukeyun.baseball.baseball; + +import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn.TurnBaseGameService; +import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn.TurnInput; +import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn.TurnResult; + +public class BaseballGameService implements TurnBaseGameService { + + private final BaseballGameConfig config; + private final BaseballNumberGenerator baseballNumberGenerator; + private BaseballNumber answer; + + public BaseballGameService(BaseballNumberGenerator baseballNumberGenerator) { + this(new BaseballGameConfig(), baseballNumberGenerator); + } + + public BaseballGameService(BaseballGameConfig config, BaseballNumberGenerator baseballNumberGenerator) { + this.config = config; + this.baseballNumberGenerator = baseballNumberGenerator; + } + + @Override + public void init() { + this.answer = baseballNumberGenerator.generate(); + } + + @Override + public TurnResult playTurn(TurnInput turnInput) { + BaseballGameTurnInput baseballGameTurnInput = (BaseballGameTurnInput)turnInput; + BaseballNumber baseballNumber = baseballGameTurnInput.getBaseballNumber(); + + return calculateResult(baseballNumber); + } + + private TurnResult calculateResult(BaseballNumber baseballNumber) { + int numStrike = answer.countStrike(baseballNumber); + int numBall = answer.countBall(baseballNumber); + + return new BaseballGameTurnResult(isClear(numStrike), numStrike, numBall); + } + + private boolean isClear(int numStrike) { + return numStrike == config.getLength(); + } +} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInput.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInput.java new file mode 100644 index 00000000..c2a13cd5 --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInput.java @@ -0,0 +1,40 @@ +package com.kakao.onboarding.precource.dukeyun.baseball.baseball; + +import java.util.ArrayList; +import java.util.List; + +import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn.TurnInput; + +public class BaseballGameTurnInput implements TurnInput { + + private final BaseballNumber baseballNumber; + + public BaseballGameTurnInput(String input) { + valid(input); + this.baseballNumber = createBaseballNumber(input); + } + + private BaseballNumber createBaseballNumber(String input) { + List numbers = new ArrayList<>(); + for (char ch : input.toCharArray()) { + numbers.add(ch - '0'); + } + return new BaseballNumber(numbers); + } + + private void valid(String input) { + for (char ch : input.toCharArray()) { + validIsNumber(ch); + } + } + + private void validIsNumber(char ch) { + if (!Character.isDigit(ch)) { + throw new IllegalArgumentException("입력은 숫자여야 합니다."); + } + } + + public BaseballNumber getBaseballNumber() { + return baseballNumber; + } +} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnResult.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnResult.java new file mode 100644 index 00000000..706b43d2 --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnResult.java @@ -0,0 +1,29 @@ +package com.kakao.onboarding.precource.dukeyun.baseball.baseball; + +import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn.TurnResult; + +public class BaseballGameTurnResult implements TurnResult { + + private final boolean clear; + private final int numStrike; + private final int numBall; + + public BaseballGameTurnResult(boolean clear, int numStrike, int numBall) { + this.clear = clear; + this.numStrike = numStrike; + this.numBall = numBall; + } + + @Override + public boolean isGameCleared() { + return clear; + } + + public int getNumStrike() { + return numStrike; + } + + public int getNumBall() { + return numBall; + } +} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumberGenerator.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumberGenerator.java new file mode 100644 index 00000000..462a9bcf --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumberGenerator.java @@ -0,0 +1,5 @@ +package com.kakao.onboarding.precource.dukeyun.baseball.baseball; + +public interface BaseballNumberGenerator { + BaseballNumber generate(); +} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/RandomBaseballNumberGenerator.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/RandomBaseballNumberGenerator.java new file mode 100644 index 00000000..86927d83 --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/RandomBaseballNumberGenerator.java @@ -0,0 +1,34 @@ +package com.kakao.onboarding.precource.dukeyun.baseball.baseball; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class RandomBaseballNumberGenerator implements BaseballNumberGenerator { + + private static final Random RANDOM = new Random(); + + private final BaseballGameConfig config; + + public RandomBaseballNumberGenerator() { + this(new BaseballGameConfig()); + } + + public RandomBaseballNumberGenerator(BaseballGameConfig config) { + this.config = config; + } + + @Override + public BaseballNumber generate() { + List numbers = new ArrayList<>(); + while (numbers.size() < config.getLength()) { + int randomNumber = RANDOM.nextInt(config.getMinRange(), config.getMaxRange() + 1); + if (!numbers.contains(randomNumber)) { + numbers.add(randomNumber); + } + } + + return new BaseballNumber(config, numbers); + } + +} From abcb116dd0b6a6252e62936faeff7251bacb9bd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Sun, 8 Feb 2026 23:07:51 +0900 Subject: [PATCH 12/25] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=EC=9D=84=20=EA=B4=80=EB=A6=AC=ED=95=98=EB=8A=94=20Con?= =?UTF-8?q?fig=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 자릿수(length), 숫자 범위(minRange, maxRange)를 중앙에서 관리 - 기본값 제공 및 커스터마이징 지원 - 설정 유효성 검증 로직 포함 --- .../baseball/baseball/BaseballGameConfig.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConfig.java diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConfig.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConfig.java new file mode 100644 index 00000000..d9eeb4f3 --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConfig.java @@ -0,0 +1,49 @@ +package com.kakao.onboarding.precource.dukeyun.baseball.baseball; + +public class BaseballGameConfig { + + private static final int DEFAULT_LENGTH = 3; + private static final int DEFAULT_MIN_RANGE = 1; + private static final int DEFAULT_MAX_RANGE = 9; + + private final int length; + private final int minRange; + private final int maxRange; + + public BaseballGameConfig() { + this(DEFAULT_LENGTH, DEFAULT_MIN_RANGE, DEFAULT_MAX_RANGE); + } + + public BaseballGameConfig(int length, int minRange, int maxRange) { + validateConfig(length, minRange, maxRange); + this.length = length; + this.minRange = minRange; + this.maxRange = maxRange; + } + + private void validateConfig(int length, int minRange, int maxRange) { + if (length <= 0) { + throw new RuntimeException("길이는 양수여야 합니다."); + } + if (minRange >= maxRange) { + throw new RuntimeException("최소값은 최대값보다 작아야 합니다."); + } + int availableNumbers = maxRange - minRange + 1; + if (length > availableNumbers) { + throw new RuntimeException( + String.format("길이(%d)가 사용 가능한 숫자의 개수(%d)보다 큽니다.", length, availableNumbers)); + } + } + + public int getLength() { + return length; + } + + public int getMinRange() { + return minRange; + } + + public int getMaxRange() { + return maxRange; + } +} \ No newline at end of file From 259b1d3cbbe0767dbd2b093b4145d46b135fd9ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Sun, 8 Feb 2026 23:09:19 +0900 Subject: [PATCH 13/25] =?UTF-8?q?feat:=20=EA=B2=8C=EC=9E=84=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=EC=9D=84=20=EC=9C=84=ED=95=9C=20Factory=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Config 기반으로 게임 시스템을 생성하는 팩토리 메서드 제공 - 기본 설정 및 커스텀 설정 지원 --- .../dukeyun/baseball/GameFactory.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/GameFactory.java diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/GameFactory.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/GameFactory.java new file mode 100644 index 00000000..b5b385dc --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/GameFactory.java @@ -0,0 +1,34 @@ +package com.kakao.onboarding.precource.dukeyun.baseball; + +import com.kakao.onboarding.precource.dukeyun.baseball.baseball.BaseballGameConfig; +import com.kakao.onboarding.precource.dukeyun.baseball.baseball.BaseballGameConsoleView; +import com.kakao.onboarding.precource.dukeyun.baseball.baseball.BaseballGameService; +import com.kakao.onboarding.precource.dukeyun.baseball.baseball.RandomBaseballNumberGenerator; +import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.Game; +import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn.TurnBaseGame; +import com.kakao.onboarding.precource.dukeyun.baseball.framework.gamesystem.GameSystem; +import com.kakao.onboarding.precource.dukeyun.baseball.framework.gamesystem.ReplayableGameSystem; +import com.kakao.onboarding.precource.dukeyun.baseball.framework.gamesystem.ReplayableGameSystemConsoleView; + +public class GameFactory { + private GameFactory() { + } + + public static GameSystem createBaseballGameSystem() { + return createBaseballGameSystem(new BaseballGameConfig(3, 1, 9)); + } + + public static GameSystem createBaseballGameSystem(BaseballGameConfig config) { + return new ReplayableGameSystem( + new ReplayableGameSystemConsoleView(), + createBaseBallGame(config) + ); + } + + private static Game createBaseBallGame(BaseballGameConfig config) { + return new TurnBaseGame( + new BaseballGameConsoleView(config), + new BaseballGameService(config, new RandomBaseballNumberGenerator(config)) + ); + } +} From 1d18059166e2906e110563e317da6e4c68ded371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Sun, 8 Feb 2026 23:10:20 +0900 Subject: [PATCH 14/25] =?UTF-8?q?refactor:=20=ED=8C=A8=ED=82=A4=EC=A7=80?= =?UTF-8?q?=20=EC=9D=B4=EB=8F=99=EC=97=90=20=EB=94=B0=EB=A5=B8=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20import=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - BaseballNumber 패키지 경로 변경 반영 --- .../precource/dukeyun/baseball/BaseballNumberTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java index 0950d89e..e7e33022 100644 --- a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java +++ b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java @@ -6,6 +6,8 @@ import org.junit.jupiter.api.Test; +import com.kakao.onboarding.precource.dukeyun.baseball.baseball.BaseballNumber; + class BaseballNumberTest { @Test void 기준_길이보다_길면_생성이_안된다() { From 7de392180c1589852156f63524ec6637884b3123 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Sun, 8 Feb 2026 23:10:52 +0900 Subject: [PATCH 15/25] =?UTF-8?q?feat:=20GameFactory=EB=A5=BC=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EC=97=AC=20=EC=95=BC=EA=B5=AC=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20=EC=8B=A4=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - main 메서드에서 GameFactory로 게임 시스템 생성 및 실행 --- .../com/kakao/onboarding/precource/dukeyun/baseball/App.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/App.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/App.java index 73d9784e..fbdff3cd 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/App.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/App.java @@ -1,9 +1,12 @@ package com.kakao.onboarding.precource.dukeyun.baseball; +import com.kakao.onboarding.precource.dukeyun.baseball.framework.gamesystem.GameSystem; + public class App { public static void main(String[] args) { - System.out.println("Hello World"); + GameSystem baseballGameSystem = GameFactory.createBaseballGameSystem(); + baseballGameSystem.run(); } } From 4b34605f33593a4ea975a97011c1cbf4a9eaee22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Sun, 8 Feb 2026 23:16:49 +0900 Subject: [PATCH 16/25] =?UTF-8?q?test:=20BaseballGameTurnInput=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baseball/BaseballGameTurnInputTest.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInputTest.java diff --git a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInputTest.java b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInputTest.java new file mode 100644 index 00000000..9dea368a --- /dev/null +++ b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInputTest.java @@ -0,0 +1,41 @@ +package com.kakao.onboarding.precource.dukeyun.baseball.baseball; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import org.junit.jupiter.api.DisplayNameGeneration; +import org.junit.jupiter.api.DisplayNameGenerator; +import org.junit.jupiter.api.Test; + +@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) +class BaseballGameTurnInputTest { + + @Test + public void 세자리가_아닌_숫자가_들어오면_예외를_발생시킨다() throws Exception { + // given + // when + //then + assertThatThrownBy(() -> { + new BaseballGameTurnInput("1234"); + }).isInstanceOf(RuntimeException.class); + } + + @Test + public void 숫자가_아니면_예외를_발생시킨다() throws Exception { + // given + // when + //then + assertThatThrownBy(() -> { + new BaseballGameTurnInput("1aa"); + }).isInstanceOf(IllegalArgumentException.class); + } + + @Test + public void 중복된_숫자면_예외를_발생시킨다() throws Exception { + // given + // when + //then + assertThatThrownBy(() -> { + new BaseballGameTurnInput("112"); + }).isInstanceOf(RuntimeException.class); + } +} \ No newline at end of file From dcce21d8ca201b87866349e9483dcb396afb4531 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Sun, 8 Feb 2026 23:16:57 +0900 Subject: [PATCH 17/25] =?UTF-8?q?test:=20BaseballGameService=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20=EB=A1=9C=EC=A7=81=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baseball/BaseballGameServiceTest.java | 78 +++++++++++++++++++ .../mock/TestBaseballNumberGenerator.java | 18 +++++ 2 files changed, 96 insertions(+) create mode 100644 src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameServiceTest.java create mode 100644 src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/mock/TestBaseballNumberGenerator.java diff --git a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameServiceTest.java b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameServiceTest.java new file mode 100644 index 00000000..e13ae243 --- /dev/null +++ b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameServiceTest.java @@ -0,0 +1,78 @@ +package com.kakao.onboarding.precource.dukeyun.baseball.baseball; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.kakao.onboarding.precource.dukeyun.baseball.mock.TestBaseballNumberGenerator; +import java.util.List; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayNameGeneration; +import org.junit.jupiter.api.DisplayNameGenerator; +import org.junit.jupiter.api.Test; + +@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) +class BaseballGameServiceTest { + + private BaseballGameService baseballGameService; + + @BeforeEach + public void init() { + baseballGameService = new BaseballGameService(new TestBaseballNumberGenerator(List.of(1, 2, 3))); + baseballGameService.init(); + } + + @Test + public void 정답_시_결과_객체에_클리어_정보를_반환한다() throws Exception { + // given + BaseballGameTurnInput input = new BaseballGameTurnInput("123"); + + // when + BaseballGameTurnResult result = (BaseballGameTurnResult) baseballGameService.playTurn(input); + + //then + assertThat(result.isGameCleared()).isTrue(); + assertThat(result.getNumBall()).isEqualTo(0); + assertThat(result.getNumStrike()).isEqualTo(3); + } + + @Test + public void 정답이_아닐_시_결과_객체에_클리어_실패_정보를_반환한다() throws Exception { + // given + BaseballGameTurnInput input = new BaseballGameTurnInput("132"); + + // when + BaseballGameTurnResult result = (BaseballGameTurnResult) baseballGameService.playTurn(input); + + //then + assertThat(result.isGameCleared()).isFalse(); + assertThat(result.getNumBall()).isEqualTo(2); + assertThat(result.getNumStrike()).isEqualTo(1); + } + + @Test + public void 모두_틀리면_볼과_스트라이크_모두_0이다() throws Exception { + // given + BaseballGameTurnInput input = new BaseballGameTurnInput("456"); + + // when + BaseballGameTurnResult result = (BaseballGameTurnResult) baseballGameService.playTurn(input); + + //then + assertThat(result.isGameCleared()).isFalse(); + assertThat(result.getNumBall()).isEqualTo(0); + assertThat(result.getNumStrike()).isEqualTo(0); + } + + @Test + public void 모두_자리만_다르면_3볼이다() throws Exception { + // given + BaseballGameTurnInput input = new BaseballGameTurnInput("312"); + + // when + BaseballGameTurnResult result = (BaseballGameTurnResult) baseballGameService.playTurn(input); + + //then + assertThat(result.isGameCleared()).isFalse(); + assertThat(result.getNumBall()).isEqualTo(3); + assertThat(result.getNumStrike()).isEqualTo(0); + } +} \ No newline at end of file diff --git a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/mock/TestBaseballNumberGenerator.java b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/mock/TestBaseballNumberGenerator.java new file mode 100644 index 00000000..dfb28fc6 --- /dev/null +++ b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/mock/TestBaseballNumberGenerator.java @@ -0,0 +1,18 @@ +package com.kakao.onboarding.precource.dukeyun.baseball.mock; + +import com.kakao.onboarding.precource.dukeyun.baseball.baseball.BaseballNumber; +import com.kakao.onboarding.precource.dukeyun.baseball.baseball.BaseballNumberGenerator; +import java.util.List; + +public class TestBaseballNumberGenerator implements BaseballNumberGenerator { + private final List fixedNumbers; + + public TestBaseballNumberGenerator(List fixedNumbers) { + this.fixedNumbers = fixedNumbers; + } + + @Override + public BaseballNumber generate() { + return new BaseballNumber(fixedNumbers); + } +} \ No newline at end of file From 63385141e8ab3f6f462c3537d4df3871249ef81a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Sun, 8 Feb 2026 23:17:41 +0900 Subject: [PATCH 18/25] =?UTF-8?q?test:=20BaseballNumberTest=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/settings.local.json | 10 ++++++++++ .../baseball/{ => baseball}/BaseballNumberTest.java | 4 +--- 2 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 .claude/settings.local.json rename src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/{ => baseball}/BaseballNumberTest.java (94%) diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 00000000..adf1469b --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,10 @@ +{ + "permissions": { + "allow": [ + "Bash(git add:*)", + "Bash(git rm:*)" + ], + "deny": [], + "ask": [] + } +} diff --git a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumberTest.java similarity index 94% rename from src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java rename to src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumberTest.java index e7e33022..1f0e0a5e 100644 --- a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/BaseballNumberTest.java +++ b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumberTest.java @@ -1,4 +1,4 @@ -package com.kakao.onboarding.precource.dukeyun.baseball; +package com.kakao.onboarding.precource.dukeyun.baseball.baseball; import static org.assertj.core.api.Assertions.*; @@ -6,8 +6,6 @@ import org.junit.jupiter.api.Test; -import com.kakao.onboarding.precource.dukeyun.baseball.baseball.BaseballNumber; - class BaseballNumberTest { @Test void 기준_길이보다_길면_생성이_안된다() { From ff8b0a0172e77590e981f3a2125f9aa08e113ced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Sun, 8 Feb 2026 23:36:20 +0900 Subject: [PATCH 19/25] =?UTF-8?q?refactor:=20BaseballGameConfig=EB=A5=BC?= =?UTF-8?q?=20=EC=99=B8=EB=B6=80=EC=97=90=EC=84=9C=20=EC=A3=BC=EC=9E=85?= =?UTF-8?q?=EB=B0=9B=EB=8F=84=EB=A1=9D=20=EA=B8=B0=EB=B3=B8=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=EC=9E=90=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baseball/baseball/BaseballGameConfig.java | 8 +-- .../baseball/BaseballGameConsoleView.java | 6 +-- .../baseball/BaseballGameService.java | 2 +- .../baseball/BaseballGameTurnInput.java | 8 +-- .../baseball/baseball/BaseballNumber.java | 10 ++-- .../RandomBaseballNumberGenerator.java | 2 +- .../baseball/BaseballGameServiceTest.java | 25 +++++---- .../baseball/BaseballGameTurnInputTest.java | 27 +--------- .../baseball/baseball/BaseballNumberTest.java | 53 +++++++++++-------- .../mock/TestBaseballNumberGenerator.java | 6 ++- 10 files changed, 67 insertions(+), 80 deletions(-) diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConfig.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConfig.java index d9eeb4f3..fbd4d660 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConfig.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConfig.java @@ -10,10 +10,6 @@ public class BaseballGameConfig { private final int minRange; private final int maxRange; - public BaseballGameConfig() { - this(DEFAULT_LENGTH, DEFAULT_MIN_RANGE, DEFAULT_MAX_RANGE); - } - public BaseballGameConfig(int length, int minRange, int maxRange) { validateConfig(length, minRange, maxRange); this.length = length; @@ -21,6 +17,10 @@ public BaseballGameConfig(int length, int minRange, int maxRange) { this.maxRange = maxRange; } + public static BaseballGameConfig ofDefault() { + return new BaseballGameConfig(DEFAULT_LENGTH, DEFAULT_MIN_RANGE, DEFAULT_MAX_RANGE); + } + private void validateConfig(int length, int minRange, int maxRange) { if (length <= 0) { throw new RuntimeException("길이는 양수여야 합니다."); diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConsoleView.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConsoleView.java index 7923adbe..5cf35470 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConsoleView.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConsoleView.java @@ -16,10 +16,6 @@ public class BaseballGameConsoleView implements TurnBaseGameView { private final BaseballGameConfig config; - public BaseballGameConsoleView() { - this(new BaseballGameConfig()); - } - public BaseballGameConsoleView(BaseballGameConfig config) { this.config = config; } @@ -47,7 +43,7 @@ public void printStart() { @Override public TurnInput requestTurnInput() { System.out.print(REQUEST_INPUT_MESSAGE); - return new BaseballGameTurnInput(Console.readLine()); + return new BaseballGameTurnInput(config, Console.readLine()); } @Override diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameService.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameService.java index dc05481b..5d459b9c 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameService.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameService.java @@ -11,7 +11,7 @@ public class BaseballGameService implements TurnBaseGameService { private BaseballNumber answer; public BaseballGameService(BaseballNumberGenerator baseballNumberGenerator) { - this(new BaseballGameConfig(), baseballNumberGenerator); + this(new BaseballGameConfig(3, 1, 9), baseballNumberGenerator); } public BaseballGameService(BaseballGameConfig config, BaseballNumberGenerator baseballNumberGenerator) { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInput.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInput.java index c2a13cd5..36584801 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInput.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInput.java @@ -9,17 +9,17 @@ public class BaseballGameTurnInput implements TurnInput { private final BaseballNumber baseballNumber; - public BaseballGameTurnInput(String input) { + public BaseballGameTurnInput(BaseballGameConfig config, String input) { valid(input); - this.baseballNumber = createBaseballNumber(input); + this.baseballNumber = createBaseballNumber(config, input); } - private BaseballNumber createBaseballNumber(String input) { + private BaseballNumber createBaseballNumber(BaseballGameConfig config, String input) { List numbers = new ArrayList<>(); for (char ch : input.toCharArray()) { numbers.add(ch - '0'); } - return new BaseballNumber(numbers); + return new BaseballNumber(config, numbers); } private void valid(String input) { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumber.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumber.java index fd0b67ff..2b1b56ed 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumber.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumber.java @@ -7,10 +7,6 @@ public class BaseballNumber { private final BaseballGameConfig config; private final List numbers; - public BaseballNumber(List numbers) { - this(new BaseballGameConfig(), numbers); - } - public BaseballNumber(BaseballGameConfig config, List numbers) { this.config = config; checkLength(numbers); @@ -39,13 +35,15 @@ private void checkNumbersRange(List numbers) { private void checkNumberRange(int number) { if (number < config.getMinRange() || config.getMaxRange() < number) { throw new RuntimeException( - String.format("숫자 범위는 %d 이상 %d 이하여야 합니다. (문제 숫자: %d)", config.getMinRange(), config.getMaxRange(), number)); + String.format("숫자 범위는 %d 이상 %d 이하여야 합니다. (문제 숫자: %d)", config.getMinRange(), config.getMaxRange(), + number)); } } private void checkLength(List numbers) { if (numbers.size() != config.getLength()) { - throw new RuntimeException(String.format("숫자야구 길이는 %d이어야 합니다.(현재 길이 : %d)", config.getLength(), numbers.size())); + throw new RuntimeException( + String.format("숫자야구 길이는 %d이어야 합니다.(현재 길이 : %d)", config.getLength(), numbers.size())); } } diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/RandomBaseballNumberGenerator.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/RandomBaseballNumberGenerator.java index 86927d83..7d4fad88 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/RandomBaseballNumberGenerator.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/RandomBaseballNumberGenerator.java @@ -11,7 +11,7 @@ public class RandomBaseballNumberGenerator implements BaseballNumberGenerator { private final BaseballGameConfig config; public RandomBaseballNumberGenerator() { - this(new BaseballGameConfig()); + this(new BaseballGameConfig(3, 1, 9)); } public RandomBaseballNumberGenerator(BaseballGameConfig config) { diff --git a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameServiceTest.java b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameServiceTest.java index e13ae243..cf4f4a0e 100644 --- a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameServiceTest.java +++ b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameServiceTest.java @@ -1,32 +1,37 @@ package com.kakao.onboarding.precource.dukeyun.baseball.baseball; -import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.*; -import com.kakao.onboarding.precource.dukeyun.baseball.mock.TestBaseballNumberGenerator; import java.util.List; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayNameGeneration; import org.junit.jupiter.api.DisplayNameGenerator; import org.junit.jupiter.api.Test; +import com.kakao.onboarding.precource.dukeyun.baseball.mock.TestBaseballNumberGenerator; + @DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) class BaseballGameServiceTest { private BaseballGameService baseballGameService; + private BaseballGameConfig baseballGameConfig; @BeforeEach public void init() { baseballGameService = new BaseballGameService(new TestBaseballNumberGenerator(List.of(1, 2, 3))); baseballGameService.init(); + + baseballGameConfig = new BaseballGameConfig(3, 1, 9); } @Test public void 정답_시_결과_객체에_클리어_정보를_반환한다() throws Exception { // given - BaseballGameTurnInput input = new BaseballGameTurnInput("123"); + BaseballGameTurnInput input = new BaseballGameTurnInput(baseballGameConfig, "123"); // when - BaseballGameTurnResult result = (BaseballGameTurnResult) baseballGameService.playTurn(input); + BaseballGameTurnResult result = (BaseballGameTurnResult)baseballGameService.playTurn(input); //then assertThat(result.isGameCleared()).isTrue(); @@ -37,10 +42,10 @@ public void init() { @Test public void 정답이_아닐_시_결과_객체에_클리어_실패_정보를_반환한다() throws Exception { // given - BaseballGameTurnInput input = new BaseballGameTurnInput("132"); + BaseballGameTurnInput input = new BaseballGameTurnInput(baseballGameConfig, "132"); // when - BaseballGameTurnResult result = (BaseballGameTurnResult) baseballGameService.playTurn(input); + BaseballGameTurnResult result = (BaseballGameTurnResult)baseballGameService.playTurn(input); //then assertThat(result.isGameCleared()).isFalse(); @@ -51,10 +56,10 @@ public void init() { @Test public void 모두_틀리면_볼과_스트라이크_모두_0이다() throws Exception { // given - BaseballGameTurnInput input = new BaseballGameTurnInput("456"); + BaseballGameTurnInput input = new BaseballGameTurnInput(baseballGameConfig, "456"); // when - BaseballGameTurnResult result = (BaseballGameTurnResult) baseballGameService.playTurn(input); + BaseballGameTurnResult result = (BaseballGameTurnResult)baseballGameService.playTurn(input); //then assertThat(result.isGameCleared()).isFalse(); @@ -65,10 +70,10 @@ public void init() { @Test public void 모두_자리만_다르면_3볼이다() throws Exception { // given - BaseballGameTurnInput input = new BaseballGameTurnInput("312"); + BaseballGameTurnInput input = new BaseballGameTurnInput(baseballGameConfig, "312"); // when - BaseballGameTurnResult result = (BaseballGameTurnResult) baseballGameService.playTurn(input); + BaseballGameTurnResult result = (BaseballGameTurnResult)baseballGameService.playTurn(input); //then assertThat(result.isGameCleared()).isFalse(); diff --git a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInputTest.java b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInputTest.java index 9dea368a..550150d9 100644 --- a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInputTest.java +++ b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInputTest.java @@ -1,6 +1,6 @@ package com.kakao.onboarding.precource.dukeyun.baseball.baseball; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.DisplayNameGeneration; import org.junit.jupiter.api.DisplayNameGenerator; @@ -9,33 +9,10 @@ @DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) class BaseballGameTurnInputTest { - @Test - public void 세자리가_아닌_숫자가_들어오면_예외를_발생시킨다() throws Exception { - // given - // when - //then - assertThatThrownBy(() -> { - new BaseballGameTurnInput("1234"); - }).isInstanceOf(RuntimeException.class); - } - @Test public void 숫자가_아니면_예외를_발생시킨다() throws Exception { - // given - // when - //then assertThatThrownBy(() -> { - new BaseballGameTurnInput("1aa"); + new BaseballGameTurnInput(new BaseballGameConfig(3, 1, 9), "1aa"); }).isInstanceOf(IllegalArgumentException.class); } - - @Test - public void 중복된_숫자면_예외를_발생시킨다() throws Exception { - // given - // when - //then - assertThatThrownBy(() -> { - new BaseballGameTurnInput("112"); - }).isInstanceOf(RuntimeException.class); - } } \ No newline at end of file diff --git a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumberTest.java b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumberTest.java index 1f0e0a5e..75ba4392 100644 --- a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumberTest.java +++ b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumberTest.java @@ -4,72 +4,81 @@ import java.util.List; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; class BaseballNumberTest { + + private BaseballGameConfig config; + + @BeforeEach + void setup() { + config = new BaseballGameConfig(3, 1, 9); + } + @Test void 기준_길이보다_길면_생성이_안된다() { assertThatThrownBy(() -> - new BaseballNumber(List.of(1, 2, 3, 4)) + new BaseballNumber(config, List.of(1, 2, 3, 4)) ).isInstanceOf(RuntimeException.class); } @Test void 기준_길이보다_짧으면_생성이_안된다() { assertThatThrownBy(() -> - new BaseballNumber(List.of(1, 2)) + new BaseballNumber(config, List.of(1, 2)) ).isInstanceOf(RuntimeException.class); } @Test void 숫자가_범위가_최소_허용_범위보다_작으면_생성이_안된다() { assertThatThrownBy(() -> - new BaseballNumber(List.of(-1, 2, 3)) + new BaseballNumber(config, List.of(0, 2, 3)) ).isInstanceOf(RuntimeException.class); } @Test void 숫자가_범위가_최소_허용_범위보다_크면_생성이_안된다() { assertThatThrownBy(() -> - new BaseballNumber(List.of(10, 2, 3)) + new BaseballNumber(config, List.of(10, 2, 3)) ).isInstanceOf(RuntimeException.class); } @Test void 중복된_숫자로_생성할_수_없다() { assertThatThrownBy(() -> - new BaseballNumber(List.of(1, 1, 3)) + new BaseballNumber(config, List.of(1, 1, 3)) ).isInstanceOf(RuntimeException.class); } @Test void 올바른_조건으로_생성할_수_있다() { assertThatCode( - () -> new BaseballNumber(List.of(1, 2, 3)) + () -> new BaseballNumber(config, List.of(1, 2, 3)) ).doesNotThrowAnyException(); } @Test void 스트라이크_갯수를_계산할_수_있다() { - BaseballNumber systemNumber = new BaseballNumber(List.of(1, 2, 3)); - - assertThat(systemNumber.countStrike(new BaseballNumber(List.of(1, 2, 3)))).isEqualTo(3); - assertThat(systemNumber.countStrike(new BaseballNumber(List.of(1, 2, 4)))).isEqualTo(2); - assertThat(systemNumber.countStrike(new BaseballNumber(List.of(1, 3, 4)))).isEqualTo(1); - assertThat(systemNumber.countStrike(new BaseballNumber(List.of(3, 2, 1)))).isEqualTo(1); - assertThat(systemNumber.countStrike(new BaseballNumber(List.of(4, 5, 6)))).isEqualTo(0); - assertThat(systemNumber.countStrike(new BaseballNumber(List.of(3, 1, 2)))).isEqualTo(0); + BaseballNumber systemNumber = new BaseballNumber(config, List.of(1, 2, 3)); + + assertThat(systemNumber.countStrike(new BaseballNumber(config, List.of(1, 2, 3)))).isEqualTo(3); + assertThat(systemNumber.countStrike(new BaseballNumber(config, List.of(1, 2, 4)))).isEqualTo(2); + assertThat(systemNumber.countStrike(new BaseballNumber(config, List.of(1, 3, 4)))).isEqualTo(1); + assertThat(systemNumber.countStrike(new BaseballNumber(config, List.of(3, 2, 1)))).isEqualTo(1); + assertThat(systemNumber.countStrike(new BaseballNumber(config, List.of(4, 5, 6)))).isEqualTo(0); + assertThat(systemNumber.countStrike(new BaseballNumber(config, List.of(3, 1, 2)))).isEqualTo(0); } @Test void 볼_갯수를_계산할_수_있다() { - BaseballNumber systemNumber = new BaseballNumber(List.of(1, 2, 3)); - - assertThat(systemNumber.countBall(new BaseballNumber(List.of(1, 2, 3)))).isEqualTo(0); - assertThat(systemNumber.countBall(new BaseballNumber(List.of(1, 2, 4)))).isEqualTo(0); - assertThat(systemNumber.countBall(new BaseballNumber(List.of(1, 3, 4)))).isEqualTo(1); - assertThat(systemNumber.countBall(new BaseballNumber(List.of(3, 2, 1)))).isEqualTo(2); - assertThat(systemNumber.countBall(new BaseballNumber(List.of(4, 5, 6)))).isEqualTo(0); - assertThat(systemNumber.countBall(new BaseballNumber(List.of(3, 1, 2)))).isEqualTo(3); + BaseballNumber systemNumber = new BaseballNumber(config, List.of(1, 2, 3)); + + assertThat(systemNumber.countBall(new BaseballNumber(config, List.of(1, 2, 3)))).isEqualTo(0); + assertThat(systemNumber.countBall(new BaseballNumber(config, List.of(1, 2, 4)))).isEqualTo(0); + assertThat(systemNumber.countBall(new BaseballNumber(config, List.of(1, 3, 4)))).isEqualTo(1); + assertThat(systemNumber.countBall(new BaseballNumber(config, List.of(3, 2, 1)))).isEqualTo(2); + assertThat(systemNumber.countBall(new BaseballNumber(config, List.of(4, 5, 6)))).isEqualTo(0); + assertThat(systemNumber.countBall(new BaseballNumber(config, List.of(3, 1, 2)))).isEqualTo(3); } } \ No newline at end of file diff --git a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/mock/TestBaseballNumberGenerator.java b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/mock/TestBaseballNumberGenerator.java index dfb28fc6..309ed63e 100644 --- a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/mock/TestBaseballNumberGenerator.java +++ b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/mock/TestBaseballNumberGenerator.java @@ -1,8 +1,10 @@ package com.kakao.onboarding.precource.dukeyun.baseball.mock; +import java.util.List; + +import com.kakao.onboarding.precource.dukeyun.baseball.baseball.BaseballGameConfig; import com.kakao.onboarding.precource.dukeyun.baseball.baseball.BaseballNumber; import com.kakao.onboarding.precource.dukeyun.baseball.baseball.BaseballNumberGenerator; -import java.util.List; public class TestBaseballNumberGenerator implements BaseballNumberGenerator { private final List fixedNumbers; @@ -13,6 +15,6 @@ public TestBaseballNumberGenerator(List fixedNumbers) { @Override public BaseballNumber generate() { - return new BaseballNumber(fixedNumbers); + return new BaseballNumber(new BaseballGameConfig(3, 1, 9), fixedNumbers); } } \ No newline at end of file From 5043dda3ee14ef625bf1db380fe39f4115422fd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Sun, 8 Feb 2026 23:41:39 +0900 Subject: [PATCH 20/25] =?UTF-8?q?feat:=20=ED=84=B4=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EC=8B=9C=20=EC=9E=AC=EC=8B=9C=EB=8F=84=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dukeyun/baseball/baseball/BaseballNumber.java | 4 ++-- .../baseball/framework/game/turn/TurnBaseGame.java | 14 +++++++++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumber.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumber.java index 2b1b56ed..08173500 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumber.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumber.java @@ -34,7 +34,7 @@ private void checkNumbersRange(List numbers) { private void checkNumberRange(int number) { if (number < config.getMinRange() || config.getMaxRange() < number) { - throw new RuntimeException( + throw new IllegalArgumentException( String.format("숫자 범위는 %d 이상 %d 이하여야 합니다. (문제 숫자: %d)", config.getMinRange(), config.getMaxRange(), number)); } @@ -42,7 +42,7 @@ private void checkNumberRange(int number) { private void checkLength(List numbers) { if (numbers.size() != config.getLength()) { - throw new RuntimeException( + throw new IllegalArgumentException( String.format("숫자야구 길이는 %d이어야 합니다.(현재 길이 : %d)", config.getLength(), numbers.size())); } } diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGame.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGame.java index 0c6d62d8..9d9fbb7d 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGame.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGame.java @@ -22,11 +22,15 @@ public void play() { turnBaseGameView.printStart(); while (true) { - TurnResult turnResult = turnBaseGameService.playTurn(turnBaseGameView.requestTurnInput()); - turnBaseGameView.printResult(turnResult); - if (turnResult.isGameCleared()) { - turnBaseGameView.printClear(); - return; + try { + TurnResult turnResult = turnBaseGameService.playTurn(turnBaseGameView.requestTurnInput()); + turnBaseGameView.printResult(turnResult); + if (turnResult.isGameCleared()) { + turnBaseGameView.printClear(); + return; + } + } catch (IllegalArgumentException e) { + System.out.println("[ERROR] " + e.getMessage()); } } } From f1ba3ac27784cec40d00211cf6588aabb162db53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Sun, 8 Feb 2026 23:44:33 +0900 Subject: [PATCH 21/25] =?UTF-8?q?feat:=20=EC=9E=AC=EC=8B=9C=EC=9E=91=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EC=98=A4=EB=A5=98=20=EC=8B=9C=20=EC=9E=AC?= =?UTF-8?q?=EC=8B=9C=EC=9E=91=20=EC=9E=85=EB=A0=A5=20=EC=9E=AC=EC=8B=9C?= =?UTF-8?q?=EB=8F=84=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/gamesystem/ReplayableGameSystem.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystem.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystem.java index 16afa8a0..1334426f 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystem.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystem.java @@ -18,7 +18,16 @@ public void run() { while (replay) { game.init(); game.play(); - replay = systemView.requestReplayInput(); + replay = inputReplay(); + } + } + + private boolean inputReplay() { + try { + return systemView.requestReplayInput(); + } catch (IllegalArgumentException e) { + System.out.println("[ERROR] " + e.getMessage()); + return inputReplay(); } } } From fd615876f409ac8717143be0ecc4afa7ac472bdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Mon, 9 Feb 2026 11:17:15 +0900 Subject: [PATCH 22/25] =?UTF-8?q?refactor:=20BaseballGameService=20?= =?UTF-8?q?=EA=B8=B0=EB=B3=B8=20=EC=83=9D=EC=84=B1=EC=9E=90=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dukeyun/baseball/baseball/BaseballGameService.java | 4 ---- .../dukeyun/baseball/baseball/BaseballGameServiceTest.java | 7 ++++--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameService.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameService.java index 5d459b9c..0194d676 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameService.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameService.java @@ -10,10 +10,6 @@ public class BaseballGameService implements TurnBaseGameService { private final BaseballNumberGenerator baseballNumberGenerator; private BaseballNumber answer; - public BaseballGameService(BaseballNumberGenerator baseballNumberGenerator) { - this(new BaseballGameConfig(3, 1, 9), baseballNumberGenerator); - } - public BaseballGameService(BaseballGameConfig config, BaseballNumberGenerator baseballNumberGenerator) { this.config = config; this.baseballNumberGenerator = baseballNumberGenerator; diff --git a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameServiceTest.java b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameServiceTest.java index cf4f4a0e..ea1364f7 100644 --- a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameServiceTest.java +++ b/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameServiceTest.java @@ -19,10 +19,11 @@ class BaseballGameServiceTest { @BeforeEach public void init() { - baseballGameService = new BaseballGameService(new TestBaseballNumberGenerator(List.of(1, 2, 3))); - baseballGameService.init(); - baseballGameConfig = new BaseballGameConfig(3, 1, 9); + + baseballGameService = new BaseballGameService(baseballGameConfig, + new TestBaseballNumberGenerator(List.of(1, 2, 3))); + baseballGameService.init(); } @Test From 3b09d5260ac4024369a52c54ca3725692a279d52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Mon, 9 Feb 2026 11:21:41 +0900 Subject: [PATCH 23/25] =?UTF-8?q?refactor:=20RandomBaseballNumberGenerator?= =?UTF-8?q?=20=EA=B8=B0=EB=B3=B8=20=EC=83=9D=EC=84=B1=EC=9E=90=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baseball/baseball/RandomBaseballNumberGenerator.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/RandomBaseballNumberGenerator.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/RandomBaseballNumberGenerator.java index 7d4fad88..59f5fdac 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/RandomBaseballNumberGenerator.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/RandomBaseballNumberGenerator.java @@ -10,10 +10,6 @@ public class RandomBaseballNumberGenerator implements BaseballNumberGenerator { private final BaseballGameConfig config; - public RandomBaseballNumberGenerator() { - this(new BaseballGameConfig(3, 1, 9)); - } - public RandomBaseballNumberGenerator(BaseballGameConfig config) { this.config = config; } From 084c1a5959887eb1259ca831a43cae3e1f7bb64c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Mon, 9 Feb 2026 11:54:31 +0900 Subject: [PATCH 24/25] =?UTF-8?q?refactor:=20GameFactory=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../precource/dukeyun/baseball/GameFactory.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/GameFactory.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/GameFactory.java index b5b385dc..737f437b 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/GameFactory.java +++ b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/GameFactory.java @@ -14,18 +14,19 @@ public class GameFactory { private GameFactory() { } + public static BaseballGameConfig baseballGameConfig() { + return new BaseballGameConfig(3, 1, 9); + } + public static GameSystem createBaseballGameSystem() { - return createBaseballGameSystem(new BaseballGameConfig(3, 1, 9)); + return createBaseballGameSystem(baseballGameConfig()); } public static GameSystem createBaseballGameSystem(BaseballGameConfig config) { - return new ReplayableGameSystem( - new ReplayableGameSystemConsoleView(), - createBaseBallGame(config) - ); + return new ReplayableGameSystem(new ReplayableGameSystemConsoleView(), createBaseballGame(config)); } - private static Game createBaseBallGame(BaseballGameConfig config) { + private static Game createBaseballGame(BaseballGameConfig config) { return new TurnBaseGame( new BaseballGameConsoleView(config), new BaseballGameService(config, new RandomBaseballNumberGenerator(config)) From 970f6133806464d649768b7d4c9012ea31246cda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=8D=95=EC=9C=A4?= Date: Mon, 9 Feb 2026 12:00:50 +0900 Subject: [PATCH 25/25] =?UTF-8?q?refactor:=20=ED=8C=A8=ED=82=A4=EC=A7=80?= =?UTF-8?q?=EB=AA=85=20=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- .../framework/game/turn/TurnInput.java | 4 ---- .../framework/gamesystem/GameSystem.java | 6 ------ .../dukeyun/baseball/App.java | 4 ++-- .../dukeyun/baseball/GameFactory.java | 20 +++++++++---------- .../baseball/baseball/BaseballGameConfig.java | 2 +- .../baseball/BaseballGameConsoleView.java | 10 +++++----- .../baseball/BaseballGameService.java | 8 ++++---- .../baseball/BaseballGameTurnInput.java | 4 ++-- .../baseball/BaseballGameTurnResult.java | 4 ++-- .../baseball/baseball/BaseballNumber.java | 2 +- .../baseball/BaseballNumberGenerator.java | 2 +- .../RandomBaseballNumberGenerator.java | 2 +- .../dukeyun/baseball/framework/game/Game.java | 2 +- .../framework/game/turn/TurnBaseGame.java | 4 ++-- .../game/turn/TurnBaseGameService.java | 2 +- .../framework/game/turn/TurnBaseGameView.java | 2 +- .../framework/game/turn/TurnInput.java | 4 ++++ .../framework/game/turn/TurnResult.java | 2 +- .../framework/gamesystem/GameSystem.java | 6 ++++++ .../gamesystem/ReplayableGameSystem.java | 4 ++-- .../ReplayableGameSystemConsoleView.java | 4 ++-- .../gamesystem/ReplayableGameSystemView.java | 2 +- .../dukeyun/baseball/utils/Console.java | 2 +- .../baseball/BaseballGameServiceTest.java | 4 ++-- .../baseball/BaseballGameTurnInputTest.java | 2 +- .../baseball/baseball/BaseballNumberTest.java | 2 +- .../mock/TestBaseballNumberGenerator.java | 8 ++++---- 28 files changed, 60 insertions(+), 60 deletions(-) delete mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnInput.java delete mode 100644 src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/GameSystem.java rename src/main/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/App.java (61%) rename src/main/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/GameFactory.java (59%) rename src/main/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/baseball/BaseballGameConfig.java (95%) rename src/main/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/baseball/BaseballGameConsoleView.java (84%) rename src/main/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/baseball/BaseballGameService.java (82%) rename src/main/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/baseball/BaseballGameTurnInput.java (87%) rename src/main/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/baseball/BaseballGameTurnResult.java (79%) rename src/main/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/baseball/BaseballNumber.java (97%) rename src/main/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/baseball/BaseballNumberGenerator.java (54%) rename src/main/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/baseball/RandomBaseballNumberGenerator.java (91%) rename src/main/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/framework/game/Game.java (50%) rename src/main/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/framework/game/turn/TurnBaseGame.java (87%) rename src/main/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/framework/game/turn/TurnBaseGameService.java (64%) rename src/main/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/framework/game/turn/TurnBaseGameView.java (72%) create mode 100644 src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/game/turn/TurnInput.java rename src/main/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/framework/game/turn/TurnResult.java (53%) create mode 100644 src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/gamesystem/GameSystem.java rename src/main/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/framework/gamesystem/ReplayableGameSystem.java (83%) rename src/main/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/framework/gamesystem/ReplayableGameSystemConsoleView.java (86%) rename src/main/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/framework/gamesystem/ReplayableGameSystemView.java (59%) rename src/main/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/utils/Console.java (75%) rename src/test/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/baseball/BaseballGameServiceTest.java (95%) rename src/test/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/baseball/BaseballGameTurnInputTest.java (89%) rename src/test/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/baseball/BaseballNumberTest.java (97%) rename src/test/java/com/kakao/onboarding/{precource => precourse}/dukeyun/baseball/mock/TestBaseballNumberGenerator.java (63%) diff --git a/build.gradle b/build.gradle index 20a92c9e..f1bc0591 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ plugins { id 'java' } -group = 'camp.nextstep.edu' +group = 'com.kakao.onboarding.precourse.dukeyun' version = '1.0-SNAPSHOT' java { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnInput.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnInput.java deleted file mode 100644 index 156ba7e0..00000000 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnInput.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn; - -public interface TurnInput { -} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/GameSystem.java b/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/GameSystem.java deleted file mode 100644 index 9f206265..00000000 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/GameSystem.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.framework.gamesystem; - -public interface GameSystem { - - void run(); -} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/App.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/App.java similarity index 61% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/App.java rename to src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/App.java index fbdff3cd..02094cb4 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/App.java +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/App.java @@ -1,6 +1,6 @@ -package com.kakao.onboarding.precource.dukeyun.baseball; +package com.kakao.onboarding.precourse.dukeyun.baseball; -import com.kakao.onboarding.precource.dukeyun.baseball.framework.gamesystem.GameSystem; +import com.kakao.onboarding.precourse.dukeyun.baseball.framework.gamesystem.GameSystem; public class App { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/GameFactory.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/GameFactory.java similarity index 59% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/GameFactory.java rename to src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/GameFactory.java index 737f437b..bbda4af9 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/GameFactory.java +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/GameFactory.java @@ -1,14 +1,14 @@ -package com.kakao.onboarding.precource.dukeyun.baseball; +package com.kakao.onboarding.precourse.dukeyun.baseball; -import com.kakao.onboarding.precource.dukeyun.baseball.baseball.BaseballGameConfig; -import com.kakao.onboarding.precource.dukeyun.baseball.baseball.BaseballGameConsoleView; -import com.kakao.onboarding.precource.dukeyun.baseball.baseball.BaseballGameService; -import com.kakao.onboarding.precource.dukeyun.baseball.baseball.RandomBaseballNumberGenerator; -import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.Game; -import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn.TurnBaseGame; -import com.kakao.onboarding.precource.dukeyun.baseball.framework.gamesystem.GameSystem; -import com.kakao.onboarding.precource.dukeyun.baseball.framework.gamesystem.ReplayableGameSystem; -import com.kakao.onboarding.precource.dukeyun.baseball.framework.gamesystem.ReplayableGameSystemConsoleView; +import com.kakao.onboarding.precourse.dukeyun.baseball.baseball.BaseballGameConfig; +import com.kakao.onboarding.precourse.dukeyun.baseball.baseball.BaseballGameConsoleView; +import com.kakao.onboarding.precourse.dukeyun.baseball.baseball.BaseballGameService; +import com.kakao.onboarding.precourse.dukeyun.baseball.baseball.RandomBaseballNumberGenerator; +import com.kakao.onboarding.precourse.dukeyun.baseball.framework.game.Game; +import com.kakao.onboarding.precourse.dukeyun.baseball.framework.game.turn.TurnBaseGame; +import com.kakao.onboarding.precourse.dukeyun.baseball.framework.gamesystem.GameSystem; +import com.kakao.onboarding.precourse.dukeyun.baseball.framework.gamesystem.ReplayableGameSystem; +import com.kakao.onboarding.precourse.dukeyun.baseball.framework.gamesystem.ReplayableGameSystemConsoleView; public class GameFactory { private GameFactory() { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConfig.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameConfig.java similarity index 95% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConfig.java rename to src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameConfig.java index fbd4d660..07b8f282 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConfig.java +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameConfig.java @@ -1,4 +1,4 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.baseball; +package com.kakao.onboarding.precourse.dukeyun.baseball.baseball; public class BaseballGameConfig { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConsoleView.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameConsoleView.java similarity index 84% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConsoleView.java rename to src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameConsoleView.java index 5cf35470..c454554b 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConsoleView.java +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameConsoleView.java @@ -1,9 +1,9 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.baseball; +package com.kakao.onboarding.precourse.dukeyun.baseball.baseball; -import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn.TurnBaseGameView; -import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn.TurnInput; -import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn.TurnResult; -import com.kakao.onboarding.precource.dukeyun.baseball.utils.Console; +import com.kakao.onboarding.precourse.dukeyun.baseball.framework.game.turn.TurnBaseGameView; +import com.kakao.onboarding.precourse.dukeyun.baseball.framework.game.turn.TurnInput; +import com.kakao.onboarding.precourse.dukeyun.baseball.framework.game.turn.TurnResult; +import com.kakao.onboarding.precourse.dukeyun.baseball.utils.Console; public class BaseballGameConsoleView implements TurnBaseGameView { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameService.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameService.java similarity index 82% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameService.java rename to src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameService.java index 0194d676..53305bfa 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameService.java +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameService.java @@ -1,8 +1,8 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.baseball; +package com.kakao.onboarding.precourse.dukeyun.baseball.baseball; -import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn.TurnBaseGameService; -import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn.TurnInput; -import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn.TurnResult; +import com.kakao.onboarding.precourse.dukeyun.baseball.framework.game.turn.TurnBaseGameService; +import com.kakao.onboarding.precourse.dukeyun.baseball.framework.game.turn.TurnInput; +import com.kakao.onboarding.precourse.dukeyun.baseball.framework.game.turn.TurnResult; public class BaseballGameService implements TurnBaseGameService { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInput.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameTurnInput.java similarity index 87% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInput.java rename to src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameTurnInput.java index 36584801..b2ca7a4d 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInput.java +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameTurnInput.java @@ -1,9 +1,9 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.baseball; +package com.kakao.onboarding.precourse.dukeyun.baseball.baseball; import java.util.ArrayList; import java.util.List; -import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn.TurnInput; +import com.kakao.onboarding.precourse.dukeyun.baseball.framework.game.turn.TurnInput; public class BaseballGameTurnInput implements TurnInput { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnResult.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameTurnResult.java similarity index 79% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnResult.java rename to src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameTurnResult.java index 706b43d2..c58548b5 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnResult.java +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameTurnResult.java @@ -1,6 +1,6 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.baseball; +package com.kakao.onboarding.precourse.dukeyun.baseball.baseball; -import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn.TurnResult; +import com.kakao.onboarding.precourse.dukeyun.baseball.framework.game.turn.TurnResult; public class BaseballGameTurnResult implements TurnResult { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumber.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballNumber.java similarity index 97% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumber.java rename to src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballNumber.java index 08173500..c63ca3e2 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumber.java +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballNumber.java @@ -1,4 +1,4 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.baseball; +package com.kakao.onboarding.precourse.dukeyun.baseball.baseball; import java.util.List; diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumberGenerator.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballNumberGenerator.java similarity index 54% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumberGenerator.java rename to src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballNumberGenerator.java index 462a9bcf..25d63605 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumberGenerator.java +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballNumberGenerator.java @@ -1,4 +1,4 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.baseball; +package com.kakao.onboarding.precourse.dukeyun.baseball.baseball; public interface BaseballNumberGenerator { BaseballNumber generate(); diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/RandomBaseballNumberGenerator.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/RandomBaseballNumberGenerator.java similarity index 91% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/RandomBaseballNumberGenerator.java rename to src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/RandomBaseballNumberGenerator.java index 59f5fdac..a418d923 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/RandomBaseballNumberGenerator.java +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/RandomBaseballNumberGenerator.java @@ -1,4 +1,4 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.baseball; +package com.kakao.onboarding.precourse.dukeyun.baseball.baseball; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/Game.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/game/Game.java similarity index 50% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/Game.java rename to src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/game/Game.java index 9f2986e8..8e992f85 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/Game.java +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/game/Game.java @@ -1,4 +1,4 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.framework.game; +package com.kakao.onboarding.precourse.dukeyun.baseball.framework.game; public interface Game { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGame.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/game/turn/TurnBaseGame.java similarity index 87% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGame.java rename to src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/game/turn/TurnBaseGame.java index 9d9fbb7d..53120b99 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGame.java +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/game/turn/TurnBaseGame.java @@ -1,6 +1,6 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn; +package com.kakao.onboarding.precourse.dukeyun.baseball.framework.game.turn; -import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.Game; +import com.kakao.onboarding.precourse.dukeyun.baseball.framework.game.Game; public class TurnBaseGame implements Game { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGameService.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/game/turn/TurnBaseGameService.java similarity index 64% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGameService.java rename to src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/game/turn/TurnBaseGameService.java index 454395f9..eae18abf 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGameService.java +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/game/turn/TurnBaseGameService.java @@ -1,4 +1,4 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn; +package com.kakao.onboarding.precourse.dukeyun.baseball.framework.game.turn; public interface TurnBaseGameService { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGameView.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/game/turn/TurnBaseGameView.java similarity index 72% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGameView.java rename to src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/game/turn/TurnBaseGameView.java index d925c48f..4c883dd5 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnBaseGameView.java +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/game/turn/TurnBaseGameView.java @@ -1,4 +1,4 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn; +package com.kakao.onboarding.precourse.dukeyun.baseball.framework.game.turn; public interface TurnBaseGameView { diff --git a/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/game/turn/TurnInput.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/game/turn/TurnInput.java new file mode 100644 index 00000000..714d476b --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/game/turn/TurnInput.java @@ -0,0 +1,4 @@ +package com.kakao.onboarding.precourse.dukeyun.baseball.framework.game.turn; + +public interface TurnInput { +} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnResult.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/game/turn/TurnResult.java similarity index 53% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnResult.java rename to src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/game/turn/TurnResult.java index 9d40b62d..f2791dda 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/game/turn/TurnResult.java +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/game/turn/TurnResult.java @@ -1,4 +1,4 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.framework.game.turn; +package com.kakao.onboarding.precourse.dukeyun.baseball.framework.game.turn; public interface TurnResult { diff --git a/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/gamesystem/GameSystem.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/gamesystem/GameSystem.java new file mode 100644 index 00000000..df241c1c --- /dev/null +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/gamesystem/GameSystem.java @@ -0,0 +1,6 @@ +package com.kakao.onboarding.precourse.dukeyun.baseball.framework.gamesystem; + +public interface GameSystem { + + void run(); +} diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystem.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/gamesystem/ReplayableGameSystem.java similarity index 83% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystem.java rename to src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/gamesystem/ReplayableGameSystem.java index 1334426f..8f6e24d9 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystem.java +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/gamesystem/ReplayableGameSystem.java @@ -1,6 +1,6 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.framework.gamesystem; +package com.kakao.onboarding.precourse.dukeyun.baseball.framework.gamesystem; -import com.kakao.onboarding.precource.dukeyun.baseball.framework.game.Game; +import com.kakao.onboarding.precourse.dukeyun.baseball.framework.game.Game; public class ReplayableGameSystem implements GameSystem { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystemConsoleView.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/gamesystem/ReplayableGameSystemConsoleView.java similarity index 86% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystemConsoleView.java rename to src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/gamesystem/ReplayableGameSystemConsoleView.java index 9375a321..82549076 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystemConsoleView.java +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/gamesystem/ReplayableGameSystemConsoleView.java @@ -1,6 +1,6 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.framework.gamesystem; +package com.kakao.onboarding.precourse.dukeyun.baseball.framework.gamesystem; -import com.kakao.onboarding.precource.dukeyun.baseball.utils.Console; +import com.kakao.onboarding.precourse.dukeyun.baseball.utils.Console; public class ReplayableGameSystemConsoleView implements ReplayableGameSystemView { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystemView.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/gamesystem/ReplayableGameSystemView.java similarity index 59% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystemView.java rename to src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/gamesystem/ReplayableGameSystemView.java index a0ff14cc..0c21fc75 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/framework/gamesystem/ReplayableGameSystemView.java +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/framework/gamesystem/ReplayableGameSystemView.java @@ -1,4 +1,4 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.framework.gamesystem; +package com.kakao.onboarding.precourse.dukeyun.baseball.framework.gamesystem; public interface ReplayableGameSystemView { diff --git a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/utils/Console.java b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/utils/Console.java similarity index 75% rename from src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/utils/Console.java rename to src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/utils/Console.java index f04fcdb2..9205ada8 100644 --- a/src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/utils/Console.java +++ b/src/main/java/com/kakao/onboarding/precourse/dukeyun/baseball/utils/Console.java @@ -1,4 +1,4 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.utils; +package com.kakao.onboarding.precourse.dukeyun.baseball.utils; import java.util.Scanner; diff --git a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameServiceTest.java b/src/test/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameServiceTest.java similarity index 95% rename from src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameServiceTest.java rename to src/test/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameServiceTest.java index ea1364f7..0e43dad4 100644 --- a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameServiceTest.java +++ b/src/test/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameServiceTest.java @@ -1,4 +1,4 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.baseball; +package com.kakao.onboarding.precourse.dukeyun.baseball.baseball; import static org.assertj.core.api.Assertions.*; @@ -9,7 +9,7 @@ import org.junit.jupiter.api.DisplayNameGenerator; import org.junit.jupiter.api.Test; -import com.kakao.onboarding.precource.dukeyun.baseball.mock.TestBaseballNumberGenerator; +import com.kakao.onboarding.precourse.dukeyun.baseball.mock.TestBaseballNumberGenerator; @DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) class BaseballGameServiceTest { diff --git a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInputTest.java b/src/test/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameTurnInputTest.java similarity index 89% rename from src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInputTest.java rename to src/test/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameTurnInputTest.java index 550150d9..768bf9f3 100644 --- a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInputTest.java +++ b/src/test/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballGameTurnInputTest.java @@ -1,4 +1,4 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.baseball; +package com.kakao.onboarding.precourse.dukeyun.baseball.baseball; import static org.assertj.core.api.Assertions.*; diff --git a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumberTest.java b/src/test/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballNumberTest.java similarity index 97% rename from src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumberTest.java rename to src/test/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballNumberTest.java index 75ba4392..406772e6 100644 --- a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumberTest.java +++ b/src/test/java/com/kakao/onboarding/precourse/dukeyun/baseball/baseball/BaseballNumberTest.java @@ -1,4 +1,4 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.baseball; +package com.kakao.onboarding.precourse.dukeyun.baseball.baseball; import static org.assertj.core.api.Assertions.*; diff --git a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/mock/TestBaseballNumberGenerator.java b/src/test/java/com/kakao/onboarding/precourse/dukeyun/baseball/mock/TestBaseballNumberGenerator.java similarity index 63% rename from src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/mock/TestBaseballNumberGenerator.java rename to src/test/java/com/kakao/onboarding/precourse/dukeyun/baseball/mock/TestBaseballNumberGenerator.java index 309ed63e..494f5603 100644 --- a/src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/mock/TestBaseballNumberGenerator.java +++ b/src/test/java/com/kakao/onboarding/precourse/dukeyun/baseball/mock/TestBaseballNumberGenerator.java @@ -1,10 +1,10 @@ -package com.kakao.onboarding.precource.dukeyun.baseball.mock; +package com.kakao.onboarding.precourse.dukeyun.baseball.mock; import java.util.List; -import com.kakao.onboarding.precource.dukeyun.baseball.baseball.BaseballGameConfig; -import com.kakao.onboarding.precource.dukeyun.baseball.baseball.BaseballNumber; -import com.kakao.onboarding.precource.dukeyun.baseball.baseball.BaseballNumberGenerator; +import com.kakao.onboarding.precourse.dukeyun.baseball.baseball.BaseballGameConfig; +import com.kakao.onboarding.precourse.dukeyun.baseball.baseball.BaseballNumber; +import com.kakao.onboarding.precourse.dukeyun.baseball.baseball.BaseballNumberGenerator; public class TestBaseballNumberGenerator implements BaseballNumberGenerator { private final List fixedNumbers;