From a681877745deeb83b38063074a28fe9aad27e481 Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Wed, 17 Sep 2025 14:04:26 +0900 Subject: [PATCH 01/24] =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/README.md b/docs/README.md index e69de29b..0fe01e52 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,6 @@ +자동차 이름 입력기능(쉼표를 기준으로 구분,5자 이하만 가능) +이동할 횟수 입력 기능 +랜덤을 사용한 자동차 전진 기능 +전진과 자동차 이름 동시 출력 기능 +완료 후 우승자 표시 기능(여러 명일 경우 쉼표 구분) +잘못된 값을 입력할 시 종료하는 기능 \ No newline at end of file From ed754d49b1b27f5739ea9cd14810cd9eaa253763 Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 22 Sep 2025 18:05:22 +0900 Subject: [PATCH 02/24] =?UTF-8?q?=EB=8F=84=EB=A9=94=EC=9D=B8=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20car=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Car.java | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/main/java/domain/Car.java diff --git a/src/main/java/domain/Car.java b/src/main/java/domain/Car.java new file mode 100644 index 00000000..c10bf935 --- /dev/null +++ b/src/main/java/domain/Car.java @@ -0,0 +1,31 @@ +package domain; + +public class Car implements Comparable { + private static final int STOP = 3; + private final String name; + private int distance; + + public Car(final String name, int distance) { + this.name = name; + this.distance = distance; + } + + public Car(final String name) { + this.name = name; + } + + + public void move(final int value) { + if(value > STOP) { + distance++; + } + } + + public int getDistance() { return distance; } + public String getName() { return name; } + + @Override + public int compareTo(Car o) { + return o.distance - this.distance; + } +} From 980d6fd35d62d9126fcf334ebe757b61758a5654 Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 22 Sep 2025 18:06:44 +0900 Subject: [PATCH 03/24] =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=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 --- src/main/java/message/GameMessage.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/main/java/message/GameMessage.java diff --git a/src/main/java/message/GameMessage.java b/src/main/java/message/GameMessage.java new file mode 100644 index 00000000..22a5b2c6 --- /dev/null +++ b/src/main/java/message/GameMessage.java @@ -0,0 +1,24 @@ +package message; + +public enum GameMessage { + + start("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"), + count("시도할 회수는 몇회인가요?"), + result("실행 결과"), + winner("최종 우승자"), + equal(" : "), + bar("-"), + nameError("자동차의 이름은 5자리 이내입니다."), + countError("회수는 음수가 아닌 정수로 입력해주세요."), + REGEX("[0-9]+"), + newLine("\n"); + + private final String message; + + GameMessage(final String message) { + this.message = message; + } + + public String getMessage() { return message; } + +} From f57bc2e321ceb007302d575032c92393aff7b846 Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 22 Sep 2025 18:10:38 +0900 Subject: [PATCH 04/24] =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=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 --- src/main/java/game/RacingGame.java | 58 ++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/main/java/game/RacingGame.java diff --git a/src/main/java/game/RacingGame.java b/src/main/java/game/RacingGame.java new file mode 100644 index 00000000..b079aa43 --- /dev/null +++ b/src/main/java/game/RacingGame.java @@ -0,0 +1,58 @@ +package game; + +import controller.GameController; + +import exception.GameInputException; + +import view.InputView; + +public class RacingGame { + + private static RacingGame defaultRacingGame; + private final InputView inputView; + private final GameInputException gameInputException; + private final GameController gameController; + + private RacingGame() { + inputView = InputView.getInstance(); + gameInputException = GameInputException.getInstance(); + gameController = GameController.getInstance(); + } + + public static RacingGame getInstance() { + if(defaultRacingGame == null) { + defaultRacingGame = new RacingGame(); + } + return defaultRacingGame; + } + + public void run() { + String[] names = preHandleNames(); + int count = preHandleCount(); + gameController.raceSet(names); + gameController.race(count); + gameController.raceResult(); + } + + private String[] preHandleNames() { + String input = inputView.inputCarNames(); + String[] names = input.split(","); + gameInputException.validateNameLength(names); + return names; + } + + private int preHandleCount() { + String input = inputView.inputRaceCount(); + gameInputException.validateNumber(input); + gameInputException.validateNumberZero(input); + return Integer.parseInt(input); + } + + public void close() { + gameController.close(); + gameInputException.close(); + inputView.close(); + defaultRacingGame = null; + } + +} \ No newline at end of file From 9e22f976ab6c0fa1bd9b71ead21a97ec87a302c1 Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 22 Sep 2025 18:11:26 +0900 Subject: [PATCH 05/24] =?UTF-8?q?=EA=B2=BD=EC=A3=BC=ED=95=98=EB=8A=94=20?= =?UTF-8?q?=EC=B0=A8=EC=9D=98=20=EC=A0=95=EB=B3=B4=20=EB=B0=B0=EC=97=B4=20?= =?UTF-8?q?=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/service/CarService.java | 94 +++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 src/main/java/service/CarService.java diff --git a/src/main/java/service/CarService.java b/src/main/java/service/CarService.java new file mode 100644 index 00000000..2d43f0f2 --- /dev/null +++ b/src/main/java/service/CarService.java @@ -0,0 +1,94 @@ +package service; + +import camp.nextstep.edu.missionutils.Randoms; + +import domain.Car; + +import message.GameMessage; + +import java.util.ArrayList; +import java.util.Collections; + +public class CarService { + + private final ArrayList carList; + private final StringBuilder sb; + private static CarService defaultCarService; + + private CarService() { + carList = new ArrayList<>(); + sb = new StringBuilder(); + } + + public static CarService getInstance() { + if(defaultCarService == null) { + defaultCarService = new CarService(); + } + return defaultCarService; + } + + public void close() { + defaultCarService = null; + } + + public void fill(String[] carNameArr,int[] distance) { + int i = 0; + for(String name : carNameArr) { + carList.add(new Car(name,distance[i++])); + } + } + + public void fill(String[] carNameArr) { + for(String name : carNameArr) { + carList.add(new Car(name)); + } + } + + public String getResult(int count) { + while(count-- > 0) { + race(); + if(count != 0) { + sb.append(GameMessage.newLine.getMessage()); + } + } + return sb.toString(); + } + + private void race() { + for(Car car : carList) { + int randomNumber = Randoms.pickNumberInRange(0,9); + car.move(randomNumber); + raceRecord(car); + } + } + + private void raceRecord(Car car) { + sb.append(car.getName()).append(GameMessage.equal.getMessage()); + buildBar(car.getDistance()); + } + + private void buildBar(int distance) { + while(distance-- > 0) { + sb.append(GameMessage.bar.getMessage()); + } + sb.append(GameMessage.newLine.getMessage()); + } + + public String getWinners() { + Collections.sort(carList); + int winDistance = carList.get(0).getDistance(); + ArrayList winnerList = makeWinnerList(winDistance); + return String.join(", ",winnerList); + } + + private ArrayList makeWinnerList(int winDistance) { + ArrayList winnerList = new ArrayList<>(); + for(Car car : carList) { + int distance = car.getDistance(); + if(winDistance > distance) { break; } + winnerList.add(car.getName()); + } + return winnerList; + } + +} From 1ef6c52650b49af463e9919cb57d102003af4100 Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 22 Sep 2025 18:12:15 +0900 Subject: [PATCH 06/24] =?UTF-8?q?=EA=B2=8C=EC=9E=84=20=EB=82=B4=20?= =?UTF-8?q?=EC=8B=A0=ED=98=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/view/InputView.java | 36 +++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/main/java/view/InputView.java diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java new file mode 100644 index 00000000..a6f624be --- /dev/null +++ b/src/main/java/view/InputView.java @@ -0,0 +1,36 @@ +package view; + +import camp.nextstep.edu.missionutils.Console; + +import message.GameMessage; + +public class InputView { + + private static InputView defaultInputView; + + private InputView() { + } + + public static InputView getInstance() { + if(defaultInputView == null) { + defaultInputView = new InputView(); + } + return defaultInputView; + } + + public String inputCarNames() { + System.out.println(GameMessage.start.getMessage()); + return Console.readLine(); + } + + public String inputRaceCount() { + System.out.println(GameMessage.count.getMessage()); + return Console.readLine(); + } + + public void close() { + Console.close(); + defaultInputView = null; + } + +} From 698aa72cc6ff51ec6e79fb6e1cbea8d7d4492ea1 Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 22 Sep 2025 18:12:32 +0900 Subject: [PATCH 07/24] =?UTF-8?q?=EC=9A=B0=EC=8A=B9=EC=9E=90=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/view/GameView.java | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/main/java/view/GameView.java diff --git a/src/main/java/view/GameView.java b/src/main/java/view/GameView.java new file mode 100644 index 00000000..fd8fa58f --- /dev/null +++ b/src/main/java/view/GameView.java @@ -0,0 +1,35 @@ +package view; + +import message.GameMessage; + +public class GameView { + + private static GameView defaultGameView; + + private GameView() { + } + + public static GameView getInstance() { + if(defaultGameView == null) { + defaultGameView = new GameView(); + } + return defaultGameView; + } + + public void printResult() { + System.out.println(GameMessage.newLine.getMessage() + GameMessage.result.getMessage()); + } + + public void printResult(String result) { + System.out.println(result); + } + + public void printWinners(String winners) { + System.out.println(GameMessage.winner.getMessage() + GameMessage.equal.getMessage() + winners); + } + + public void close() { + defaultGameView = null; + } + +} \ No newline at end of file From 3e81eff320a6e6f76f0a592566920e332f4740fd Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 22 Sep 2025 18:13:00 +0900 Subject: [PATCH 08/24] =?UTF-8?q?=EA=B2=8C=EC=9E=84=EC=9D=98=20=EC=A0=84?= =?UTF-8?q?=EC=B2=B4=20=EA=B8=B0=EB=8A=A5=20=EC=A1=B0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/GameController.java | 47 ++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/main/java/controller/GameController.java diff --git a/src/main/java/controller/GameController.java b/src/main/java/controller/GameController.java new file mode 100644 index 00000000..2265cd88 --- /dev/null +++ b/src/main/java/controller/GameController.java @@ -0,0 +1,47 @@ +package controller; + +import service.CarService; + +import view.GameView; + +public class GameController { + + private static GameController gameController; + + private final GameView gameView; + private final CarService carService; + + private GameController() { + gameView = GameView.getInstance(); + carService = CarService.getInstance(); + } + + public static GameController getInstance() { + if(gameController == null) { + gameController = new GameController(); + } + return gameController; + } + + public void raceSet(String[] names) { + gameView.printResult(); + carService.fill(names); + } + + public void race(int count) { + String result = carService.getResult(count); + gameView.printResult(result); + } + + public void raceResult() { + String winners = carService.getWinners(); + gameView.printWinners(winners); + } + + public void close() { + carService.close(); + gameView.close(); + gameController = null; + } + +} \ No newline at end of file From 0380abde5a5d02722d7922706a538f26bbe71663 Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 22 Sep 2025 18:13:34 +0900 Subject: [PATCH 09/24] =?UTF-8?q?=EC=B0=A8=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EC=A7=80=EC=A0=95=20=EC=8B=9C=20=EC=98=88=EC=99=B8=EC=82=AC?= =?UTF-8?q?=ED=95=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/exception/GameInputException.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/main/java/exception/GameInputException.java diff --git a/src/main/java/exception/GameInputException.java b/src/main/java/exception/GameInputException.java new file mode 100644 index 00000000..327685ea --- /dev/null +++ b/src/main/java/exception/GameInputException.java @@ -0,0 +1,43 @@ +package exception; + +import message.GameMessage; + +public class GameInputException { + + private static GameInputException defaultGameInputException; + + private GameInputException() { + } + + public static GameInputException getInstance() { + if(defaultGameInputException == null) { + defaultGameInputException = new GameInputException(); + } + return defaultGameInputException; + } + + public void validateNameLength(String[] names) { + for(String name : names) { + if(name.length() > 5) { + throw new IllegalArgumentException(GameMessage.nameError.getMessage()); + } + } + } + + public void validateNumber(String number) { + if(!number.matches(GameMessage.REGEX.getMessage())) { + throw new IllegalArgumentException(GameMessage.countError.getMessage()); + } + } + + public void validateNumberZero(String number) { + if(number.length() > 1 && number.charAt(0) == '0') { + throw new IllegalArgumentException(GameMessage.countError.getMessage()); + } + } + + public void close() { + defaultGameInputException = null; + } + +} \ No newline at end of file From 0f1759c9fc5fb775bec1f08de0ddc7647e46443c Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 22 Sep 2025 18:13:44 +0900 Subject: [PATCH 10/24] =?UTF-8?q?=EA=B2=8C=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 --- src/main/java/racingcar/Application.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index a17a52e7..08ca4bc5 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -1,7 +1,17 @@ package racingcar; +import camp.nextstep.edu.missionutils.Randoms; +import camp.nextstep.edu.missionutils.Console; +import game.RacingGame; + +import java.util.ArrayList; +import java.util.List; + public class Application { public static void main(String[] args) { // TODO: 프로그램 구현 + RacingGame game = RacingGame.getInstance(); + game.run(); + game.close(); } } From 896b7ffe8cdb1ae1193604a3329952438eaf8b7a Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 22 Sep 2025 18:24:26 +0900 Subject: [PATCH 11/24] =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/car/CarTest.java | 55 ++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/test/java/car/CarTest.java diff --git a/src/test/java/car/CarTest.java b/src/test/java/car/CarTest.java new file mode 100644 index 00000000..00092ef4 --- /dev/null +++ b/src/test/java/car/CarTest.java @@ -0,0 +1,55 @@ +package car; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import service.CarService; + +import exception.GameInputException; + +import message.GameMessage; + +import org.junit.jupiter.api.Test; + +public class CarTest { + + @Test + void 우승자_목록_반환() { + String[] carNames = {"a","b","c","d"}; + int[] distanceArr = {2,4,1,0}; + + CarService carService = CarService.getInstance(); + carService.fill(carNames,distanceArr); + String winner = carService.getWinners(); + + assertThat(winner).isEqualTo("b"); + carService.close(); + } + + @Test + void 숫자_정규식_확인() { + GameInputException gameException = GameInputException.getInstance(); + String input = "123456789!"; + assertThatThrownBy(() -> gameException.validateNumber(input)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining(GameMessage.countError.getMessage()); + } + + @Test + void 이름_길이_확인() { + GameInputException gameException = GameInputException.getInstance(); + String[] names = {"a","a23","abc123"}; + assertThatThrownBy(() -> gameException.validateNameLength(names)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining(GameMessage.nameError.getMessage()); + } + + @Test + void 회수_첫숫자_0_체크() { + GameInputException gameException = GameInputException.getInstance(); + String input = "01"; + assertThatThrownBy(() -> gameException.validateNumberZero(input)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining(GameMessage.countError.getMessage()); + } +} \ No newline at end of file From 3bceec9dfd5f5d623c3b90f8a47f5e0e35b876a3 Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 22 Sep 2025 18:24:29 +0900 Subject: [PATCH 12/24] =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/car/ImplTest.java | 58 +++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/test/java/car/ImplTest.java diff --git a/src/test/java/car/ImplTest.java b/src/test/java/car/ImplTest.java new file mode 100644 index 00000000..e8bb9ad5 --- /dev/null +++ b/src/test/java/car/ImplTest.java @@ -0,0 +1,58 @@ +package car; + +import camp.nextstep.edu.missionutils.test.NsTest; +import org.junit.jupiter.api.Test; + +import racingcar.Application; + +import static camp.nextstep.edu.missionutils.test.Assertions.assertRandomNumberInRangeTest; +import static camp.nextstep.edu.missionutils.test.Assertions.assertSimpleTest; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +public class ImplTest extends NsTest { + + @Test + void 전체기능_확인() { + assertRandomNumberInRangeTest( + () -> { + run("a,b,c", "3"); + assertThat(output()).contains("a : -", "b : -","c : ", + "a : --", "b : --","c : ", + "a : ---", "b : ---","c : -","최종 우승자 : a, b"); + }, + 4,4,3,4,4,2,4,4,4 + ); + } + + @Test + void 회수가_0일때() { + assertRandomNumberInRangeTest( + () -> { + run("a,b,c", "0"); + assertThat(output()).contains("최종 우승자 : a, b, c"); + }, + -1,-1,-1 + ); + } + + @Test + void 음수에_대한_예외_처리() { + assertSimpleTest(() -> + assertThatThrownBy(() -> runException("pobi,a", "-11")) + .isInstanceOf(IllegalArgumentException.class) + ); + } + + @Test + void 회수가_0으로_시작할_때_예외_처리() { + assertSimpleTest(() -> + assertThatThrownBy(() -> runException("pobi,a", "01")) + .isInstanceOf(IllegalArgumentException.class) + ); + } + + + @Override + protected void runMain() { Application.main(new String[]{}); } +} \ No newline at end of file From 62b44e9aefec394b75c5c327099bea81ba1e1b9a Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 29 Sep 2025 17:35:16 +0900 Subject: [PATCH 13/24] =?UTF-8?q?Docs:=20=EA=B8=B0=EB=8A=A5=EC=9D=84=20?= =?UTF-8?q?=EC=A1=B0=EA=B8=88=20=EB=8D=94=20=EB=B3=B4=EA=B8=B0=20=ED=8E=B8?= =?UTF-8?q?=ED=95=98=EA=B2=8C=20=EC=88=98=EC=A0=95=ED=96=88=EC=8A=B5?= =?UTF-8?q?=EB=8B=88=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/README.md b/docs/README.md index 0fe01e52..a85a12d6 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,6 +1,10 @@ -자동차 이름 입력기능(쉼표를 기준으로 구분,5자 이하만 가능) +자동차 이름 입력기능 +쉼표를 기준으로 구분 +5자 이하만 가능 +이름이 조건에 맞지 않을 시 에러 메시지 이동할 횟수 입력 기능 랜덤을 사용한 자동차 전진 기능 전진과 자동차 이름 동시 출력 기능 -완료 후 우승자 표시 기능(여러 명일 경우 쉼표 구분) -잘못된 값을 입력할 시 종료하는 기능 \ No newline at end of file +완료 후 우승자 표시 기능 +우승자가 여러 명일 경우 쉼표 구분 +잘못된 값을 입력할 시 종료하는 기능 From 549f6cd335b574d942c2e12423f0da25c92c3ee7 Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 29 Sep 2025 17:43:58 +0900 Subject: [PATCH 14/24] =?UTF-8?q?Refactor:=20=EC=8B=B1=EA=B8=80=ED=86=A4?= =?UTF-8?q?=20=ED=8C=A8=ED=84=B4=20=EB=B0=A9=EC=8B=9D=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=ED=8D=BC=EB=B8=94=EB=A6=AD=EC=9C=BC=EB=A1=9C=20=EC=A0=84?= =?UTF-8?q?=ED=99=98=ED=95=98=EC=97=AC=20=EC=9D=BC=EB=B0=98=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EB=A5=BC=20=EC=82=AC=EC=9A=A9=ED=96=88?= =?UTF-8?q?=EC=8A=B5=EB=8B=88=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/GameController.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/controller/GameController.java b/src/main/java/controller/GameController.java index 2265cd88..0d842bc8 100644 --- a/src/main/java/controller/GameController.java +++ b/src/main/java/controller/GameController.java @@ -6,22 +6,22 @@ public class GameController { - private static GameController gameController; + //private static GameController gameController; private final GameView gameView; private final CarService carService; - private GameController() { + public GameController() { gameView = GameView.getInstance(); carService = CarService.getInstance(); } - public static GameController getInstance() { + /*public static GameController getInstance() { if(gameController == null) { gameController = new GameController(); } return gameController; - } + }*/ public void raceSet(String[] names) { gameView.printResult(); @@ -41,7 +41,7 @@ public void raceResult() { public void close() { carService.close(); gameView.close(); - gameController = null; + //gameController = null; } -} \ No newline at end of file +} From 5d703b19e65fce13d99e8e828bd54816f8176594 Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 29 Sep 2025 20:32:09 +0900 Subject: [PATCH 15/24] =?UTF-8?q?Refactor:=20=EC=8B=B1=EA=B8=80=ED=86=A4?= =?UTF-8?q?=20=ED=8C=A8=ED=84=B4=20=EB=B0=A9=EC=8B=9D=EC=9D=84=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=ED=95=98=EC=98=80=EA=B3=A0=20=EA=B7=B8=20=EA=B3=BC?= =?UTF-8?q?=EC=A0=95=EC=97=90=EC=84=9C=20=20close=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=EA=B0=80=20=EB=B9=84=EA=B2=8C=EB=90=98=EC=97=88?= =?UTF-8?q?=EC=8A=B5=EB=8B=88=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/view/GameView.java | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/main/java/view/GameView.java b/src/main/java/view/GameView.java index fd8fa58f..8b27c95c 100644 --- a/src/main/java/view/GameView.java +++ b/src/main/java/view/GameView.java @@ -4,17 +4,12 @@ public class GameView { - private static GameView defaultGameView; + //private static GameView defaultGameView; - private GameView() { + public GameView() { } - public static GameView getInstance() { - if(defaultGameView == null) { - defaultGameView = new GameView(); - } - return defaultGameView; - } + public void printResult() { System.out.println(GameMessage.newLine.getMessage() + GameMessage.result.getMessage()); @@ -29,7 +24,7 @@ public void printWinners(String winners) { } public void close() { - defaultGameView = null; + //defaultGameView = null; } -} \ No newline at end of file +} From 1fb5f2abe6d27155942902c95f4da724d57f438a Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 29 Sep 2025 20:32:36 +0900 Subject: [PATCH 16/24] =?UTF-8?q?Refactor:=20=EC=8B=B1=EA=B8=80=ED=86=A4?= =?UTF-8?q?=20=ED=8C=A8=ED=84=B4=20=EB=B0=A9=EC=8B=9D=EC=9D=84=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=ED=95=98=EC=98=80=EC=8A=B5=EB=8B=88=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/view/InputView.java | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index a6f624be..ae8876e3 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -6,18 +6,13 @@ public class InputView { - private static InputView defaultInputView; - private InputView() { - } - public static InputView getInstance() { - if(defaultInputView == null) { - defaultInputView = new InputView(); - } - return defaultInputView; + public InputView() { } + + public String inputCarNames() { System.out.println(GameMessage.start.getMessage()); return Console.readLine(); @@ -30,7 +25,7 @@ public String inputRaceCount() { public void close() { Console.close(); - defaultInputView = null; + } } From ee828d3606e8bd7b3c9b4877b556f8f142764fa7 Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 29 Sep 2025 20:32:52 +0900 Subject: [PATCH 17/24] =?UTF-8?q?Refactor:=20=EC=8B=B1=EA=B8=80=ED=86=A4?= =?UTF-8?q?=20=ED=8C=A8=ED=84=B4=20=EB=B0=A9=EC=8B=9D=EC=9D=84=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=ED=95=98=EA=B3=A0=20new=EB=A1=9C=20=EC=83=88=EB=A1=9C?= =?UTF-8?q?=20=EC=A0=95=EC=9D=98=ED=95=98=EC=98=80=EC=8A=B5=EB=8B=88?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/game/RacingGame.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/game/RacingGame.java b/src/main/java/game/RacingGame.java index b079aa43..f2d2a525 100644 --- a/src/main/java/game/RacingGame.java +++ b/src/main/java/game/RacingGame.java @@ -8,23 +8,23 @@ public class RacingGame { - private static RacingGame defaultRacingGame; + // private static RacingGame defaultRacingGame; private final InputView inputView; private final GameInputException gameInputException; private final GameController gameController; - private RacingGame() { - inputView = InputView.getInstance(); + public RacingGame() { + inputView = new InputView(); gameInputException = GameInputException.getInstance(); - gameController = GameController.getInstance(); + gameController = new GameController(); } - public static RacingGame getInstance() { + /*public static RacingGame getInstance() { if(defaultRacingGame == null) { defaultRacingGame = new RacingGame(); } return defaultRacingGame; - } + }*/ public void run() { String[] names = preHandleNames(); @@ -52,7 +52,7 @@ public void close() { gameController.close(); gameInputException.close(); inputView.close(); - defaultRacingGame = null; + //defaultRacingGame = null; } -} \ No newline at end of file +} From d5bf22f6b81516ba700d4c6792fc281f55d60538 Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 29 Sep 2025 20:33:03 +0900 Subject: [PATCH 18/24] =?UTF-8?q?Refactor:=20=EC=8B=B1=EA=B8=80=ED=86=A4?= =?UTF-8?q?=20=ED=8C=A8=ED=84=B4=20=EB=B0=A9=EC=8B=9D=EC=9D=84=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=ED=95=98=EC=98=80=EC=8A=B5=EB=8B=88=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/exception/GameInputException.java | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/main/java/exception/GameInputException.java b/src/main/java/exception/GameInputException.java index 327685ea..3f8afe7e 100644 --- a/src/main/java/exception/GameInputException.java +++ b/src/main/java/exception/GameInputException.java @@ -4,17 +4,12 @@ public class GameInputException { - private static GameInputException defaultGameInputException; + //private static GameInputException defaultGameInputException; - private GameInputException() { + public GameInputException() { } - public static GameInputException getInstance() { - if(defaultGameInputException == null) { - defaultGameInputException = new GameInputException(); - } - return defaultGameInputException; - } + public void validateNameLength(String[] names) { for(String name : names) { @@ -37,7 +32,7 @@ public void validateNumberZero(String number) { } public void close() { - defaultGameInputException = null; + //defaultGameInputException = null; } -} \ No newline at end of file +} From d9f3f71088a3e82674b665ba22b26ef98cab6638 Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 29 Sep 2025 20:34:04 +0900 Subject: [PATCH 19/24] =?UTF-8?q?Refactor:=20=EC=8B=B1=EA=B8=80=ED=86=A4?= =?UTF-8?q?=20=ED=8C=A8=ED=84=B4=20=EB=B0=A9=EC=8B=9D=EC=9D=84=20=EC=9D=BC?= =?UTF-8?q?=EB=B0=98=20=ED=81=B4=EB=9E=98=EC=8A=A4=20new=EB=A1=9C=20?= =?UTF-8?q?=EC=A0=95=EC=9D=98=ED=95=98=EC=97=AC=20=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=8F=99=EC=9E=91=EC=9D=84=20=EC=88=98?= =?UTF-8?q?=ED=96=89=ED=95=98=EA=B2=8C=20=ED=96=88=EC=8A=B5=EB=8B=88?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/racingcar/Application.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/racingcar/Application.java b/src/main/java/racingcar/Application.java index 08ca4bc5..abc2431f 100644 --- a/src/main/java/racingcar/Application.java +++ b/src/main/java/racingcar/Application.java @@ -9,9 +9,14 @@ public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 - RacingGame game = RacingGame.getInstance(); - game.run(); - game.close(); + // TODO: 프로그램 구현; + RacingGame game =new RacingGame(); + + try { + game.run(); + } + finally { + game.close(); + } } } From 25e0afecadd25d10046dba7fcf2d69f43dfdd39c Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 29 Sep 2025 20:36:29 +0900 Subject: [PATCH 20/24] =?UTF-8?q?Refactor:=20new=EC=A0=95=EC=9D=98?= =?UTF-8?q?=EA=B0=80=20=ED=95=98=EB=82=98=20=EB=B9=A0=EC=A0=B8=EC=9E=88?= =?UTF-8?q?=EC=96=B4=EC=84=9C=20=EC=88=98=EC=A0=95=ED=96=88=EC=8A=B5?= =?UTF-8?q?=EB=8B=88=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/game/RacingGame.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/game/RacingGame.java b/src/main/java/game/RacingGame.java index f2d2a525..5da077ae 100644 --- a/src/main/java/game/RacingGame.java +++ b/src/main/java/game/RacingGame.java @@ -15,7 +15,7 @@ public class RacingGame { public RacingGame() { inputView = new InputView(); - gameInputException = GameInputException.getInstance(); + gameInputException = new GameInputException(); gameController = new GameController(); } From c4b21b32f555c971cc283bc99e6c9ea7df899dc9 Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 29 Sep 2025 20:40:35 +0900 Subject: [PATCH 21/24] =?UTF-8?q?Refactor:=20=EC=8B=B1=EA=B8=80=ED=86=A4?= =?UTF-8?q?=20=ED=8C=A8=ED=84=B4=EC=9D=84=20=EC=88=98=EC=A0=95=ED=96=88?= =?UTF-8?q?=EC=8A=B5=EB=8B=88=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/service/CarService.java | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/main/java/service/CarService.java b/src/main/java/service/CarService.java index 2d43f0f2..0bc327a5 100644 --- a/src/main/java/service/CarService.java +++ b/src/main/java/service/CarService.java @@ -13,22 +13,17 @@ public class CarService { private final ArrayList carList; private final StringBuilder sb; - private static CarService defaultCarService; + //private static CarService defaultCarService; - private CarService() { + public CarService() { carList = new ArrayList<>(); sb = new StringBuilder(); } - public static CarService getInstance() { - if(defaultCarService == null) { - defaultCarService = new CarService(); - } - return defaultCarService; - } + public void close() { - defaultCarService = null; + //defaultCarService = null; } public void fill(String[] carNameArr,int[] distance) { From 6daf79274cb5d800aae393d87fbd1586d822a2a6 Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 29 Sep 2025 20:42:17 +0900 Subject: [PATCH 22/24] =?UTF-8?q?Refactor:=20=EC=8B=B1=EA=B8=80=ED=86=A4?= =?UTF-8?q?=20=ED=8C=A8=ED=84=B4=EC=9D=84=20=EC=88=98=EC=A0=95=ED=96=88?= =?UTF-8?q?=EC=8A=B5=EB=8B=88=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/GameController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/controller/GameController.java b/src/main/java/controller/GameController.java index 0d842bc8..2ae2f5ab 100644 --- a/src/main/java/controller/GameController.java +++ b/src/main/java/controller/GameController.java @@ -12,8 +12,8 @@ public class GameController { private final CarService carService; public GameController() { - gameView = GameView.getInstance(); - carService = CarService.getInstance(); + gameView = new GameView(); + carService = new CarService(); } /*public static GameController getInstance() { From f560ec2081eb0c7739f5f4e1449ce5db48534f72 Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 29 Sep 2025 20:42:20 +0900 Subject: [PATCH 23/24] =?UTF-8?q?Refactor:=20=EC=8B=B1=EA=B8=80=ED=86=A4?= =?UTF-8?q?=20=ED=8C=A8=ED=84=B4=EC=9D=84=20=EC=88=98=EC=A0=95=ED=96=88?= =?UTF-8?q?=EC=8A=B5=EB=8B=88=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/car/CarTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/test/java/car/CarTest.java b/src/test/java/car/CarTest.java index 00092ef4..5d7dc6ec 100644 --- a/src/test/java/car/CarTest.java +++ b/src/test/java/car/CarTest.java @@ -18,7 +18,7 @@ public class CarTest { String[] carNames = {"a","b","c","d"}; int[] distanceArr = {2,4,1,0}; - CarService carService = CarService.getInstance(); + CarService carService = new CarService(); carService.fill(carNames,distanceArr); String winner = carService.getWinners(); @@ -28,7 +28,7 @@ public class CarTest { @Test void 숫자_정규식_확인() { - GameInputException gameException = GameInputException.getInstance(); + GameInputException gameException = new GameInputException(); String input = "123456789!"; assertThatThrownBy(() -> gameException.validateNumber(input)) .isInstanceOf(IllegalArgumentException.class) @@ -37,7 +37,7 @@ public class CarTest { @Test void 이름_길이_확인() { - GameInputException gameException = GameInputException.getInstance(); + GameInputException gameException = new GameInputException(); String[] names = {"a","a23","abc123"}; assertThatThrownBy(() -> gameException.validateNameLength(names)) .isInstanceOf(IllegalArgumentException.class) @@ -46,10 +46,10 @@ public class CarTest { @Test void 회수_첫숫자_0_체크() { - GameInputException gameException = GameInputException.getInstance(); + GameInputException gameException = new GameInputException(); String input = "01"; assertThatThrownBy(() -> gameException.validateNumberZero(input)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining(GameMessage.countError.getMessage()); } -} \ No newline at end of file +} From 6042c5e04dbad2d11a0e5a3cb1b7ce3d8c7dc5d8 Mon Sep 17 00:00:00 2001 From: pizzaa0930 Date: Mon, 29 Sep 2025 21:08:52 +0900 Subject: [PATCH 24/24] =?UTF-8?q?Refactor:=20=EC=8B=B1=EA=B8=80=ED=86=A4?= =?UTF-8?q?=20=ED=8C=A8=ED=84=B4=EC=9D=84=20=EC=88=98=EC=A0=95=ED=96=88?= =?UTF-8?q?=EC=8A=B5=EB=8B=88=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/GameController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/controller/GameController.java b/src/main/java/controller/GameController.java index 2ae2f5ab..087c787a 100644 --- a/src/main/java/controller/GameController.java +++ b/src/main/java/controller/GameController.java @@ -6,7 +6,7 @@ public class GameController { - //private static GameController gameController; + private final GameView gameView; private final CarService carService;