From 8987d551137bc2e16f1105fb051a3280aab5de35 Mon Sep 17 00:00:00 2001 From: hyxklee Date: Tue, 16 Apr 2024 16:06:26 +0900 Subject: [PATCH 01/16] =?UTF-8?q?=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=20?= =?UTF-8?q?=EB=B6=84=EC=84=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 23 +++++++++++ .../java/leets/land/UpdownApplication.java | 39 ++++++++++++++++++- 2 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 docs/README.md diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..5825320 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,23 @@ +# Leets 미션 1주차 +## Up - Down Game + +### 기능 +- 버전 분리(영어, 숫자) +- 입력값과 비교해 결과를 반환 + - 사용자 입력 횟수를 기억하고, 범위를 최신화하여 다시 입력받을 수 있어야함 + +### 구현 +[Domain] +- 도메인이 필요할까 고민 + +[Service] +- 숫자, 영어 버전을 구현체로 나누기 +- or 내부 클래스 안에서 버전 선택하기 + +[View] +- InputView: 사용자에게 입력을 받고 컨트롤러로 전달 + - 버전, 정답을 입력받음 + - 잘못된 입력시 예외처리 +- OutputView: 결과를 사용자에게 출력 + - 영어, 숫자 버전 별로 받은 중간 결과를 어떻게 출력할까? + diff --git a/src/main/java/leets/land/UpdownApplication.java b/src/main/java/leets/land/UpdownApplication.java index 09d7ae5..796945f 100644 --- a/src/main/java/leets/land/UpdownApplication.java +++ b/src/main/java/leets/land/UpdownApplication.java @@ -1,8 +1,43 @@ package leets.land; +import java.util.Random; +import java.util.Scanner; + public class UpdownApplication { + Random random = new Random(); + Scanner scan = new Scanner(System.in); + //실행부 + public void run() { + //버전 입력 + int version = scan.nextInt(); + //정답 입력 + + //정답 출력 + } + + //무작위 수 반환 + public int generateRandomNum(){ + int randomNum = (random.nextInt(100)+1); + return randomNum; + } + + //무작위 알파벳 반환 + public char generateRandomChar() { + if(random.nextBoolean()){ + return (char) (random.nextInt(26) + 65); + } + else{ + return (char) (random.nextInt(26) + 97); + } + } + - public static void main(String[] args) { - System.out.print("hihi :D"); + public static void main(String[] args) { + UpdownApplication app = new UpdownApplication(); + app.run(); } } + + + + From a093543965276801b7124c62f7fe9b23117f647e Mon Sep 17 00:00:00 2001 From: hyxklee Date: Tue, 16 Apr 2024 16:29:21 +0900 Subject: [PATCH 02/16] =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC,=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=20=EC=A0=84=20=EA=B8=B0=EB=8A=A5=20=ED=8C=8C=EC=95=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 9 +++++++++ .../java/leets/land/controller/MatchController.java | 7 +++++++ src/main/java/leets/land/service/GameService.java | 4 ++++ src/main/java/leets/land/view/InputView.java | 11 +++++++++++ src/main/java/leets/land/view/OutputView.java | 7 +++++++ 5 files changed, 38 insertions(+) create mode 100644 src/main/java/leets/land/controller/MatchController.java create mode 100644 src/main/java/leets/land/service/GameService.java create mode 100644 src/main/java/leets/land/view/InputView.java create mode 100644 src/main/java/leets/land/view/OutputView.java diff --git a/docs/README.md b/docs/README.md index 5825320..1d00eb6 100644 --- a/docs/README.md +++ b/docs/README.md @@ -21,3 +21,12 @@ - OutputView: 결과를 사용자에게 출력 - 영어, 숫자 버전 별로 받은 중간 결과를 어떻게 출력할까? +[Controller] +- 입력을 받아 서비스에 전달 +- 서비스 결과를 받아 출력에 전달 + +[예외처리] +- [ERROR] 범위 내의 숫자를 입력하세요. +- [ERROR] 범위 내의 알파벳을 입력하세요. + - 이 두 예외는 어디서 처리? InputView? + diff --git a/src/main/java/leets/land/controller/MatchController.java b/src/main/java/leets/land/controller/MatchController.java new file mode 100644 index 0000000..a38e5f5 --- /dev/null +++ b/src/main/java/leets/land/controller/MatchController.java @@ -0,0 +1,7 @@ +package leets.land.controller; + +public class MatchController { + //버전을 입력 받아 서비스에 전달 + + //서비스에서 돌린 중간 결과를 전달받아 outputview로 출력 +} diff --git a/src/main/java/leets/land/service/GameService.java b/src/main/java/leets/land/service/GameService.java new file mode 100644 index 0000000..f4355d1 --- /dev/null +++ b/src/main/java/leets/land/service/GameService.java @@ -0,0 +1,4 @@ +package leets.land.service; + +public class GameService { +} diff --git a/src/main/java/leets/land/view/InputView.java b/src/main/java/leets/land/view/InputView.java new file mode 100644 index 0000000..8e96e9a --- /dev/null +++ b/src/main/java/leets/land/view/InputView.java @@ -0,0 +1,11 @@ +package leets.land.view; + +public class InputView { + //초기 화면 출력 + + //숫자, 영어 버전 입력 + + //정답 입력 + + //입력 예외처리 +} diff --git a/src/main/java/leets/land/view/OutputView.java b/src/main/java/leets/land/view/OutputView.java new file mode 100644 index 0000000..574ec50 --- /dev/null +++ b/src/main/java/leets/land/view/OutputView.java @@ -0,0 +1,7 @@ +package leets.land.view; + +public class OutputView { + //중간 정답 출력(범위 포함) + + //마지막 정답 출력 +} From ef508697020356147e777d0866a5822706792003 Mon Sep 17 00:00:00 2001 From: hyxklee Date: Wed, 17 Apr 2024 00:08:59 +0900 Subject: [PATCH 03/16] =?UTF-8?q?feat:=20InputView=20=EC=88=AB=EC=9E=90,?= =?UTF-8?q?=20=EC=98=81=EC=96=B4=20=EB=B2=84=EC=A0=84=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=EB=B0=9B=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=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 --- docs/README.md | 13 ++++++++++++ .../land/controller/MatchController.java | 21 ++++++++++++++++++- .../leets/land/service/CharGameService.java | 4 ++++ .../java/leets/land/service/GameService.java | 7 ++++++- .../leets/land/service/NumgameService.java | 4 ++++ src/main/java/leets/land/view/InputView.java | 17 +++++++++++++-- src/main/java/leets/land/view/OutputView.java | 4 ++++ 7 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 src/main/java/leets/land/service/CharGameService.java create mode 100644 src/main/java/leets/land/service/NumgameService.java diff --git a/docs/README.md b/docs/README.md index 1d00eb6..cf3c73c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -5,10 +5,13 @@ - 버전 분리(영어, 숫자) - 입력값과 비교해 결과를 반환 - 사용자 입력 횟수를 기억하고, 범위를 최신화하여 다시 입력받을 수 있어야함 +- 숫자 버전과 영어 버전을 나눌 때 입력과 출력을 하나로 하려면 어떻게 해야할까 + - 영어 -> 숫자로 변환하여 전달? ### 구현 [Domain] - 도메인이 필요할까 고민 +- -> dto 느낌? [Service] - 숫자, 영어 버전을 구현체로 나누기 @@ -30,3 +33,13 @@ - [ERROR] 범위 내의 알파벳을 입력하세요. - 이 두 예외는 어디서 처리? InputView? +[개인내용] +- commit 메시지 + - feat: 새로운 기능 + - fix: 버그 수정 + - docs: 문서 변경 + - 스타일: 코드의 의미에 영향을 주지 않는 변경 사항(예: 서식 지정) + - refactor: 코드 리팩토링 + - test: 테스트 추가 또는 수정 + - chore: 빌드 프로세스, CI 구성 등이 변경됩니다. + diff --git a/src/main/java/leets/land/controller/MatchController.java b/src/main/java/leets/land/controller/MatchController.java index a38e5f5..2cdaac1 100644 --- a/src/main/java/leets/land/controller/MatchController.java +++ b/src/main/java/leets/land/controller/MatchController.java @@ -1,7 +1,26 @@ package leets.land.controller; +import leets.land.service.GameService; +import leets.land.view.InputView; +import leets.land.view.OutputView; + +import java.lang.reflect.GenericArrayType; + public class MatchController { - //버전을 입력 받아 서비스에 전달 + private final InputView inputView = new InputView(); + private final OutputView outputView = new OutputView(); + + private final GameService gameService; + + public MatchController() { + + } + + //버전을 입력 받아 서비스에 전달 + private //서비스에서 돌린 중간 결과를 전달받아 outputview로 출력 + public void runApp(){ + + } } diff --git a/src/main/java/leets/land/service/CharGameService.java b/src/main/java/leets/land/service/CharGameService.java new file mode 100644 index 0000000..6563d99 --- /dev/null +++ b/src/main/java/leets/land/service/CharGameService.java @@ -0,0 +1,4 @@ +package leets.land.service; + +public class CharGameService implements GameService{ +} diff --git a/src/main/java/leets/land/service/GameService.java b/src/main/java/leets/land/service/GameService.java index f4355d1..f7fff74 100644 --- a/src/main/java/leets/land/service/GameService.java +++ b/src/main/java/leets/land/service/GameService.java @@ -1,4 +1,9 @@ package leets.land.service; -public class GameService { +public interface GameService { + //난수발생 + + //정답확인 + + // } diff --git a/src/main/java/leets/land/service/NumgameService.java b/src/main/java/leets/land/service/NumgameService.java new file mode 100644 index 0000000..c920cbf --- /dev/null +++ b/src/main/java/leets/land/service/NumgameService.java @@ -0,0 +1,4 @@ +package leets.land.service; + +public class NumgameService implements GameService{ +} diff --git a/src/main/java/leets/land/view/InputView.java b/src/main/java/leets/land/view/InputView.java index 8e96e9a..cc7b346 100644 --- a/src/main/java/leets/land/view/InputView.java +++ b/src/main/java/leets/land/view/InputView.java @@ -1,11 +1,24 @@ package leets.land.view; +import java.util.Scanner; + public class InputView { - //초기 화면 출력 + + private final Scanner scan = new Scanner(System.in); //숫자, 영어 버전 입력 + public int inputVersionNum(){ + System.out.print("게임 버전을 입력해주세요 (숫자: 1, 영어: 2): "); + int VersionNum = scan.nextInt(); + return VersionNum; + } - //정답 입력 + //초기 정답 입력 + public int inputNumericAnswer(){ + System.out.print("정답을 입력해주세요: "); + int numericAnswer = scan.nextInt(); + return numericAnswer; + } //입력 예외처리 } diff --git a/src/main/java/leets/land/view/OutputView.java b/src/main/java/leets/land/view/OutputView.java index 574ec50..05a806a 100644 --- a/src/main/java/leets/land/view/OutputView.java +++ b/src/main/java/leets/land/view/OutputView.java @@ -1,6 +1,10 @@ package leets.land.view; public class OutputView { + //초기 화면 출력 + public void printStartMessage(){ + System.out.println("Up-Down 게임을 시작합니다"); + } //중간 정답 출력(범위 포함) //마지막 정답 출력 From 35077ae8c9bfd66af1d4db7b398c929bf39e6de3 Mon Sep 17 00:00:00 2001 From: hyxklee Date: Wed, 17 Apr 2024 10:27:55 +0900 Subject: [PATCH 04/16] =?UTF-8?q?test(InputView):=20=EB=B2=84=EC=A0=84=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EB=B2=94=EC=9C=84=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=ED=99=95=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/{README.md => STUDY.md} | 4 +- .../java/leets/land/UpdownApplication.java | 33 ++---------- .../land/controller/MatchController.java | 18 +++++-- .../leets/land/service/NumgameService.java | 54 +++++++++++++++++++ src/main/java/leets/land/view/InputView.java | 16 +++++- .../java/leets/land/view/InputViewTest.java | 25 +++++++++ 6 files changed, 114 insertions(+), 36 deletions(-) rename docs/{README.md => STUDY.md} (83%) create mode 100644 src/test/java/leets/land/view/InputViewTest.java diff --git a/docs/README.md b/docs/STUDY.md similarity index 83% rename from docs/README.md rename to docs/STUDY.md index cf3c73c..05ff4ff 100644 --- a/docs/README.md +++ b/docs/STUDY.md @@ -1,4 +1,4 @@ -# Leets 미션 1주차 +# Leets 2주차 미션 ## Up - Down Game ### 기능 @@ -27,6 +27,8 @@ [Controller] - 입력을 받아 서비스에 전달 - 서비스 결과를 받아 출력에 전달 +- 입력을 반복적으로 받아야하는 프로그램의 입장에서 view -> controller -> service -> controller -> output의 구조가 효율적일까? +- 게임이 계속 추가된다면 서비스만 추가하면 되니까 괜찮을 거 같기도 함 [예외처리] - [ERROR] 범위 내의 숫자를 입력하세요. diff --git a/src/main/java/leets/land/UpdownApplication.java b/src/main/java/leets/land/UpdownApplication.java index 796945f..260266e 100644 --- a/src/main/java/leets/land/UpdownApplication.java +++ b/src/main/java/leets/land/UpdownApplication.java @@ -1,40 +1,15 @@ package leets.land; -import java.util.Random; -import java.util.Scanner; -public class UpdownApplication { - Random random = new Random(); - Scanner scan = new Scanner(System.in); - //실행부 - public void run() { - //버전 입력 - int version = scan.nextInt(); - //정답 입력 - - //정답 출력 - } +import leets.land.controller.MatchController; - //무작위 수 반환 - public int generateRandomNum(){ - int randomNum = (random.nextInt(100)+1); - return randomNum; - } +public class UpdownApplication { - //무작위 알파벳 반환 - public char generateRandomChar() { - if(random.nextBoolean()){ - return (char) (random.nextInt(26) + 65); - } - else{ - return (char) (random.nextInt(26) + 97); - } - } public static void main(String[] args) { - UpdownApplication app = new UpdownApplication(); - app.run(); + MatchController matchController = new MatchController(); + matchController.runApp(); } } diff --git a/src/main/java/leets/land/controller/MatchController.java b/src/main/java/leets/land/controller/MatchController.java index 2cdaac1..525d5e2 100644 --- a/src/main/java/leets/land/controller/MatchController.java +++ b/src/main/java/leets/land/controller/MatchController.java @@ -1,6 +1,8 @@ package leets.land.controller; +import leets.land.service.CharGameService; import leets.land.service.GameService; +import leets.land.service.NumgameService; import leets.land.view.InputView; import leets.land.view.OutputView; @@ -11,16 +13,24 @@ public class MatchController { private final InputView inputView = new InputView(); private final OutputView outputView = new OutputView(); - private final GameService gameService; - public MatchController() { - } //버전을 입력 받아 서비스에 전달 - private + //서비스에서 돌린 중간 결과를 전달받아 outputview로 출력 public void runApp(){ + int versionNum = inputView.inputVersionNum(); + + if(versionNum == 1){ + + } else if (versionNum == 2) { + + } } + + + + } diff --git a/src/main/java/leets/land/service/NumgameService.java b/src/main/java/leets/land/service/NumgameService.java index c920cbf..0769fee 100644 --- a/src/main/java/leets/land/service/NumgameService.java +++ b/src/main/java/leets/land/service/NumgameService.java @@ -1,4 +1,58 @@ package leets.land.service; +import leets.land.view.InputView; + +import java.util.Scanner; + public class NumgameService implements GameService{ +// public static Scanner scan = new Scanner(System.in); +// private final InputView inputView = new InputView(); +// public static int low = 0; +// public static int high = 100; +// // 난수발생 +// +// // 입력값이 들어오면 값을 확인. +// +// +// public int generateRandomNum(){ +// int randomNum = (int) (Math.random() * 100) + 1; +// return randomNum; +// } +// +// public boolean checkValidNum(int targetNum, int inputNumAnswer){ +// if(inputNumAnswer==targetNum){ +// System.out.println("정답입니다! "); +// return true; +// } else if (inputNumAnswer < targetNum) { // 정답 67, 입력 34 +// low = inputNumAnswer; +// System.out.println("틀렸습니다. 정답을 다시 입력하세요( " + low + "부터 " + high + "사이 )"); +// return false; +// }else { +// high = inputNumAnswer; +// System.out.println("틀렸습니다. 정답을 다시 입력하세요( " + low + "부터 " + high + "사이 )"); +// return false; +// } +// }//low 와 high 사이값을 입력하지 않으면 예외 날리기. +// +// public void checkNum(int num){ +// if((low>num)||(num>high)){ +// throw new IllegalArgumentException(); +// } +// } +// +// public static void main(String[] args) { +// NumgameService numgameService = new NumgameService(); +// int num = numgameService.generateRandomNum(); +// System.out.println(num); +// +// boolean tf = false; +// int answer; +// System.out.print("정답을 입력해주세요(1-100사이): "); +// try{ +// numgameService.checkNum(answer); +// numgameService.checkValidNum(num, answer); +// }catch (IllegalArgumentException e){ +// +// } +// } } diff --git a/src/main/java/leets/land/view/InputView.java b/src/main/java/leets/land/view/InputView.java index cc7b346..9ff1e02 100644 --- a/src/main/java/leets/land/view/InputView.java +++ b/src/main/java/leets/land/view/InputView.java @@ -9,8 +9,20 @@ public class InputView { //숫자, 영어 버전 입력 public int inputVersionNum(){ System.out.print("게임 버전을 입력해주세요 (숫자: 1, 영어: 2): "); - int VersionNum = scan.nextInt(); - return VersionNum; + int versionNum = scan.nextInt(); + try{ + validVersionNum(versionNum); + return versionNum; + } catch (IllegalArgumentException e){ + System.out.println(e.getMessage()); + return inputVersionNum(); + } + } + + public void validVersionNum(int versionNum){ + if(versionNum!=1&&versionNum!=2){ + throw new IllegalArgumentException("버전은 1 또는 2만 입력해주세요. "); + } } //초기 정답 입력 diff --git a/src/test/java/leets/land/view/InputViewTest.java b/src/test/java/leets/land/view/InputViewTest.java new file mode 100644 index 0000000..07be2b4 --- /dev/null +++ b/src/test/java/leets/land/view/InputViewTest.java @@ -0,0 +1,25 @@ +package leets.land.view; + +import leets.land.UpdownApplication; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class InputViewTest { + + UpdownApplication app; + InputView inputView; + + @BeforeEach + void setUp(){ + app = new UpdownApplication(); + inputView = new InputView(); + } + + @Test + void 버전_입력_범위_확인(){ + IllegalArgumentException e = assertThrows(IllegalArgumentException.class, ()-> + inputView.validVersionNum(0) ); + } +} \ No newline at end of file From 43debd476a44f0e1d4a146ae656311dd5a2936f1 Mon Sep 17 00:00:00 2001 From: hyxklee Date: Wed, 17 Apr 2024 11:08:07 +0900 Subject: [PATCH 05/16] =?UTF-8?q?test(GameController):=20=EB=B2=94?= =?UTF-8?q?=EC=9C=84=EC=97=90=20=EB=A7=9E=EB=8A=94=20=EC=88=AB=EC=9E=90=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=ED=85=8C=EC=8A=A4=ED=8A=B8=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 --- .../controller/{MatchController.java => GameController.java} | 0 src/test/java/leets/land/controller/GameControllerTest.java | 4 ++++ 2 files changed, 4 insertions(+) rename src/main/java/leets/land/controller/{MatchController.java => GameController.java} (100%) create mode 100644 src/test/java/leets/land/controller/GameControllerTest.java diff --git a/src/main/java/leets/land/controller/MatchController.java b/src/main/java/leets/land/controller/GameController.java similarity index 100% rename from src/main/java/leets/land/controller/MatchController.java rename to src/main/java/leets/land/controller/GameController.java diff --git a/src/test/java/leets/land/controller/GameControllerTest.java b/src/test/java/leets/land/controller/GameControllerTest.java new file mode 100644 index 0000000..0a07a2d --- /dev/null +++ b/src/test/java/leets/land/controller/GameControllerTest.java @@ -0,0 +1,4 @@ +import static org.junit.jupiter.api.Assertions.*; +class GameControllerTest { + +} \ No newline at end of file From a048985026a41cc11d5627f4a07dcc39334b1c7e Mon Sep 17 00:00:00 2001 From: hyxklee Date: Wed, 17 Apr 2024 11:09:25 +0900 Subject: [PATCH 06/16] =?UTF-8?q?test(GameController):=20=EB=B2=94?= =?UTF-8?q?=EC=9C=84=EC=97=90=20=EB=A7=9E=EB=8A=94=20=EC=88=AB=EC=9E=90=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=ED=85=8C=EC=8A=A4=ED=8A=B8=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 --- .../java/leets/land/UpdownApplication.java | 6 +- .../leets/land/controller/GameController.java | 71 +++++++++++++++---- src/main/java/leets/land/view/InputView.java | 1 + src/main/java/leets/land/view/OutputView.java | 7 +- .../land/controller/GameControllerTest.java | 27 ++++++- 5 files changed, 94 insertions(+), 18 deletions(-) diff --git a/src/main/java/leets/land/UpdownApplication.java b/src/main/java/leets/land/UpdownApplication.java index 260266e..ef0c104 100644 --- a/src/main/java/leets/land/UpdownApplication.java +++ b/src/main/java/leets/land/UpdownApplication.java @@ -1,15 +1,15 @@ package leets.land; -import leets.land.controller.MatchController; +import leets.land.controller.GameController; public class UpdownApplication { public static void main(String[] args) { - MatchController matchController = new MatchController(); - matchController.runApp(); + GameController gameController = new GameController(); + gameController.runApp(); } } diff --git a/src/main/java/leets/land/controller/GameController.java b/src/main/java/leets/land/controller/GameController.java index 525d5e2..d78d8e3 100644 --- a/src/main/java/leets/land/controller/GameController.java +++ b/src/main/java/leets/land/controller/GameController.java @@ -1,36 +1,83 @@ package leets.land.controller; -import leets.land.service.CharGameService; -import leets.land.service.GameService; -import leets.land.service.NumgameService; import leets.land.view.InputView; import leets.land.view.OutputView; -import java.lang.reflect.GenericArrayType; +import java.util.Scanner; -public class MatchController { +public class GameController { private final InputView inputView = new InputView(); private final OutputView outputView = new OutputView(); - - - - - //버전을 입력 받아 서비스에 전달 + private final Scanner scanner = new Scanner(System.in); //서비스에서 돌린 중간 결과를 전달받아 outputview로 출력 public void runApp(){ + outputView.printStartMessage(); int versionNum = inputView.inputVersionNum(); if(versionNum == 1){ - + int randomNum = generateRandomNum(); + int count = numUpdownGame(randomNum); + outputView.printCount(count); } else if (versionNum == 2) { } - } + /* + 숫자 버전 updown game + */ + public int generateRandomNum(){ + int randomNum = (int) (Math.random() * 100) + 1; + return randomNum; + } + + public int numUpdownGame(int targetNum){ + int low = 1; + int high = 100; + int count = 0; + boolean isCorrect = false; + int inputNum; + + while(!isCorrect){ + System.out.print("정답을 입력하세요(" + low + "~" + high + ") : "); + inputNum = inputNum(low, high); + checkValidNumRange(low, high, inputNum); + count++; + + if(inputNum == targetNum){ + System.out.println("정답입니다!"); + isCorrect = true; + } else if (inputNumhigh)){ + throw new IllegalArgumentException("[ERROR] 범위 내의 숫자를 입력하세요."); + } + } + public int inputNum(int low, int high){ + int inputNum; + try{ + inputNum = scanner.nextInt(); + checkValidNumRange(low, high, inputNum); + return inputNum; + } catch (IllegalArgumentException e){ + return inputNum(low, high); + } + } + /* + 영어 버전 updown game + */ } diff --git a/src/main/java/leets/land/view/InputView.java b/src/main/java/leets/land/view/InputView.java index 9ff1e02..564fa4a 100644 --- a/src/main/java/leets/land/view/InputView.java +++ b/src/main/java/leets/land/view/InputView.java @@ -8,6 +8,7 @@ public class InputView { //숫자, 영어 버전 입력 public int inputVersionNum(){ + System.out.print("게임 버전을 입력해주세요 (숫자: 1, 영어: 2): "); int versionNum = scan.nextInt(); try{ diff --git a/src/main/java/leets/land/view/OutputView.java b/src/main/java/leets/land/view/OutputView.java index 05a806a..c988bcc 100644 --- a/src/main/java/leets/land/view/OutputView.java +++ b/src/main/java/leets/land/view/OutputView.java @@ -5,7 +5,10 @@ public class OutputView { public void printStartMessage(){ System.out.println("Up-Down 게임을 시작합니다"); } - //중간 정답 출력(범위 포함) - //마지막 정답 출력 + public void printCount(int count) { + System.out.println("시도한 횟수: "+ count + "회"); + } + + // } diff --git a/src/test/java/leets/land/controller/GameControllerTest.java b/src/test/java/leets/land/controller/GameControllerTest.java index 0a07a2d..3f8ae96 100644 --- a/src/test/java/leets/land/controller/GameControllerTest.java +++ b/src/test/java/leets/land/controller/GameControllerTest.java @@ -1,4 +1,29 @@ +package leets.land.controller; + +import leets.land.UpdownApplication; +import leets.land.view.InputView; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + import static org.junit.jupiter.api.Assertions.*; + class GameControllerTest { - + + UpdownApplication app; + InputView inputView; + GameController gameController; + + @BeforeEach + void setUp(){ + app = new UpdownApplication(); + inputView = new InputView(); + gameController = new GameController(); + } + + @Test + void 숫자_입력_범위_확인(){ + IllegalArgumentException e = assertThrows(IllegalArgumentException.class, ()-> + gameController.checkValidNumRange(50,100, 20) ); + } + } \ No newline at end of file From a2bdf8d01183ac4ae0193cd2e60d7db49b3e9691 Mon Sep 17 00:00:00 2001 From: hyxklee Date: Wed, 17 Apr 2024 11:32:32 +0900 Subject: [PATCH 07/16] =?UTF-8?q?refactor(InputView,=20Controller):=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leets/land/controller/GameController.java | 15 ++++++++++---- src/main/java/leets/land/view/InputView.java | 20 +++++++++---------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/main/java/leets/land/controller/GameController.java b/src/main/java/leets/land/controller/GameController.java index d78d8e3..7691a65 100644 --- a/src/main/java/leets/land/controller/GameController.java +++ b/src/main/java/leets/land/controller/GameController.java @@ -3,6 +3,7 @@ import leets.land.view.InputView; import leets.land.view.OutputView; +import java.util.InputMismatchException; import java.util.Scanner; public class GameController { @@ -15,7 +16,6 @@ public class GameController { public void runApp(){ outputView.printStartMessage(); int versionNum = inputView.inputVersionNum(); - if(versionNum == 1){ int randomNum = generateRandomNum(); int count = numUpdownGame(randomNum); @@ -44,7 +44,6 @@ public int numUpdownGame(int targetNum){ while(!isCorrect){ System.out.print("정답을 입력하세요(" + low + "~" + high + ") : "); inputNum = inputNum(low, high); - checkValidNumRange(low, high, inputNum); count++; if(inputNum == targetNum){ @@ -60,19 +59,27 @@ public int numUpdownGame(int targetNum){ } return count; } + + //입력 범위를 벗어난 입력이 들어오면 예외 날리기 public void checkValidNumRange(int low, int high, int inputNum){ if((inputNumhigh)){ throw new IllegalArgumentException("[ERROR] 범위 내의 숫자를 입력하세요."); } } + //사용자에게 입력을 받으며 예외처리 public int inputNum(int low, int high){ - int inputNum; + try{ - inputNum = scanner.nextInt(); + int inputNum = scanner.nextInt(); checkValidNumRange(low, high, inputNum); return inputNum; } catch (IllegalArgumentException e){ + System.out.print(low + "~" + high + " 내의 숫자를 입력하세요: "); + return inputNum(low, high); + } catch (InputMismatchException e){ + System.out.print("숫자를 입력하세요"); + scanner.nextLine();// 개행문제 비워주기. 안 하면 StackOverFlow return inputNum(low, high); } } diff --git a/src/main/java/leets/land/view/InputView.java b/src/main/java/leets/land/view/InputView.java index 564fa4a..c866baf 100644 --- a/src/main/java/leets/land/view/InputView.java +++ b/src/main/java/leets/land/view/InputView.java @@ -1,37 +1,35 @@ package leets.land.view; +import java.util.InputMismatchException; import java.util.Scanner; public class InputView { private final Scanner scan = new Scanner(System.in); - //숫자, 영어 버전 입력 + //숫자, 영어 버전 입력. 예외처리 public int inputVersionNum(){ - System.out.print("게임 버전을 입력해주세요 (숫자: 1, 영어: 2): "); - int versionNum = scan.nextInt(); try{ + int versionNum = scan.nextInt(); validVersionNum(versionNum); return versionNum; } catch (IllegalArgumentException e){ System.out.println(e.getMessage()); return inputVersionNum(); + } catch (InputMismatchException e){ + System.out.println("숫자를 입력해주세요"); + scan.nextLine();// 개행문제 비워주기. 안 하면 StackOverFlow + return inputVersionNum(); } } + + public void validVersionNum(int versionNum){ if(versionNum!=1&&versionNum!=2){ throw new IllegalArgumentException("버전은 1 또는 2만 입력해주세요. "); } } - //초기 정답 입력 - public int inputNumericAnswer(){ - System.out.print("정답을 입력해주세요: "); - int numericAnswer = scan.nextInt(); - return numericAnswer; - } - - //입력 예외처리 } From 012a0d15daefeb24c8b171459e05fe71042b37a6 Mon Sep 17 00:00:00 2001 From: hyxklee Date: Wed, 17 Apr 2024 13:19:52 +0900 Subject: [PATCH 08/16] =?UTF-8?q?refactor(InputView):=20=EA=B2=8C=EC=9E=84?= =?UTF-8?q?=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=95=88=EC=97=90=20=EC=9E=88?= =?UTF-8?q?=EB=8D=98=20=EC=9E=85=EB=A0=A5=EB=B6=80=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leets/land/controller/GameController.java | 103 +++++++++++++----- src/main/java/leets/land/view/InputView.java | 57 +++++++++- .../land/controller/GameControllerTest.java | 6 +- .../java/leets/land/view/InputViewTest.java | 9 ++ 4 files changed, 139 insertions(+), 36 deletions(-) diff --git a/src/main/java/leets/land/controller/GameController.java b/src/main/java/leets/land/controller/GameController.java index 7691a65..9c1a541 100644 --- a/src/main/java/leets/land/controller/GameController.java +++ b/src/main/java/leets/land/controller/GameController.java @@ -15,17 +15,23 @@ public class GameController { //서비스에서 돌린 중간 결과를 전달받아 outputview로 출력 public void runApp(){ outputView.printStartMessage(); - int versionNum = inputView.inputVersionNum(); + int versionNum = inputView.inputVersionNum(); //게임 버전 입력 + + int count = 0; if(versionNum == 1){ + int randomNum = generateRandomNum(); - int count = numUpdownGame(randomNum); - outputView.printCount(count); + count = numUpdownGame(randomNum); + } else if (versionNum == 2) { + char randomAlphabet = generateRandomAlphabet(); + count = alphabetUpdownGame(randomAlphabet); + } + outputView.printCount(count); } - /* 숫자 버전 updown game */ @@ -37,14 +43,13 @@ public int generateRandomNum(){ public int numUpdownGame(int targetNum){ int low = 1; int high = 100; - int count = 0; + int[] count = {0}; //잘못된 입력도 증가하기 위해 배열로 선언해 참조하도록 구현 boolean isCorrect = false; int inputNum; while(!isCorrect){ System.out.print("정답을 입력하세요(" + low + "~" + high + ") : "); - inputNum = inputNum(low, high); - count++; + inputNum = inputView.inputNum(low, high, count); if(inputNum == targetNum){ System.out.println("정답입니다!"); @@ -57,34 +62,74 @@ public int numUpdownGame(int targetNum){ System.out.println("DOWN"); } } - return count; + return count[0]; } - //입력 범위를 벗어난 입력이 들어오면 예외 날리기 - public void checkValidNumRange(int low, int high, int inputNum){ - if((inputNumhigh)){ - throw new IllegalArgumentException("[ERROR] 범위 내의 숫자를 입력하세요."); + + + /* + 영어 버전 updown game + */ + public char generateRandomAlphabet() { + int randomNum = (int) (Math.random() * 52); + + if (randomNum < 26) { + return (char) ('a' + randomNum); + } + else { + return (char) ('A' + randomNum - 26); } + } - //사용자에게 입력을 받으며 예외처리 - public int inputNum(int low, int high){ - - try{ - int inputNum = scanner.nextInt(); - checkValidNumRange(low, high, inputNum); - return inputNum; - } catch (IllegalArgumentException e){ - System.out.print(low + "~" + high + " 내의 숫자를 입력하세요: "); - return inputNum(low, high); - } catch (InputMismatchException e){ - System.out.print("숫자를 입력하세요"); - scanner.nextLine();// 개행문제 비워주기. 안 하면 StackOverFlow - return inputNum(low, high); + public int alphabetUpdownGame(char targetAlphabet){ + char first = 'A'; + char last = 'z'; + int[] count = {0}; //잘못된 입력도 증가하기 위해 배열로 선언해 참조하도록 구현 + boolean isCorrect = false; + char inputAlphabet; + + while(!isCorrect){ + System.out.print("정답을 입력하세요(" + first + "~" + last + ") : "); + inputAlphabet = inputView.inputChar(first, last, count); + + if(inputAlphabet == targetAlphabet){ + System.out.println("정답입니다!"); + isCorrect = true; + } else if (inputAlphabet last)) { +// throw new IllegalArgumentException("[ERROR] 범위 내의 알파벳을 입력하세요."); +// } +// } } + diff --git a/src/main/java/leets/land/view/InputView.java b/src/main/java/leets/land/view/InputView.java index c866baf..256aed4 100644 --- a/src/main/java/leets/land/view/InputView.java +++ b/src/main/java/leets/land/view/InputView.java @@ -24,12 +24,65 @@ public int inputVersionNum(){ } } - - public void validVersionNum(int versionNum){ if(versionNum!=1&&versionNum!=2){ throw new IllegalArgumentException("버전은 1 또는 2만 입력해주세요. "); } } + + + //사용자에게 입력을 받으며 예외처리 + public int inputNum(int low, int high, int[] count){ + try{ + int inputNum = scan.nextInt(); + count[0]++; + checkValidNumRange(low, high, inputNum); + return inputNum; + } catch (IllegalArgumentException e){ + System.out.print(low + "~" + high + " 내의 숫자를 입력하세요: "); + return inputNum(low, high, count); + } catch (InputMismatchException e){ + System.out.print("숫자를 입력하세요"); + scan.nextLine();// 개행문제 비워주기. 안 하면 StackOverFlow + return inputNum(low, high, count); + } + } + + //입력 범위를 벗어난 입력이 들어오면 예외 날리기 + public void checkValidNumRange(int low, int high, int inputNum){ + if((inputNumhigh)){ + throw new IllegalArgumentException("[ERROR] 범위 내의 숫자를 입력하세요."); + } + } + + /* + 영어버전 입력부 + */ + + + public char inputChar(char first, char last, int[] count){ + Scanner scanner = new Scanner(System.in);//inputNum이랑 scanner를 공유하다보니 문제가 발생. + try{ + char inputAlphabet = (scanner.nextLine()).charAt(0); + count[0]++; + checkValidCharRange(first, last, inputAlphabet); + return inputAlphabet; + } catch (IllegalArgumentException e){ + System.out.print(first + "~" + last + " 내의 알파벳을 입력하세요: "); + return inputChar(first, last, count); + } catch (InputMismatchException e){ + System.out.print("영어 알파벳을 입력하세요"); + scan.nextLine();// 개행문제 비워주기. 안 하면 StackOverFlow + return inputChar(first, last, count); + } + } + + //입력 범위를 벗어난 입력이 들어오면 예외 날리기 + public void checkValidCharRange(char first, char last, char inputAlphabet) { + if ((inputAlphabet < first) || (inputAlphabet > last)) { + throw new IllegalArgumentException("[ERROR] 범위 내의 알파벳을 입력하세요."); + } + } + } diff --git a/src/test/java/leets/land/controller/GameControllerTest.java b/src/test/java/leets/land/controller/GameControllerTest.java index 3f8ae96..795082b 100644 --- a/src/test/java/leets/land/controller/GameControllerTest.java +++ b/src/test/java/leets/land/controller/GameControllerTest.java @@ -20,10 +20,6 @@ void setUp(){ gameController = new GameController(); } - @Test - void 숫자_입력_범위_확인(){ - IllegalArgumentException e = assertThrows(IllegalArgumentException.class, ()-> - gameController.checkValidNumRange(50,100, 20) ); - } + } \ No newline at end of file diff --git a/src/test/java/leets/land/view/InputViewTest.java b/src/test/java/leets/land/view/InputViewTest.java index 07be2b4..73bf654 100644 --- a/src/test/java/leets/land/view/InputViewTest.java +++ b/src/test/java/leets/land/view/InputViewTest.java @@ -1,6 +1,7 @@ package leets.land.view; import leets.land.UpdownApplication; +import leets.land.controller.GameController; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -10,11 +11,13 @@ class InputViewTest { UpdownApplication app; InputView inputView; + GameController gameController; @BeforeEach void setUp(){ app = new UpdownApplication(); inputView = new InputView(); + gameController = new GameController(); } @Test @@ -22,4 +25,10 @@ void setUp(){ IllegalArgumentException e = assertThrows(IllegalArgumentException.class, ()-> inputView.validVersionNum(0) ); } + + @Test + void 숫자_입력_범위_확인(){ + IllegalArgumentException e = assertThrows(IllegalArgumentException.class, ()-> + inputView.checkValidNumRange(50,100, 20) ); + } } \ No newline at end of file From 03e23c829bb2bf7162888c94cc8fe26c97c4a750 Mon Sep 17 00:00:00 2001 From: hyxklee Date: Wed, 17 Apr 2024 14:12:40 +0900 Subject: [PATCH 09/16] =?UTF-8?q?test(InputView):=20=EC=95=8C=ED=8C=8C?= =?UTF-8?q?=EB=B2=B3=20=EC=9E=85=EB=A0=A5=20=EB=B2=94=EC=9C=84=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../leets/land/controller/GameController.java | 26 ---------- src/main/java/leets/land/view/InputView.java | 47 +++++++++++-------- .../land/controller/GameControllerTest.java | 25 ---------- .../java/leets/land/view/InputViewTest.java | 8 ++++ 4 files changed, 35 insertions(+), 71 deletions(-) delete mode 100644 src/test/java/leets/land/controller/GameControllerTest.java diff --git a/src/main/java/leets/land/controller/GameController.java b/src/main/java/leets/land/controller/GameController.java index 9c1a541..52f8404 100644 --- a/src/main/java/leets/land/controller/GameController.java +++ b/src/main/java/leets/land/controller/GameController.java @@ -3,7 +3,6 @@ import leets.land.view.InputView; import leets.land.view.OutputView; -import java.util.InputMismatchException; import java.util.Scanner; public class GameController { @@ -106,30 +105,5 @@ public int alphabetUpdownGame(char targetAlphabet){ } return count[0]; } - - -// //사용자에게 입력을 받으며 예외처리 -// public char inputChar(char first, char last, int[] count){ -// try{ -// char inputAlphabet = (scanner.nextLine()).charAt(0); -// count[0]++; -// checkValidCharRange(first, last, inputAlphabet); -// return inputAlphabet; -// } catch (IllegalArgumentException e){ -// System.out.print(first + "~" + last + " 내의 알파벳을 입력하세요: "); -// return inputChar(first, last, count); -// } catch (InputMismatchException e){ -// System.out.print("영어 알파벳을 입력하세요"); -// scanner.nextLine();// 개행문제 비워주기. 안 하면 StackOverFlow -// return inputChar(first, last, count); -// } -// } -// -// //입력 범위를 벗어난 입력이 들어오면 예외 날리기 -// public void checkValidCharRange(char first, char last, char inputAlphabet) { -// if ((inputAlphabet < first) || (inputAlphabet > last)) { -// throw new IllegalArgumentException("[ERROR] 범위 내의 알파벳을 입력하세요."); -// } -// } } diff --git a/src/main/java/leets/land/view/InputView.java b/src/main/java/leets/land/view/InputView.java index 256aed4..a1e601f 100644 --- a/src/main/java/leets/land/view/InputView.java +++ b/src/main/java/leets/land/view/InputView.java @@ -5,37 +5,43 @@ public class InputView { - private final Scanner scan = new Scanner(System.in); + private final Scanner numScan = new Scanner(System.in); + private final Scanner charScan = new Scanner(System.in); - //숫자, 영어 버전 입력. 예외처리 + /* + 게임 버전 입력 + */ public int inputVersionNum(){ System.out.print("게임 버전을 입력해주세요 (숫자: 1, 영어: 2): "); try{ - int versionNum = scan.nextInt(); + int versionNum = numScan.nextInt(); validVersionNum(versionNum); return versionNum; } catch (IllegalArgumentException e){ System.out.println(e.getMessage()); return inputVersionNum(); } catch (InputMismatchException e){ - System.out.println("숫자를 입력해주세요"); - scan.nextLine();// 개행문제 비워주기. 안 하면 StackOverFlow + System.out.println("[ERROR] 숫자를 입력해주세요"); + numScan.nextLine();// 개행문제 비워주기. 안 하면 StackOverFlow return inputVersionNum(); } } + /* + 버전 입력이 1과 2인지 검증 + */ public void validVersionNum(int versionNum){ if(versionNum!=1&&versionNum!=2){ throw new IllegalArgumentException("버전은 1 또는 2만 입력해주세요. "); } } - - - //사용자에게 입력을 받으며 예외처리 + /* + 숫자 버전 정답 입력 + */ public int inputNum(int low, int high, int[] count){ try{ - int inputNum = scan.nextInt(); + int inputNum = numScan.nextInt(); count[0]++; checkValidNumRange(low, high, inputNum); return inputNum; @@ -43,28 +49,28 @@ public int inputNum(int low, int high, int[] count){ System.out.print(low + "~" + high + " 내의 숫자를 입력하세요: "); return inputNum(low, high, count); } catch (InputMismatchException e){ - System.out.print("숫자를 입력하세요"); - scan.nextLine();// 개행문제 비워주기. 안 하면 StackOverFlow + System.out.print("[ERROR] 숫자를 입력하세요"); + numScan.nextLine();// 개행문제 비워주기. 안 하면 StackOverFlow return inputNum(low, high, count); } } - //입력 범위를 벗어난 입력이 들어오면 예외 날리기 + /* + 입력 범위를 벗어난 입력이 들어오면 예외 날리기 + */ public void checkValidNumRange(int low, int high, int inputNum){ if((inputNumhigh)){ throw new IllegalArgumentException("[ERROR] 범위 내의 숫자를 입력하세요."); } } + /* 영어버전 입력부 */ - - public char inputChar(char first, char last, int[] count){ - Scanner scanner = new Scanner(System.in);//inputNum이랑 scanner를 공유하다보니 문제가 발생. try{ - char inputAlphabet = (scanner.nextLine()).charAt(0); + char inputAlphabet = (charScan.nextLine()).charAt(0); count[0]++; checkValidCharRange(first, last, inputAlphabet); return inputAlphabet; @@ -72,17 +78,18 @@ public char inputChar(char first, char last, int[] count){ System.out.print(first + "~" + last + " 내의 알파벳을 입력하세요: "); return inputChar(first, last, count); } catch (InputMismatchException e){ - System.out.print("영어 알파벳을 입력하세요"); - scan.nextLine();// 개행문제 비워주기. 안 하면 StackOverFlow + System.out.print("[ERROR] 영어 알파벳을 입력하세요"); + charScan.nextLine();// 개행문제 비워주기. 안 하면 StackOverFlow return inputChar(first, last, count); } } - //입력 범위를 벗어난 입력이 들어오면 예외 날리기 + /* + 입력 범위를 벗어난 입력이 들어오면 예외 날리기 + */ public void checkValidCharRange(char first, char last, char inputAlphabet) { if ((inputAlphabet < first) || (inputAlphabet > last)) { throw new IllegalArgumentException("[ERROR] 범위 내의 알파벳을 입력하세요."); } } - } diff --git a/src/test/java/leets/land/controller/GameControllerTest.java b/src/test/java/leets/land/controller/GameControllerTest.java deleted file mode 100644 index 795082b..0000000 --- a/src/test/java/leets/land/controller/GameControllerTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package leets.land.controller; - -import leets.land.UpdownApplication; -import leets.land.view.InputView; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class GameControllerTest { - - UpdownApplication app; - InputView inputView; - GameController gameController; - - @BeforeEach - void setUp(){ - app = new UpdownApplication(); - inputView = new InputView(); - gameController = new GameController(); - } - - - -} \ No newline at end of file diff --git a/src/test/java/leets/land/view/InputViewTest.java b/src/test/java/leets/land/view/InputViewTest.java index 73bf654..f2c1249 100644 --- a/src/test/java/leets/land/view/InputViewTest.java +++ b/src/test/java/leets/land/view/InputViewTest.java @@ -31,4 +31,12 @@ void setUp(){ IllegalArgumentException e = assertThrows(IllegalArgumentException.class, ()-> inputView.checkValidNumRange(50,100, 20) ); } + + @Test + void 영어_입력_범위_확인(){ + IllegalArgumentException e = assertThrows(IllegalArgumentException.class, ()-> + inputView.checkValidCharRange('a', 'c', 's')); + } + + } \ No newline at end of file From 290faf04ac865a649eebe647b4e6f1772e69d2ba Mon Sep 17 00:00:00 2001 From: hyxklee Date: Wed, 17 Apr 2024 14:18:35 +0900 Subject: [PATCH 10/16] =?UTF-8?q?docs(STUDY):=20=EA=B3=84=ED=9A=8D=20?= =?UTF-8?q?=EB=82=B4=EC=9A=A9=EA=B3=BC=20=EC=8B=A4=EC=A0=9C=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EC=83=81=ED=99=A9=20=EC=B2=B4=ED=81=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/STUDY.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/STUDY.md b/docs/STUDY.md index 05ff4ff..edeb1fb 100644 --- a/docs/STUDY.md +++ b/docs/STUDY.md @@ -45,3 +45,9 @@ - test: 테스트 추가 또는 수정 - chore: 빌드 프로세스, CI 구성 등이 변경됩니다. +[실제구현] +- InputView와 OutputView로 View를 구성 +- InputView에서 프로그램 구동에 필요한 입력을 받아 GameController로 전달 +- GameController에서는 게임 버전을 구분해 숫자 버전, 영어 버전을 따로 호출해서 게임 진행, OutputView에 Count를 전달해 출력 +- Domain에는 내용이 들어갈 필요가 없어 보임 +- 게임을 버전별로 구분해 따로 패키지를 구성하고 싶은데 더 고민해보겠음 From 40e3c7f7e17f2b0ec3aa03ed2e9f2fc2043440cd Mon Sep 17 00:00:00 2001 From: hyxklee Date: Wed, 17 Apr 2024 17:31:16 +0900 Subject: [PATCH 11/16] =?UTF-8?q?refactor(*):=20=EA=B2=8C=EC=9E=84=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=EC=B2=B4=EB=A1=9C=20=EB=B6=84=EB=A6=AC,=20?= =?UTF-8?q?=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=A3=BC=EC=9E=85=EC=9D=84=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20appConfig=20=ED=81=B4=EB=9E=98=EC=8A=A4=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 --- .../java/leets/land/UpdownApplication.java | 6 +- src/main/java/leets/land/appConfig.java | 20 ++++ .../leets/land/controller/GameController.java | 99 +++---------------- .../leets/land/service/CharGameService.java | 42 ++++++++ .../java/leets/land/service/GameService.java | 6 +- .../leets/land/service/NumgameService.java | 85 +++++++--------- src/main/java/leets/land/view/InputView.java | 2 +- 7 files changed, 116 insertions(+), 144 deletions(-) create mode 100644 src/main/java/leets/land/appConfig.java diff --git a/src/main/java/leets/land/UpdownApplication.java b/src/main/java/leets/land/UpdownApplication.java index ef0c104..038fde2 100644 --- a/src/main/java/leets/land/UpdownApplication.java +++ b/src/main/java/leets/land/UpdownApplication.java @@ -2,13 +2,15 @@ import leets.land.controller.GameController; +import leets.land.view.InputView; public class UpdownApplication { - public static void main(String[] args) { - GameController gameController = new GameController(); + InputView inputView = new InputView(); + int versionNum = inputView.inputVersionNum(); + GameController gameController = appConfig.gameController(versionNum); gameController.runApp(); } } diff --git a/src/main/java/leets/land/appConfig.java b/src/main/java/leets/land/appConfig.java new file mode 100644 index 0000000..30bdfa5 --- /dev/null +++ b/src/main/java/leets/land/appConfig.java @@ -0,0 +1,20 @@ +package leets.land; + +import leets.land.controller.GameController; +import leets.land.service.CharGameService; +import leets.land.service.GameService; +import leets.land.service.NumgameService; +import leets.land.view.InputView; +import leets.land.view.OutputView; + +import java.lang.reflect.GenericArrayType; + +public class appConfig { + public static GameController gameController(int versionNum){ + if(versionNum==1) { + return new GameController(new NumgameService()); + } else { + return new GameController(new CharGameService()); + } + } +} diff --git a/src/main/java/leets/land/controller/GameController.java b/src/main/java/leets/land/controller/GameController.java index 52f8404..e3f02f1 100644 --- a/src/main/java/leets/land/controller/GameController.java +++ b/src/main/java/leets/land/controller/GameController.java @@ -1,5 +1,8 @@ package leets.land.controller; +import leets.land.service.CharGameService; +import leets.land.service.GameService; +import leets.land.service.NumgameService; import leets.land.view.InputView; import leets.land.view.OutputView; @@ -9,101 +12,21 @@ public class GameController { private final InputView inputView = new InputView(); private final OutputView outputView = new OutputView(); + private final GameService gameService; + + public GameController(GameService gameService) { + this.gameService = gameService; + } + private final Scanner scanner = new Scanner(System.in); //서비스에서 돌린 중간 결과를 전달받아 outputview로 출력 public void runApp(){ outputView.printStartMessage(); - int versionNum = inputView.inputVersionNum(); //게임 버전 입력 - int count = 0; - if(versionNum == 1){ - - int randomNum = generateRandomNum(); - count = numUpdownGame(randomNum); - - } else if (versionNum == 2) { - - char randomAlphabet = generateRandomAlphabet(); - count = alphabetUpdownGame(randomAlphabet); - - } + int randomNum = gameService.generateNum(); + count = gameService.updownGame(randomNum); outputView.printCount(count); } - - /* - 숫자 버전 updown game - */ - public int generateRandomNum(){ - int randomNum = (int) (Math.random() * 100) + 1; - return randomNum; - } - - public int numUpdownGame(int targetNum){ - int low = 1; - int high = 100; - int[] count = {0}; //잘못된 입력도 증가하기 위해 배열로 선언해 참조하도록 구현 - boolean isCorrect = false; - int inputNum; - - while(!isCorrect){ - System.out.print("정답을 입력하세요(" + low + "~" + high + ") : "); - inputNum = inputView.inputNum(low, high, count); - - if(inputNum == targetNum){ - System.out.println("정답입니다!"); - isCorrect = true; - } else if (inputNumnum)||(num>high)){ -// throw new IllegalArgumentException(); -// } -// } -// -// public static void main(String[] args) { -// NumgameService numgameService = new NumgameService(); -// int num = numgameService.generateRandomNum(); -// System.out.println(num); -// -// boolean tf = false; -// int answer; -// System.out.print("정답을 입력해주세요(1-100사이): "); -// try{ -// numgameService.checkNum(answer); -// numgameService.checkValidNum(num, answer); -// }catch (IllegalArgumentException e){ -// -// } -// } + private final InputView inputView = new InputView(); + + + + @Override + public int generateNum() { + int randomNum = (int) (Math.random() * 100) + 1; + return randomNum; + } + + @Override + public int updownGame(int targetNum) { + int low = 1; + int high = 100; + int[] count = {0}; + boolean isCorrect = false; + int inputNum; + + while(!isCorrect){ + System.out.print("정답을 입력하세요(" + low + "~" + high + ") : "); + inputNum = inputView.inputNum(low, high, count); + + if(inputNum == targetNum){ + System.out.println("정답입니다!"); + isCorrect = true; + } else if (inputNum Date: Thu, 18 Apr 2024 00:33:05 +0900 Subject: [PATCH 12/16] =?UTF-8?q?test(Game):=20=EB=82=9C=EC=88=98=20?= =?UTF-8?q?=EB=B2=94=EC=9C=84=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EB=A1=9C?= =?UTF-8?q?=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 --- docs/STUDY.md | 1 + src/main/java/leets/land/appConfig.java | 16 +++++----- .../leets/land/controller/GameController.java | 30 ++++++++----------- .../AlphabetGame.java} | 9 +++--- src/main/java/leets/land/game/Game.java | 9 ++++++ .../NumgameService.java => game/Numgame.java} | 12 +++----- .../java/leets/land/service/GameService.java | 9 ------ src/main/java/leets/land/view/InputView.java | 17 ++++++----- src/main/java/leets/land/view/OutputView.java | 1 - src/test/java/leets/land/game/GameTest.java | 30 +++++++++++++++++++ .../java/leets/land/view/InputViewTest.java | 4 --- 11 files changed, 78 insertions(+), 60 deletions(-) rename src/main/java/leets/land/{service/CharGameService.java => game/AlphabetGame.java} (87%) create mode 100644 src/main/java/leets/land/game/Game.java rename src/main/java/leets/land/{service/NumgameService.java => game/Numgame.java} (83%) delete mode 100644 src/main/java/leets/land/service/GameService.java create mode 100644 src/test/java/leets/land/game/GameTest.java diff --git a/docs/STUDY.md b/docs/STUDY.md index edeb1fb..50d2f9f 100644 --- a/docs/STUDY.md +++ b/docs/STUDY.md @@ -51,3 +51,4 @@ - GameController에서는 게임 버전을 구분해 숫자 버전, 영어 버전을 따로 호출해서 게임 진행, OutputView에 Count를 전달해 출력 - Domain에는 내용이 들어갈 필요가 없어 보임 - 게임을 버전별로 구분해 따로 패키지를 구성하고 싶은데 더 고민해보겠음 +- 로직 테스트. diff --git a/src/main/java/leets/land/appConfig.java b/src/main/java/leets/land/appConfig.java index 30bdfa5..a2d4b3c 100644 --- a/src/main/java/leets/land/appConfig.java +++ b/src/main/java/leets/land/appConfig.java @@ -1,20 +1,18 @@ package leets.land; import leets.land.controller.GameController; -import leets.land.service.CharGameService; -import leets.land.service.GameService; -import leets.land.service.NumgameService; -import leets.land.view.InputView; -import leets.land.view.OutputView; - -import java.lang.reflect.GenericArrayType; +import leets.land.game.AlphabetGame; +import leets.land.game.Numgame; +//자바 코드로 의존성 주입을 하기 위한 클래스 public class appConfig { + + // 버전에 맞는 Game 객체를 컨트롤러로 주입 public static GameController gameController(int versionNum){ if(versionNum==1) { - return new GameController(new NumgameService()); + return new GameController(new Numgame()); } else { - return new GameController(new CharGameService()); + return new GameController(new AlphabetGame()); } } } diff --git a/src/main/java/leets/land/controller/GameController.java b/src/main/java/leets/land/controller/GameController.java index e3f02f1..24e18ed 100644 --- a/src/main/java/leets/land/controller/GameController.java +++ b/src/main/java/leets/land/controller/GameController.java @@ -1,31 +1,27 @@ package leets.land.controller; -import leets.land.service.CharGameService; -import leets.land.service.GameService; -import leets.land.service.NumgameService; -import leets.land.view.InputView; +import leets.land.game.Game; import leets.land.view.OutputView; -import java.util.Scanner; - public class GameController { - private final InputView inputView = new InputView(); private final OutputView outputView = new OutputView(); - private final GameService gameService; + private final Game game; - public GameController(GameService gameService) { - this.gameService = gameService; + //버전에 맞는 Game을 appConfig 클래스에서 주입 + public GameController(Game game) { + this.game = game; } - private final Scanner scanner = new Scanner(System.in); - - //서비스에서 돌린 중간 결과를 전달받아 outputview로 출력 - public void runApp(){ + //구동부 + public void runApp() { outputView.printStartMessage(); - int count = 0; - int randomNum = gameService.generateNum(); - count = gameService.updownGame(randomNum); + + int count = 0;// 사용자 입력횟수를 저장하기 위한 변수 초기화 + int randomNum = game.generateRandomVal(); + count = game.updownGameStart(randomNum); + + //결과 출력 outputView.printCount(count); } } diff --git a/src/main/java/leets/land/service/CharGameService.java b/src/main/java/leets/land/game/AlphabetGame.java similarity index 87% rename from src/main/java/leets/land/service/CharGameService.java rename to src/main/java/leets/land/game/AlphabetGame.java index d7006ae..bd2905e 100644 --- a/src/main/java/leets/land/service/CharGameService.java +++ b/src/main/java/leets/land/game/AlphabetGame.java @@ -1,12 +1,13 @@ -package leets.land.service; +package leets.land.game; import leets.land.view.InputView; -public class CharGameService implements GameService{ +public class AlphabetGame implements Game { + private final InputView inputView = new InputView(); @Override - public int generateNum() { + public int generateRandomVal() { int randomNum = (int) (Math.random() * 52); if (randomNum < 26) { @@ -18,7 +19,7 @@ public int generateNum() { } @Override - public int updownGame(int targetAlphabet) { + public int updownGameStart(int targetAlphabet) { char first = 'A'; char last = 'z'; int[] count = {0}; diff --git a/src/main/java/leets/land/game/Game.java b/src/main/java/leets/land/game/Game.java new file mode 100644 index 0000000..3694be3 --- /dev/null +++ b/src/main/java/leets/land/game/Game.java @@ -0,0 +1,9 @@ +package leets.land.game; + +public interface Game { + //난수발생 + int generateRandomVal(); + + //게임 시작 + int updownGameStart(int randomNum); +} diff --git a/src/main/java/leets/land/service/NumgameService.java b/src/main/java/leets/land/game/Numgame.java similarity index 83% rename from src/main/java/leets/land/service/NumgameService.java rename to src/main/java/leets/land/game/Numgame.java index 44b39da..c38b661 100644 --- a/src/main/java/leets/land/service/NumgameService.java +++ b/src/main/java/leets/land/game/Numgame.java @@ -1,22 +1,18 @@ -package leets.land.service; +package leets.land.game; import leets.land.view.InputView; -import java.util.Scanner; - -public class NumgameService implements GameService{ +public class Numgame implements Game { private final InputView inputView = new InputView(); - - @Override - public int generateNum() { + public int generateRandomVal() { int randomNum = (int) (Math.random() * 100) + 1; return randomNum; } @Override - public int updownGame(int targetNum) { + public int updownGameStart(int targetNum) { int low = 1; int high = 100; int[] count = {0}; diff --git a/src/main/java/leets/land/service/GameService.java b/src/main/java/leets/land/service/GameService.java deleted file mode 100644 index b963504..0000000 --- a/src/main/java/leets/land/service/GameService.java +++ /dev/null @@ -1,9 +0,0 @@ -package leets.land.service; - -public interface GameService { - //난수발생 - int generateNum(); - - //게임 시작 - int updownGame(int randomNum); -} diff --git a/src/main/java/leets/land/view/InputView.java b/src/main/java/leets/land/view/InputView.java index 6c2565f..9e5ed5f 100644 --- a/src/main/java/leets/land/view/InputView.java +++ b/src/main/java/leets/land/view/InputView.java @@ -5,6 +5,7 @@ public class InputView { + //하나의 스캐너로 입력을 받았을 때 사소한 문제들이 발생해서 분리. [어떤 문젠지 파악하도록 하겠음] private final Scanner numScan = new Scanner(System.in); private final Scanner charScan = new Scanner(System.in); @@ -18,11 +19,11 @@ public int inputVersionNum(){ validVersionNum(versionNum); return versionNum; } catch (IllegalArgumentException e){ - System.out.println(e.getMessage()); + System.out.print(e.getMessage()); return inputVersionNum(); } catch (InputMismatchException e){ - System.out.println("[ERROR] 숫자를 입력해주세요"); - numScan.nextLine();// 개행문제 비워주기. 안 하면 StackOverFlow + System.out.print("[ERROR] 숫자를 입력해주세요 (숫자: 1, 영어: 2): "); + numScan.nextLine();// 개행문제 비워주기. 안 하면 StackOverFlow 발생 return inputVersionNum(); } } @@ -32,7 +33,7 @@ public int inputVersionNum(){ */ public void validVersionNum(int versionNum){ if(versionNum!=1&&versionNum!=2){ - throw new IllegalArgumentException("버전은 1 또는 2만 입력해주세요. "); + throw new IllegalArgumentException("버전은 1 또는 2만 입력해주세요. (숫자: 1, 영어: 2): "); } } @@ -49,7 +50,7 @@ public int inputNum(int low, int high, int[] count){ System.out.print(low + "~" + high + " 내의 숫자를 입력하세요: "); return inputNum(low, high, count); } catch (InputMismatchException e){ - System.out.print("[ERROR] 숫자를 입력하세요"); + System.out.print("[ERROR] 숫자를 입력하세요: "); numScan.nextLine();// 개행문제 비워주기. 안 하면 StackOverFlow return inputNum(low, high, count); } @@ -60,7 +61,7 @@ public int inputNum(int low, int high, int[] count){ */ public void checkValidNumRange(int low, int high, int inputNum){ if((inputNumhigh)){ - throw new IllegalArgumentException("[ERROR] 범위 내의 숫자를 입력하세요."); + throw new IllegalArgumentException("[ERROR] 범위 내의 숫자를 입력하세요 :"); } } @@ -78,7 +79,7 @@ public char inputChar(char first, char last, int[] count){ System.out.print(first + "~" + last + " 내의 알파벳을 입력하세요: "); return inputChar(first, last, count); } catch (InputMismatchException e){ - System.out.print("[ERROR] 영어 알파벳을 입력하세요"); + System.out.print("[ERROR] 영어 알파벳을 입력하세요 : "); charScan.nextLine();// 개행문제 비워주기. 안 하면 StackOverFlow return inputChar(first, last, count); } @@ -89,7 +90,7 @@ public char inputChar(char first, char last, int[] count){ */ public void checkValidCharRange(char first, char last, char inputAlphabet) { if ((inputAlphabet < first) || (inputAlphabet > last)) { - throw new IllegalArgumentException("[ERROR] 범위 내의 알파벳을 입력하세요."); + throw new IllegalArgumentException("[ERROR] 범위 내의 알파벳을 입력하세요 : "); } } } diff --git a/src/main/java/leets/land/view/OutputView.java b/src/main/java/leets/land/view/OutputView.java index c988bcc..fc1fec3 100644 --- a/src/main/java/leets/land/view/OutputView.java +++ b/src/main/java/leets/land/view/OutputView.java @@ -10,5 +10,4 @@ public void printCount(int count) { System.out.println("시도한 횟수: "+ count + "회"); } - // } diff --git a/src/test/java/leets/land/game/GameTest.java b/src/test/java/leets/land/game/GameTest.java new file mode 100644 index 0000000..1f227d6 --- /dev/null +++ b/src/test/java/leets/land/game/GameTest.java @@ -0,0 +1,30 @@ +package leets.land.game; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.stream.IntStream; + +import static org.assertj.core.api.Assertions.*; + +class GameTest { + + + + @Test + void 난수_범위_확인(){ + Game game = new Numgame(); + assertThat(game.generateRandomVal()).isBetween(1, 100); + } + + @Test + void 랜덤_알파벳_범위_확인() { + Game game = new AlphabetGame(); + int randomValue = game.generateRandomVal(); + assertThat(randomValue) + .satisfiesAnyOf( + value -> assertThat(value).isBetween(65, 90), + value -> assertThat(value).isBetween(97, 122) + ); + } +} \ No newline at end of file diff --git a/src/test/java/leets/land/view/InputViewTest.java b/src/test/java/leets/land/view/InputViewTest.java index f2c1249..045d454 100644 --- a/src/test/java/leets/land/view/InputViewTest.java +++ b/src/test/java/leets/land/view/InputViewTest.java @@ -9,15 +9,11 @@ class InputViewTest { - UpdownApplication app; InputView inputView; - GameController gameController; @BeforeEach void setUp(){ - app = new UpdownApplication(); inputView = new InputView(); - gameController = new GameController(); } @Test From 2c750cef6f0c2b15b8551ea4b42f67577c9e8373 Mon Sep 17 00:00:00 2001 From: hyxklee Date: Thu, 18 Apr 2024 09:41:21 +0900 Subject: [PATCH 13/16] =?UTF-8?q?refactor(*):=20=EB=B6=84=EB=A6=AC?= =?UTF-8?q?=ED=95=9C=20Game=20=ED=8C=A8=ED=82=A4=EC=A7=80=20controller?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=91=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/STUDY.md | 1 + .../java/leets/land/UpdownApplication.java | 6 ++-- src/main/java/leets/land/appConfig.java | 12 ++++---- .../AlphabetGameController.java} | 4 +-- .../leets/land/controller/GameController.java | 29 ++++--------------- .../land/controller/MatchController.java | 27 +++++++++++++++++ .../NumgameController.java} | 4 +-- src/main/java/leets/land/domain/GameInfo.java | 10 +++++++ src/main/java/leets/land/game/Game.java | 9 ------ ...{GameTest.java => GameControllerTest.java} | 16 +++++----- .../java/leets/land/view/InputViewTest.java | 2 -- 11 files changed, 64 insertions(+), 56 deletions(-) rename src/main/java/leets/land/{game/AlphabetGame.java => controller/AlphabetGameController.java} (92%) create mode 100644 src/main/java/leets/land/controller/MatchController.java rename src/main/java/leets/land/{game/Numgame.java => controller/NumgameController.java} (91%) create mode 100644 src/main/java/leets/land/domain/GameInfo.java delete mode 100644 src/main/java/leets/land/game/Game.java rename src/test/java/leets/land/game/{GameTest.java => GameControllerTest.java} (50%) diff --git a/docs/STUDY.md b/docs/STUDY.md index 50d2f9f..35d9d2f 100644 --- a/docs/STUDY.md +++ b/docs/STUDY.md @@ -52,3 +52,4 @@ - Domain에는 내용이 들어갈 필요가 없어 보임 - 게임을 버전별로 구분해 따로 패키지를 구성하고 싶은데 더 고민해보겠음 - 로직 테스트. +- view - controller - game의 3층 구조는 비효율 적인 거 같아 game 로직을 controller에 구현하고, match 해주는 컨트롤러를 따로 구성하였음 diff --git a/src/main/java/leets/land/UpdownApplication.java b/src/main/java/leets/land/UpdownApplication.java index 038fde2..2983ae0 100644 --- a/src/main/java/leets/land/UpdownApplication.java +++ b/src/main/java/leets/land/UpdownApplication.java @@ -1,7 +1,7 @@ package leets.land; -import leets.land.controller.GameController; +import leets.land.controller.MatchController; import leets.land.view.InputView; public class UpdownApplication { @@ -10,8 +10,8 @@ public class UpdownApplication { public static void main(String[] args) { InputView inputView = new InputView(); int versionNum = inputView.inputVersionNum(); - GameController gameController = appConfig.gameController(versionNum); - gameController.runApp(); + MatchController matchController = appConfig.gameController(versionNum); + matchController.runApp(); } } diff --git a/src/main/java/leets/land/appConfig.java b/src/main/java/leets/land/appConfig.java index a2d4b3c..07e3679 100644 --- a/src/main/java/leets/land/appConfig.java +++ b/src/main/java/leets/land/appConfig.java @@ -1,18 +1,18 @@ package leets.land; -import leets.land.controller.GameController; -import leets.land.game.AlphabetGame; -import leets.land.game.Numgame; +import leets.land.controller.MatchController; +import leets.land.controller.AlphabetGameController; +import leets.land.controller.NumgameController; //자바 코드로 의존성 주입을 하기 위한 클래스 public class appConfig { // 버전에 맞는 Game 객체를 컨트롤러로 주입 - public static GameController gameController(int versionNum){ + public static MatchController gameController(int versionNum){ if(versionNum==1) { - return new GameController(new Numgame()); + return new MatchController(new NumgameController()); } else { - return new GameController(new AlphabetGame()); + return new MatchController(new AlphabetGameController()); } } } diff --git a/src/main/java/leets/land/game/AlphabetGame.java b/src/main/java/leets/land/controller/AlphabetGameController.java similarity index 92% rename from src/main/java/leets/land/game/AlphabetGame.java rename to src/main/java/leets/land/controller/AlphabetGameController.java index bd2905e..f217ea1 100644 --- a/src/main/java/leets/land/game/AlphabetGame.java +++ b/src/main/java/leets/land/controller/AlphabetGameController.java @@ -1,8 +1,8 @@ -package leets.land.game; +package leets.land.controller; import leets.land.view.InputView; -public class AlphabetGame implements Game { +public class AlphabetGameController implements GameController { private final InputView inputView = new InputView(); diff --git a/src/main/java/leets/land/controller/GameController.java b/src/main/java/leets/land/controller/GameController.java index 24e18ed..a91e9b8 100644 --- a/src/main/java/leets/land/controller/GameController.java +++ b/src/main/java/leets/land/controller/GameController.java @@ -1,28 +1,9 @@ package leets.land.controller; -import leets.land.game.Game; -import leets.land.view.OutputView; +public interface GameController { + //난수발생 + int generateRandomVal(); -public class GameController { - - private final OutputView outputView = new OutputView(); - private final Game game; - - //버전에 맞는 Game을 appConfig 클래스에서 주입 - public GameController(Game game) { - this.game = game; - } - - //구동부 - public void runApp() { - outputView.printStartMessage(); - - int count = 0;// 사용자 입력횟수를 저장하기 위한 변수 초기화 - int randomNum = game.generateRandomVal(); - count = game.updownGameStart(randomNum); - - //결과 출력 - outputView.printCount(count); - } + //게임 시작 + int updownGameStart(int randomNum); } - diff --git a/src/main/java/leets/land/controller/MatchController.java b/src/main/java/leets/land/controller/MatchController.java new file mode 100644 index 0000000..72bffae --- /dev/null +++ b/src/main/java/leets/land/controller/MatchController.java @@ -0,0 +1,27 @@ +package leets.land.controller; + +import leets.land.view.OutputView; + +public class MatchController { + + private final OutputView outputView = new OutputView(); + private final GameController gameController; + + //버전에 맞는 Game을 appConfig 클래스에서 주입 + public MatchController(GameController gameController) { + this.gameController = gameController; + } + + //구동부 + public void runApp() { + outputView.printStartMessage(); + + int count = 0;// 사용자 입력횟수를 저장하기 위한 변수 초기화 + int randomNum = gameController.generateRandomVal(); + count = gameController.updownGameStart(randomNum); + + //결과 출력 + outputView.printCount(count); + } +} + diff --git a/src/main/java/leets/land/game/Numgame.java b/src/main/java/leets/land/controller/NumgameController.java similarity index 91% rename from src/main/java/leets/land/game/Numgame.java rename to src/main/java/leets/land/controller/NumgameController.java index c38b661..842789d 100644 --- a/src/main/java/leets/land/game/Numgame.java +++ b/src/main/java/leets/land/controller/NumgameController.java @@ -1,8 +1,8 @@ -package leets.land.game; +package leets.land.controller; import leets.land.view.InputView; -public class Numgame implements Game { +public class NumgameController implements GameController { private final InputView inputView = new InputView(); @Override diff --git a/src/main/java/leets/land/domain/GameInfo.java b/src/main/java/leets/land/domain/GameInfo.java new file mode 100644 index 0000000..d6fd3ba --- /dev/null +++ b/src/main/java/leets/land/domain/GameInfo.java @@ -0,0 +1,10 @@ +package leets.land.domain; + +public class GameInfo { + + private int low; + private int high; + private int[] count; + + +} diff --git a/src/main/java/leets/land/game/Game.java b/src/main/java/leets/land/game/Game.java deleted file mode 100644 index 3694be3..0000000 --- a/src/main/java/leets/land/game/Game.java +++ /dev/null @@ -1,9 +0,0 @@ -package leets.land.game; - -public interface Game { - //난수발생 - int generateRandomVal(); - - //게임 시작 - int updownGameStart(int randomNum); -} diff --git a/src/test/java/leets/land/game/GameTest.java b/src/test/java/leets/land/game/GameControllerTest.java similarity index 50% rename from src/test/java/leets/land/game/GameTest.java rename to src/test/java/leets/land/game/GameControllerTest.java index 1f227d6..78a3eaa 100644 --- a/src/test/java/leets/land/game/GameTest.java +++ b/src/test/java/leets/land/game/GameControllerTest.java @@ -1,26 +1,26 @@ package leets.land.game; -import org.assertj.core.api.Assertions; +import leets.land.controller.AlphabetGameController; +import leets.land.controller.GameController; +import leets.land.controller.NumgameController; import org.junit.jupiter.api.Test; -import java.util.stream.IntStream; - import static org.assertj.core.api.Assertions.*; -class GameTest { +class GameControllerTest { @Test void 난수_범위_확인(){ - Game game = new Numgame(); - assertThat(game.generateRandomVal()).isBetween(1, 100); + GameController gameController = new NumgameController(); + assertThat(gameController.generateRandomVal()).isBetween(1, 100); } @Test void 랜덤_알파벳_범위_확인() { - Game game = new AlphabetGame(); - int randomValue = game.generateRandomVal(); + GameController gameController = new AlphabetGameController(); + int randomValue = gameController.generateRandomVal(); assertThat(randomValue) .satisfiesAnyOf( value -> assertThat(value).isBetween(65, 90), diff --git a/src/test/java/leets/land/view/InputViewTest.java b/src/test/java/leets/land/view/InputViewTest.java index 045d454..40a7ccd 100644 --- a/src/test/java/leets/land/view/InputViewTest.java +++ b/src/test/java/leets/land/view/InputViewTest.java @@ -1,7 +1,5 @@ package leets.land.view; -import leets.land.UpdownApplication; -import leets.land.controller.GameController; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; From 1130ad7c035af569a1de0574d375b30d894436bc Mon Sep 17 00:00:00 2001 From: hyxklee Date: Thu, 18 Apr 2024 10:03:02 +0900 Subject: [PATCH 14/16] =?UTF-8?q?fix(GameInfo):=20=EB=B6=88=ED=95=84?= =?UTF-8?q?=EC=9A=94=20=ED=8C=8C=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/leets/land/domain/GameInfo.java | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 src/main/java/leets/land/domain/GameInfo.java diff --git a/src/main/java/leets/land/domain/GameInfo.java b/src/main/java/leets/land/domain/GameInfo.java deleted file mode 100644 index d6fd3ba..0000000 --- a/src/main/java/leets/land/domain/GameInfo.java +++ /dev/null @@ -1,10 +0,0 @@ -package leets.land.domain; - -public class GameInfo { - - private int low; - private int high; - private int[] count; - - -} From f67a1dbbf99e78e17a27920df93d2eb876de9204 Mon Sep 17 00:00:00 2001 From: hyxklee Date: Thu, 18 Apr 2024 10:06:05 +0900 Subject: [PATCH 15/16] =?UTF-8?q?docs:=20=EB=AF=B8=EC=85=98=20=EC=A7=84?= =?UTF-8?q?=ED=96=89=20=EC=A4=91=20=EC=83=9D=EA=B0=81=ED=95=9C=20=EA=B2=83?= =?UTF-8?q?=EB=93=A4=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/STUDY.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/STUDY.md b/docs/STUDY.md index 35d9d2f..a4b4055 100644 --- a/docs/STUDY.md +++ b/docs/STUDY.md @@ -49,7 +49,7 @@ - InputView와 OutputView로 View를 구성 - InputView에서 프로그램 구동에 필요한 입력을 받아 GameController로 전달 - GameController에서는 게임 버전을 구분해 숫자 버전, 영어 버전을 따로 호출해서 게임 진행, OutputView에 Count를 전달해 출력 -- Domain에는 내용이 들어갈 필요가 없어 보임 -- 게임을 버전별로 구분해 따로 패키지를 구성하고 싶은데 더 고민해보겠음 +- Domain에 뭐가 들어가야할 지 모르겠음. +- 게임을 버전별로 구분해 따로 패키지를 구성하고 싶은데 더 고민해보겠음 -> 입력이 반복되는 데 계속 객체로 넘겨주는 게 오히려 일하는 단계를 늘리느 느낌 - 로직 테스트. -- view - controller - game의 3층 구조는 비효율 적인 거 같아 game 로직을 controller에 구현하고, match 해주는 컨트롤러를 따로 구성하였음 +- view - controller - game의 3층 구조는 비효율 적인 거 같아 game 로직을 controller에 구현하고, match 해주는 컨트롤러를 따로 구성하였음 From fa8b8abe0f6b179e1a5b7d62644446a020620367 Mon Sep 17 00:00:00 2001 From: hyxklee Date: Thu, 18 Apr 2024 10:10:25 +0900 Subject: [PATCH 16/16] =?UTF-8?q?refactor(View):=20=EC=A3=BC=EC=84=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + src/main/java/leets/land/view/InputView.java | 2 +- src/main/java/leets/land/view/OutputView.java | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index c2065bc..51c2880 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +STUDY.md HELP.md .gradle build/ diff --git a/src/main/java/leets/land/view/InputView.java b/src/main/java/leets/land/view/InputView.java index 9e5ed5f..199c2fa 100644 --- a/src/main/java/leets/land/view/InputView.java +++ b/src/main/java/leets/land/view/InputView.java @@ -33,7 +33,7 @@ public int inputVersionNum(){ */ public void validVersionNum(int versionNum){ if(versionNum!=1&&versionNum!=2){ - throw new IllegalArgumentException("버전은 1 또는 2만 입력해주세요. (숫자: 1, 영어: 2): "); + throw new IllegalArgumentException("[ERROR] 버전은 1 또는 2만 입력해주세요. (숫자: 1, 영어: 2): "); } } diff --git a/src/main/java/leets/land/view/OutputView.java b/src/main/java/leets/land/view/OutputView.java index fc1fec3..1f60b2d 100644 --- a/src/main/java/leets/land/view/OutputView.java +++ b/src/main/java/leets/land/view/OutputView.java @@ -1,7 +1,7 @@ package leets.land.view; public class OutputView { - //초기 화면 출력 + public void printStartMessage(){ System.out.println("Up-Down 게임을 시작합니다"); }