From b26021128182e627e155acea93710d7384206dcb Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Wed, 12 Mar 2025 21:59:41 +0900 Subject: [PATCH 01/32] =?UTF-8?q?*=20feat=20:=201=EB=8B=A8=EA=B3=84=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Car.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/main/java/Car.java diff --git a/src/main/java/Car.java b/src/main/java/Car.java new file mode 100644 index 00000000..d5498bd9 --- /dev/null +++ b/src/main/java/Car.java @@ -0,0 +1,24 @@ +public class Car { + + private String name; + private int distance; + + public Car(String name) { + this.name = name; + this.distance = 0; + } + + public void move(int randomNumber) { + if (randomNumber >= 4) { + distance++; + } + } + + public String getName() { + return name; + } + + public int getDistance() { + return distance; + } +} From d5a97971cc5604cbcf3885798fab4b5b6af3bca4 Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Wed, 12 Mar 2025 22:00:18 +0900 Subject: [PATCH 02/32] =?UTF-8?q?*=20test=20:=20Car=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/CarTest.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/test/java/CarTest.java diff --git a/src/test/java/CarTest.java b/src/test/java/CarTest.java new file mode 100644 index 00000000..3ab3aec1 --- /dev/null +++ b/src/test/java/CarTest.java @@ -0,0 +1,24 @@ +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CarTest { + @Test + void testCarName(){ + Car car = new Car("KIA"); + assertEquals("KIA", car.getName()); + } + + @Test + void testCarMove(){ + Car car = new Car("TestCar"); + car.move(4); + assertEquals(1, car.getDistance()); + } + + @Test + void testCarNotMove(){ + Car car = new Car("TestCar"); + car.move(3); + assertEquals(0, car.getDistance()); + } +} From 92c56ec17fec69e18dde14bf096da9f8a5f72cf3 Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Wed, 12 Mar 2025 22:00:32 +0900 Subject: [PATCH 03/32] =?UTF-8?q?*=20feat=20:=202=EB=8B=A8=EA=B3=84=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Game.java | 54 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/main/java/Game.java diff --git a/src/main/java/Game.java b/src/main/java/Game.java new file mode 100644 index 00000000..e36248b9 --- /dev/null +++ b/src/main/java/Game.java @@ -0,0 +1,54 @@ +import java.util.ArrayList; +import java.util.List; + +public class Game { + + List carList = new ArrayList(); + List winnerList = new ArrayList(); + + public void playGame(int carNum, int roundNum) { + initGame(carNum); + for (int i = 0; i < roundNum; i++) { + playRound(); + } + makeWinnerList(); + } + + public void initGame(int carNum){ + for (int i = 0 ; i < carNum ; i++) + carList.add(new Car("Car_"+i+"")); + } + + public void playRound() { + for (Car car : carList) { + car.move(getRandom()); + } + } + + public int getRandom(){ + return (int)(Math.random()*10); + } + + public void makeWinnerList() { + Car winner = carList.get(0); + int maxDistance = getMaxDistance(); + for (Car car : carList) { + addWinner(car, maxDistance); + } + } + + private void addWinner(Car car, int maxDistance) { + if (car.getDistance() == maxDistance) { + winnerList.add(car); + } + } + + private int getMaxDistance() { + + int maxDistance = 0; + for (int i = 0; i < carList.size(); i++) { + maxDistance = Math.max(maxDistance, carList.get(i).getDistance()); + } + return maxDistance; + } +} \ No newline at end of file From 9e697818b1790b2600a462995e8b6bfcd060c6a2 Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Wed, 12 Mar 2025 22:00:59 +0900 Subject: [PATCH 04/32] =?UTF-8?q?*=20test=20:=20makeWinnerList()=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BD=94=EB=93=9C=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/GameTest.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/test/java/GameTest.java diff --git a/src/test/java/GameTest.java b/src/test/java/GameTest.java new file mode 100644 index 00000000..66cd53c0 --- /dev/null +++ b/src/test/java/GameTest.java @@ -0,0 +1,22 @@ +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class GameTest { + @Test + public void testGetWinnerList() { + Game game = new Game(); + game.carList.add(new Car("A")); + game.carList.add(new Car("B")); + game.carList.add(new Car("C")); + + game.carList.get(0).move(4); + game.carList.get(1).move(3); + game.carList.get(2).move(4); + + game.makeWinnerList(); + assertEquals(true, game.winnerList.contains(game.carList.get(0))); + assertEquals(false, game.winnerList.contains(game.carList.get(1))); + assertEquals(true, game.winnerList.contains(game.carList.get(2))); + } +} From d187dc866c39c456faa7c2e68b208f883127e119 Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Wed, 12 Mar 2025 22:01:24 +0900 Subject: [PATCH 05/32] =?UTF-8?q?*=20docs=20:=20README=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..c3786d2c --- /dev/null +++ b/README.md @@ -0,0 +1,31 @@ +# ๐Ÿ๐Ÿšฉ ์ž๋™์ฐจ ๊ฒฝ์ฃผ ๊ฒŒ์ž„ ๐ŸŽ๏ธ + +--- + +## ๐Ÿ“‹ํ”„๋กœ์ ํŠธ ๊ฐœ์š” +์ด ํ”„๋กœ์ ํŠธ๋Š” N๊ฐœ์˜ ์ž๋™์ฐจ๊ฐ€ ์ฐธ์—ฌํ•˜์—ฌ ๊ฒฝ์ฃผํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ ˆ์ด์‹ฑ ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค +์ฐธ์—ฌํ•œ ์ž๋™์ฐจ๋“ค์€ ๊ฒŒ์ž„ ๊ทœ์น™์— ๋”ฐ๋ผ ๊ฐ ๋ผ์šด๋“œ๋งˆ๋‹ค 1์นธ ์ „์ง„, ๋˜๋Š” ์ •์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ +๋ชจ๋“  ๋ผ์šด๋“œ๊ฐ€ ๋๋‚œ ๋’ค ๊ฐ€์žฅ ๋งŽ์ด ์ด๋™ํ•œ ์ž๋™์ฐจ๋“ค์ด ์šฐ์Šนํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. + +## ๐ŸŽฎ๊ฒŒ์ž„ ๊ทœ์น™ +* ๐Ÿš— ๊ฒŒ์ž„์— ์ฐธ๊ฐ€ํ•  ์ž๋™์ฐจ ์ˆ˜์™€ ๋ผ์šด๋“œ ์ˆ˜๋ฅผ ์ •ํ•˜๊ณ  ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. + + +* ๐ŸŽฒ ๊ฒŒ์ž„์ด ์‹œ์ž‘๋˜๋ฉด ๋ชจ๋“  ์ฐจ๋Š” ๋งค ๋ผ์šด๋“œ๋งˆ๋‹ค ๋žœ๋ค์œผ๋กœ ๋ฐœ์ƒํ•œ 0๋ถ€ํ„ฐ 10๊นŒ์ง€์˜ ์ˆซ์ž ์ค‘ 3 ์ดํ•˜๊ฐ€ ๋‚˜์˜ฌ ๊ฒฝ์šฐ ์ •์ง€ํ•ด์žˆ๊ณ , 4์ด์ƒ์˜ ์ˆซ์ž๊ฐ€ ๋‚˜์˜ฌ ๊ฒฝ์šฐ 1๋งŒํผ ์ „์ง„ํ•ฉ๋‹ˆ๋‹ค. + + +* ๐Ÿ† ๋ชจ๋“  ๋ผ์šด๋“œ๊ฐ€ ๋๋‚˜๊ณ  ์šฐ์Šนํ•œ ์ž๋™์ฐจ๋ฅผ ํ™•์ธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. + +## ๐Ÿ”งํ”„๋กœ์ ํŠธ ์„ค๊ณ„ +ํ”„๋กœ์ ํŠธ๋Š” ํฌ๊ฒŒ Car, Game ๋‘๊ฐœ์˜ ํด๋ž˜์Šค๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. +### ๐Ÿš—Car ํด๋ž˜์Šค +* Car ํด๋ž˜์Šค๋Š” ํ•„๋“œ๋กœ ์ด๋ฆ„๊ณผ ์ด๋™ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. +* ์ƒ์„ฑ์ž๋Š” ์ด๋ฆ„์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. +* move() ๋ฉ”์„œ๋“œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ ๊ฐ’์ด 4 ์ด์ƒ์ผ ๊ฒฝ์šฐ ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค. + +### ๐ŸŽฎGame ํด๋ž˜์Šค +* ์ฐธ๊ฐ€ํ•˜๋Š” ์ฐจ๋“ค๊ณผ ์šฐ์Šนํ•œ ์ฐจ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๊ฐœ์˜ List ํ•„๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. +* playGame() ๋ฉ”์„œ๋“œ๋Š” ์ฐจ ๊ฐฏ์ˆ˜์™€ ๋ผ์šด๋“œ ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ๊ฒŒ์ž„ ์ดˆ๊ธฐํ™”, ๊ฒŒ์ž„ ์ง„ํ–‰, ์šฐ์Šน์ž ์„ ์ •์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. +* initGame() ๋ฉ”์„œ๋“œ๋Š” playGame()๋ฉ”์„œ๋“œ์—์„œ ๊ฐ€์žฅ ๋จผ์ € ํ˜ธ์ถœ๋˜์–ด ์ฐจ ๊ฐฏ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ๊ฐฏ์ˆ˜๋งŒํผ Car ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํ˜„ ๋‹จ๊ณ„์—์„œ๋Š” ์ฐจ ์ด๋ฆ„์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์ž๋™์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.( ex)Car_1, Car_2, ... ) +* playRound() ๋ฉ”์„œ๋“œ๋Š” ๋ผ์šด๋“œ ์ˆ˜๋งŒํผ ์‹คํ–‰๋˜๋ฉฐ ๊ฒŒ์ž„์— ์ฐธ์—ฌํ•œ ๋ชจ๋“  Carํด๋ž˜์Šค์˜ move()๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. +* makeWinnerList() ๋ฉ”์„œ๋“œ๋Š” ๋ชจ๋“  ๋ผ์šด๋“œ๊ฐ€ ๋๋‚œ ํ›„ ๊ฐ€์žฅ ๋จผ ๊ฑฐ๋ฆฌ๋ฅผ ์ด๋™ํ•œ ์ฐจ๋“ค์„ ์šฐ์Šน์ž ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. \ No newline at end of file From 15ed3216a373d06bf4267178116c9026e53621e2 Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Sat, 15 Mar 2025 16:50:57 +0900 Subject: [PATCH 06/32] =?UTF-8?q?*=20docs=20:=20README=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ์ถ”์ƒํ™”๋ฅผ ํ†ตํ•œ ๋ณ€๊ฒฝ ์˜์—ญ ์ถ•์†Œ --- README.md | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index c3786d2c..68a2f1a8 100644 --- a/README.md +++ b/README.md @@ -17,15 +17,28 @@ * ๐Ÿ† ๋ชจ๋“  ๋ผ์šด๋“œ๊ฐ€ ๋๋‚˜๊ณ  ์šฐ์Šนํ•œ ์ž๋™์ฐจ๋ฅผ ํ™•์ธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ## ๐Ÿ”งํ”„๋กœ์ ํŠธ ์„ค๊ณ„ -ํ”„๋กœ์ ํŠธ๋Š” ํฌ๊ฒŒ Car, Game ๋‘๊ฐœ์˜ ํด๋ž˜์Šค๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. -### ๐Ÿš—Car ํด๋ž˜์Šค -* Car ํด๋ž˜์Šค๋Š” ํ•„๋“œ๋กœ ์ด๋ฆ„๊ณผ ์ด๋™ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. +ํ”„๋กœ์ ํŠธ๋Š” ํฌ๊ฒŒ ์ž๋™์ฐจ, ๊ฒŒ์ž„์„ ๊ตฌํ˜„ํ•œ ๋‘๊ฐœ์˜ ํด๋ž˜์Šค๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. +### ๐Ÿš—์ž๋™์ฐจ ํด๋ž˜์Šค +* ์ž๋™์ฐจ ํด๋ž˜์Šค๋Š” ํ•„๋“œ๋กœ ์ด๋ฆ„๊ณผ ์ด๋™ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. + + * ์ƒ์„ฑ์ž๋Š” ์ด๋ฆ„์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. -* move() ๋ฉ”์„œ๋“œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ ๊ฐ’์ด 4 ์ด์ƒ์ผ ๊ฒฝ์šฐ ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค. + + +* ์ž๋™์ฐจ์˜ ์ด๋™ ๋ฉ”์„œ๋“œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ ๊ฐ’์ด 4 ์ด์ƒ์ผ ๊ฒฝ์šฐ ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค. ### ๐ŸŽฎGame ํด๋ž˜์Šค -* ์ฐธ๊ฐ€ํ•˜๋Š” ์ฐจ๋“ค๊ณผ ์šฐ์Šนํ•œ ์ฐจ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๊ฐœ์˜ List ํ•„๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. -* playGame() ๋ฉ”์„œ๋“œ๋Š” ์ฐจ ๊ฐฏ์ˆ˜์™€ ๋ผ์šด๋“œ ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ๊ฒŒ์ž„ ์ดˆ๊ธฐํ™”, ๊ฒŒ์ž„ ์ง„ํ–‰, ์šฐ์Šน์ž ์„ ์ •์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. -* initGame() ๋ฉ”์„œ๋“œ๋Š” playGame()๋ฉ”์„œ๋“œ์—์„œ ๊ฐ€์žฅ ๋จผ์ € ํ˜ธ์ถœ๋˜์–ด ์ฐจ ๊ฐฏ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ๊ฐฏ์ˆ˜๋งŒํผ Car ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํ˜„ ๋‹จ๊ณ„์—์„œ๋Š” ์ฐจ ์ด๋ฆ„์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์ž๋™์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.( ex)Car_1, Car_2, ... ) -* playRound() ๋ฉ”์„œ๋“œ๋Š” ๋ผ์šด๋“œ ์ˆ˜๋งŒํผ ์‹คํ–‰๋˜๋ฉฐ ๊ฒŒ์ž„์— ์ฐธ์—ฌํ•œ ๋ชจ๋“  Carํด๋ž˜์Šค์˜ move()๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. -* makeWinnerList() ๋ฉ”์„œ๋“œ๋Š” ๋ชจ๋“  ๋ผ์šด๋“œ๊ฐ€ ๋๋‚œ ํ›„ ๊ฐ€์žฅ ๋จผ ๊ฑฐ๋ฆฌ๋ฅผ ์ด๋™ํ•œ ์ฐจ๋“ค์„ ์šฐ์Šน์ž ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. \ No newline at end of file +* ์ฐธ๊ฐ€ํ•˜๋Š” ์ฐจ๋“ค๊ณผ ์šฐ์Šนํ•œ ์ฐจ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. + + +* ๊ฒŒ์ž„ ์‹คํ–‰ ๋ฉ”์„œ๋“œ๋Š” ์ฐจ ๊ฐฏ์ˆ˜์™€ ๋ผ์šด๋“œ ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ๊ฒŒ์ž„ ์ดˆ๊ธฐํ™”, ๊ฒŒ์ž„ ์ง„ํ–‰, ์šฐ์Šน์ž ์„ ์ •์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. + + +* ๊ฒŒ์ž„ ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ๋Š” ๊ฒŒ์ž„ ์‹คํ–‰ ์ค‘ ๊ฐ€์žฅ ๋จผ์ € ํ˜ธ์ถœ๋˜์–ด ์ฐจ ๊ฐฏ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ๊ฐฏ์ˆ˜๋งŒํผ ์ž๋™์ฐจ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํ˜„ ๋‹จ๊ณ„์—์„œ๋Š” ์ฐจ ์ด๋ฆ„์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์ž๋™์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.( ex)Car_1, Car_2, ... ) + + +* ๋ผ์šด๋“œ ์ง„ํ–‰ ๋ฉ”์„œ๋“œ๋Š” ๋ผ์šด๋“œ ์ˆ˜๋งŒํผ ์‹คํ–‰๋˜๋ฉฐ ๊ฒŒ์ž„์— ์ฐธ์—ฌํ•œ ๋ชจ๋“  ์ฐจ์˜ ์ด๋™ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. +์ด๋•Œ ๊ฐ ์ž๋™์ฐจ๋งˆ๋‹ค ๋žœ๋ค ๋ณ€์ˆ˜ ์ƒ์„ฑ๊ธฐ๋ฅผ ํ†ตํ•ด 0๋ถ€ํ„ฐ 10๊นŒ์ง€์˜ ์ˆซ์ž ์ค‘ ํ•˜๋‚˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ค๋‹ˆ๋‹ค + + +* ์šฐ์Šน์ž ์„ ์ • ๋ฉ”์„œ๋“œ๋Š” ๋ชจ๋“  ๋ผ์šด๋“œ๊ฐ€ ๋๋‚œ ํ›„ ๊ฐ€์žฅ ๋จผ ๊ฑฐ๋ฆฌ๋ฅผ ์ด๋™ํ•œ ์ฐจ๋“ค์„ ์šฐ์Šน์ž ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. \ No newline at end of file From e38bd09e7caf7c23045d4bb92156a7815a4ef69c Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Sat, 15 Mar 2025 23:06:22 +0900 Subject: [PATCH 07/32] =?UTF-8?q?*=20fix=20:=20Car,=20Game=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EB=A6=AC=EB=B7=B0=201=EC=B0=A8=20?= =?UTF-8?q?=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๊ณตํ†ต Reformat์„ ํ†ตํ•œ ์„œ์‹ ํ†ต์ผ Car ํด๋ž˜์Šค name ํ•„๋“œ final ์ง€์ • ๊ฐ€๋…์„ฑ ์ฆ๊ฐ€๋ฅผ ์œ„ํ•œ ์ƒ์ˆ˜ ์ถ”๊ฐ€ isSamePosition()๋ฉ”์„œ๋“œ ์ถ”๊ฐ€ Game ํด๋ž˜์Šค ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ ์‹œ <>์—ฐ์‚ฐ์ž ์‚ฌ์šฉ ๋ฏธ์‚ฌ์šฉ ๋ผ์ธ ์‚ญ์ œ ๋‚œ์ˆ˜ ์ƒ์„ฑ ๋ฐฉ์‹ ๋ณ€๊ฒฝ ๋งˆ์ง€๋ง‰ ์ค„ ๊ฐœํ–‰ ์ถ”๊ฐ€ enhanced for loop ์‚ฌ์šฉ --- src/main/java/Car.java | 10 ++++++++-- src/main/java/Game.java | 27 ++++++++++++++------------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/main/java/Car.java b/src/main/java/Car.java index d5498bd9..163039c5 100644 --- a/src/main/java/Car.java +++ b/src/main/java/Car.java @@ -1,6 +1,8 @@ public class Car { - private String name; + private static final int CRITICAL_NUMBER_TO_MOVE = 4; + + private final String name; private int distance; public Car(String name) { @@ -9,7 +11,7 @@ public Car(String name) { } public void move(int randomNumber) { - if (randomNumber >= 4) { + if (randomNumber >= CRITICAL_NUMBER_TO_MOVE) { distance++; } } @@ -21,4 +23,8 @@ public String getName() { public int getDistance() { return distance; } + + public boolean isSamePosition(int distance) { + return distance == this.distance; + } } diff --git a/src/main/java/Game.java b/src/main/java/Game.java index e36248b9..2d31413e 100644 --- a/src/main/java/Game.java +++ b/src/main/java/Game.java @@ -1,10 +1,11 @@ import java.util.ArrayList; import java.util.List; +import java.util.Random; public class Game { - List carList = new ArrayList(); - List winnerList = new ArrayList(); + List carList = new ArrayList<>(); + List winnerList = new ArrayList<>(); public void playGame(int carNum, int roundNum) { initGame(carNum); @@ -14,9 +15,10 @@ public void playGame(int carNum, int roundNum) { makeWinnerList(); } - public void initGame(int carNum){ - for (int i = 0 ; i < carNum ; i++) - carList.add(new Car("Car_"+i+"")); + public void initGame(int carNum) { + for (int i = 0; i < carNum; i++) { + carList.add(new Car("Car_" + i)); + } } public void playRound() { @@ -25,12 +27,11 @@ public void playRound() { } } - public int getRandom(){ - return (int)(Math.random()*10); + public int getRandom() { + return new Random().nextInt(10); } public void makeWinnerList() { - Car winner = carList.get(0); int maxDistance = getMaxDistance(); for (Car car : carList) { addWinner(car, maxDistance); @@ -38,17 +39,17 @@ public void makeWinnerList() { } private void addWinner(Car car, int maxDistance) { - if (car.getDistance() == maxDistance) { + if (car.isSamePosition(maxDistance)) { winnerList.add(car); } } private int getMaxDistance() { - int maxDistance = 0; - for (int i = 0; i < carList.size(); i++) { - maxDistance = Math.max(maxDistance, carList.get(i).getDistance()); + int maxDistance = 0; + for (Car car : carList) { + maxDistance = Math.max(maxDistance, car.getDistance()); } return maxDistance; } -} \ No newline at end of file +} From 96b822e780fd619b1817230b1982c80bba944cb4 Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Sat, 15 Mar 2025 23:07:25 +0900 Subject: [PATCH 08/32] =?UTF-8?q?*=20test=20:=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EB=A6=AC=EB=B7=B0=201?= =?UTF-8?q?=EC=B0=A8=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ์„ ์œ„ํ•œ ์ƒ์ˆ˜ ํ•„๋“œ ์ถ”๊ฐ€ assertj๋ฅผ ์ด์šฉํ•œ ํ…Œ์ŠคํŠธ๋กœ ๋ณ€๊ฒฝ --- src/test/java/CarTest.java | 23 ++++++++++++++--------- src/test/java/GameTest.java | 16 +++++++++------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/test/java/CarTest.java b/src/test/java/CarTest.java index 3ab3aec1..3ec1c162 100644 --- a/src/test/java/CarTest.java +++ b/src/test/java/CarTest.java @@ -1,24 +1,29 @@ import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; + +import static org.assertj.core.api.Assertions.*; public class CarTest { + + private static final int MOVE_FORWARD = 4; + private static final int NOT_MOVE = 3; + @Test - void testCarName(){ + void testCarName() { Car car = new Car("KIA"); - assertEquals("KIA", car.getName()); + assertThat(car.getName()).isEqualTo("KIA"); } @Test - void testCarMove(){ + void testCarMove() { Car car = new Car("TestCar"); - car.move(4); - assertEquals(1, car.getDistance()); + car.move(MOVE_FORWARD); + assertThat(car.getDistance()).isEqualTo(1); } @Test - void testCarNotMove(){ + void testCarNotMove() { Car car = new Car("TestCar"); - car.move(3); - assertEquals(0, car.getDistance()); + car.move(NOT_MOVE - 1); + assertThat(car.getDistance()).isEqualTo(0); } } diff --git a/src/test/java/GameTest.java b/src/test/java/GameTest.java index 66cd53c0..46f0cb52 100644 --- a/src/test/java/GameTest.java +++ b/src/test/java/GameTest.java @@ -1,8 +1,12 @@ import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.assertj.core.api.Assertions.*; public class GameTest { + + private static final int MOVE_FORWARD = 4; + private static final int NOT_MOVE = 3; + @Test public void testGetWinnerList() { Game game = new Game(); @@ -10,13 +14,11 @@ public void testGetWinnerList() { game.carList.add(new Car("B")); game.carList.add(new Car("C")); - game.carList.get(0).move(4); - game.carList.get(1).move(3); - game.carList.get(2).move(4); + game.carList.get(0).move(MOVE_FORWARD); + game.carList.get(1).move(NOT_MOVE); + game.carList.get(2).move(MOVE_FORWARD); game.makeWinnerList(); - assertEquals(true, game.winnerList.contains(game.carList.get(0))); - assertEquals(false, game.winnerList.contains(game.carList.get(1))); - assertEquals(true, game.winnerList.contains(game.carList.get(2))); + assertThat(game.winnerList).containsOnly(game.carList.get(0), game.carList.get(2)); } } From 11094f86d4202b54c9816b0a4b41f979fccee3b1 Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Wed, 19 Mar 2025 23:50:43 +0900 Subject: [PATCH 09/32] =?UTF-8?q?*=20feat=20:=203=EB=8B=A8=EA=B3=84=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MVC๋ชจ๋ธ ๊ฐœ๋…์„ ํ™œ์šฉํ•˜์—ฌ domain, view, controller๋ฅผ ๋‚˜๋ˆ„์–ด ๊ตฌํ˜„ --- src/main/java/Game.java | 55 ------------------- src/main/java/RacingApplication.java | 10 ++++ .../java/controller/RacingController.java | 35 ++++++++++++ src/main/java/{ => domain}/Car.java | 18 +++--- src/main/java/domain/Cars.java | 49 +++++++++++++++++ src/main/java/domain/NumberGenerator.java | 7 +++ src/main/java/domain/Racing.java | 19 +++++++ .../java/domain/RandomNumberGenerator.java | 12 ++++ src/main/java/view/InputView.java | 17 ++++++ src/main/java/view/OutputView.java | 40 ++++++++++++++ 10 files changed, 200 insertions(+), 62 deletions(-) delete mode 100644 src/main/java/Game.java create mode 100644 src/main/java/RacingApplication.java create mode 100644 src/main/java/controller/RacingController.java rename src/main/java/{ => domain}/Car.java (50%) create mode 100644 src/main/java/domain/Cars.java create mode 100644 src/main/java/domain/NumberGenerator.java create mode 100644 src/main/java/domain/Racing.java create mode 100644 src/main/java/domain/RandomNumberGenerator.java create mode 100644 src/main/java/view/InputView.java create mode 100644 src/main/java/view/OutputView.java diff --git a/src/main/java/Game.java b/src/main/java/Game.java deleted file mode 100644 index 2d31413e..00000000 --- a/src/main/java/Game.java +++ /dev/null @@ -1,55 +0,0 @@ -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -public class Game { - - List carList = new ArrayList<>(); - List winnerList = new ArrayList<>(); - - public void playGame(int carNum, int roundNum) { - initGame(carNum); - for (int i = 0; i < roundNum; i++) { - playRound(); - } - makeWinnerList(); - } - - public void initGame(int carNum) { - for (int i = 0; i < carNum; i++) { - carList.add(new Car("Car_" + i)); - } - } - - public void playRound() { - for (Car car : carList) { - car.move(getRandom()); - } - } - - public int getRandom() { - return new Random().nextInt(10); - } - - public void makeWinnerList() { - int maxDistance = getMaxDistance(); - for (Car car : carList) { - addWinner(car, maxDistance); - } - } - - private void addWinner(Car car, int maxDistance) { - if (car.isSamePosition(maxDistance)) { - winnerList.add(car); - } - } - - private int getMaxDistance() { - - int maxDistance = 0; - for (Car car : carList) { - maxDistance = Math.max(maxDistance, car.getDistance()); - } - return maxDistance; - } -} diff --git a/src/main/java/RacingApplication.java b/src/main/java/RacingApplication.java new file mode 100644 index 00000000..16a3ab1c --- /dev/null +++ b/src/main/java/RacingApplication.java @@ -0,0 +1,10 @@ +import controller.RacingController; +import domain.RandomNumberGenerator; + +public class RacingApplication { + + public static void main(String[] args) { + new RacingController().run(new RandomNumberGenerator()); + } + +} diff --git a/src/main/java/controller/RacingController.java b/src/main/java/controller/RacingController.java new file mode 100644 index 00000000..502b27e9 --- /dev/null +++ b/src/main/java/controller/RacingController.java @@ -0,0 +1,35 @@ +package controller; + +import domain.Car; +import domain.Cars; +import domain.Racing; +import domain.NumberGenerator; +import view.InputView; +import view.OutputView; + +public class RacingController { + + Racing racing; + Cars carList; + Cars winnerList; + int RoundNumber; + + public void run(NumberGenerator numberGenerator) { + carList = Cars.create(InputView.getCarNames(), numberGenerator); + RoundNumber = InputView.getRoundNumber(); + racing = new Racing(carList); + + OutputView.printResult(); + playRace(); + + winnerList = racing.findWinners(); + OutputView.printWinners(winnerList.getCars()); + } + + public void playRace() { + for (int i = 0; i < RoundNumber; i++) { + racing.playRound(); + OutputView.printProcess(carList.getCars()); + } + } +} diff --git a/src/main/java/Car.java b/src/main/java/domain/Car.java similarity index 50% rename from src/main/java/Car.java rename to src/main/java/domain/Car.java index 163039c5..160e7587 100644 --- a/src/main/java/Car.java +++ b/src/main/java/domain/Car.java @@ -1,21 +1,29 @@ +package domain; + public class Car { private static final int CRITICAL_NUMBER_TO_MOVE = 4; private final String name; private int distance; + private NumberGenerator numberGenerator; - public Car(String name) { + public Car(String name, NumberGenerator numberGenerator) { this.name = name; this.distance = 0; + this.numberGenerator = numberGenerator; } - public void move(int randomNumber) { - if (randomNumber >= CRITICAL_NUMBER_TO_MOVE) { + public void move() { + if (numberGenerator.generateNumber() >= CRITICAL_NUMBER_TO_MOVE) { distance++; } } + public boolean isInPosition(int position) { + return distance == position; + } + public String getName() { return name; } @@ -23,8 +31,4 @@ public String getName() { public int getDistance() { return distance; } - - public boolean isSamePosition(int distance) { - return distance == this.distance; - } } diff --git a/src/main/java/domain/Cars.java b/src/main/java/domain/Cars.java new file mode 100644 index 00000000..3b704841 --- /dev/null +++ b/src/main/java/domain/Cars.java @@ -0,0 +1,49 @@ +package domain; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class Cars { + + private List cars; + + private Cars(List cars) { + this.cars = cars; + } + + public static Cars create(String[] carNames, NumberGenerator numberGenerator) { + List newCars = new ArrayList(); + for (String carName : carNames) { + newCars.add(new Car(carName, numberGenerator)); + } + return new Cars(newCars); + } + + public void move() { + for (Car car : cars) { + car.move(); + } + } + + public int getMaxDistance() { + int maxDistance = 0; + for (Car car : cars) { + maxDistance = Math.max(maxDistance, car.getDistance()); + } + return maxDistance; + } + + public Cars findCarsInPosition(int position) { + List carsInPosition = new ArrayList<>(); + return new Cars( + cars.stream() + .filter(car -> car.isInPosition(position)) + .collect(Collectors.toList()) + ); + } + + public List getCars() { + return cars; + } +} diff --git a/src/main/java/domain/NumberGenerator.java b/src/main/java/domain/NumberGenerator.java new file mode 100644 index 00000000..7fe62aff --- /dev/null +++ b/src/main/java/domain/NumberGenerator.java @@ -0,0 +1,7 @@ +package domain; + +public interface NumberGenerator { + + int generateNumber(); + +} diff --git a/src/main/java/domain/Racing.java b/src/main/java/domain/Racing.java new file mode 100644 index 00000000..17fa6a0d --- /dev/null +++ b/src/main/java/domain/Racing.java @@ -0,0 +1,19 @@ +package domain; + +public class Racing { + + private final Cars carList; + + public Racing(Cars carList) { + this.carList = carList; + } + + public void playRound() { + carList.move(); + } + + public Cars findWinners() { + return carList.findCarsInPosition(carList.getMaxDistance()); + } + +} diff --git a/src/main/java/domain/RandomNumberGenerator.java b/src/main/java/domain/RandomNumberGenerator.java new file mode 100644 index 00000000..458504cb --- /dev/null +++ b/src/main/java/domain/RandomNumberGenerator.java @@ -0,0 +1,12 @@ +package domain; + +import java.util.Random; + +public class RandomNumberGenerator implements NumberGenerator { + + @Override + public int generateNumber() { + return new Random().nextInt(10); + } + +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java new file mode 100644 index 00000000..e9e35554 --- /dev/null +++ b/src/main/java/view/InputView.java @@ -0,0 +1,17 @@ +package view; + +import java.util.Scanner; + +public class InputView { + + private static Scanner scanner = new Scanner(System.in); + + public static String[] getCarNames() { + return scanner.nextLine().split(","); + } + + public static int getRoundNumber() { + return Integer.parseInt(scanner.nextLine()); + } + +} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java new file mode 100644 index 00000000..bc5efd15 --- /dev/null +++ b/src/main/java/view/OutputView.java @@ -0,0 +1,40 @@ +package view; + +import domain.Car; +import java.util.ArrayList; +import java.util.List; + +public class OutputView { + + public static void printResult() { + System.out.println("์‹คํ–‰ ๊ฒฐ๊ณผ"); + } + + public static void printProcess(List cars) { + for (Car car : cars) { + System.out.println(formmatCarInfo(car)); + } + System.out.println(); + } + + public static String formmatCarInfo(Car car) { + StringBuilder formatted; + formatted = new StringBuilder(car.getName() + " : "); + for (int i = 0; i < car.getDistance(); i++) { + formatted.append("-"); + } + return formatted.toString(); + } + + public static void printWinners(List winners) { + List winnerNames = new ArrayList<>(); + for (Car winner : winners) { + winnerNames.add(winner.getName()); + } + System.out.println(formattWinnerNames(winnerNames) + "๊ฐ€ ์ตœ์ข… ์šฐ์Šนํ–ˆ์Šต๋‹ˆ๋‹ค."); + } + + public static String formattWinnerNames(List cars) { + return cars.toString().replace("[", "").replace("]", ""); + } +} From 7b7c7146b8ee2f046681dbfb25550b99b1ece323 Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Wed, 19 Mar 2025 23:51:44 +0900 Subject: [PATCH 10/32] =?UTF-8?q?*=20test=20:=204=EB=8B=A8=EA=B3=84=20?= =?UTF-8?q?=EB=B6=80=EB=B6=84=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Car์˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋งŒ ๊ตฌํ˜„ ์ „๋žต ํŒจํ„ด์„ ์ ์šฉํ•œ NumberGenerator๋กœ ๊ตฌํ˜„ --- src/test/java/CarTest.java | 11 +++++----- src/test/java/GameTest.java | 23 ++++++++++---------- src/test/java/MovableNumberGenerator.java | 12 ++++++++++ src/test/java/NotMovableNumberGenerator.java | 12 ++++++++++ 4 files changed, 42 insertions(+), 16 deletions(-) create mode 100644 src/test/java/MovableNumberGenerator.java create mode 100644 src/test/java/NotMovableNumberGenerator.java diff --git a/src/test/java/CarTest.java b/src/test/java/CarTest.java index 3ec1c162..ecd0288a 100644 --- a/src/test/java/CarTest.java +++ b/src/test/java/CarTest.java @@ -1,3 +1,4 @@ +import domain.Car; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.*; @@ -9,21 +10,21 @@ public class CarTest { @Test void testCarName() { - Car car = new Car("KIA"); + Car car = new Car("KIA", new MovableNumberGenerator()); assertThat(car.getName()).isEqualTo("KIA"); } @Test void testCarMove() { - Car car = new Car("TestCar"); - car.move(MOVE_FORWARD); + Car car = new Car("TestCar", new MovableNumberGenerator()); + car.move(); assertThat(car.getDistance()).isEqualTo(1); } @Test void testCarNotMove() { - Car car = new Car("TestCar"); - car.move(NOT_MOVE - 1); + Car car = new Car("TestCar", new NotMovableNumberGenerator()); + car.move(); assertThat(car.getDistance()).isEqualTo(0); } } diff --git a/src/test/java/GameTest.java b/src/test/java/GameTest.java index 46f0cb52..a8a8c6bb 100644 --- a/src/test/java/GameTest.java +++ b/src/test/java/GameTest.java @@ -1,24 +1,25 @@ +/* +import domain.Car; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.*; public class GameTest { - private static final int MOVE_FORWARD = 4; - private static final int NOT_MOVE = 3; - @Test public void testGetWinnerList() { - Game game = new Game(); - game.carList.add(new Car("A")); - game.carList.add(new Car("B")); - game.carList.add(new Car("C")); + Cars carList = Cars; + racing.carList.add(new Car("A", new MovableNumberGenerator())); + racing.carList.add(new Car("B", new NotMovableNumberGenerator())); + racing.carList.add(new Car("C", new MovableNumberGenerator())); - game.carList.get(0).move(MOVE_FORWARD); - game.carList.get(1).move(NOT_MOVE); - game.carList.get(2).move(MOVE_FORWARD); + racing.carList.get(0).move(MOVE_FORWARD); + racing.carList.get(1).move(NOT_MOVE); + racing.carList.get(2).move(MOVE_FORWARD); - game.makeWinnerList(); + racing.makeWinnerList(); assertThat(game.winnerList).containsOnly(game.carList.get(0), game.carList.get(2)); } + } +*/ diff --git a/src/test/java/MovableNumberGenerator.java b/src/test/java/MovableNumberGenerator.java new file mode 100644 index 00000000..d1bf1088 --- /dev/null +++ b/src/test/java/MovableNumberGenerator.java @@ -0,0 +1,12 @@ +import domain.NumberGenerator; + +public class MovableNumberGenerator implements NumberGenerator { + + public static final int MOVABLE_NUMBER = 4; + + @Override + public int generateNumber() { + return MOVABLE_NUMBER; + } + +} diff --git a/src/test/java/NotMovableNumberGenerator.java b/src/test/java/NotMovableNumberGenerator.java new file mode 100644 index 00000000..908f11f7 --- /dev/null +++ b/src/test/java/NotMovableNumberGenerator.java @@ -0,0 +1,12 @@ +import domain.NumberGenerator; + +public class NotMovableNumberGenerator implements NumberGenerator { + + public static final int NOT_MOVABLE_NUMBER = 3; + + @Override + public int generateNumber() { + return NOT_MOVABLE_NUMBER; + } + +} From 833a5a8637410d595f38fd90cbf12b98484e6355 Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Sat, 22 Mar 2025 16:17:39 +0900 Subject: [PATCH 11/32] =?UTF-8?q?*=20test=20:=20Car=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Car์˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ˆ˜์ • --- src/test/java/CarTest.java | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/test/java/CarTest.java b/src/test/java/CarTest.java index ecd0288a..0b797d20 100644 --- a/src/test/java/CarTest.java +++ b/src/test/java/CarTest.java @@ -5,13 +5,10 @@ public class CarTest { - private static final int MOVE_FORWARD = 4; - private static final int NOT_MOVE = 3; - @Test void testCarName() { - Car car = new Car("KIA", new MovableNumberGenerator()); - assertThat(car.getName()).isEqualTo("KIA"); + Car car = new Car("TestCar", new MovableNumberGenerator()); + assertThat(car.getName()).isEqualTo("TestCar"); } @Test @@ -27,4 +24,19 @@ void testCarNotMove() { car.move(); assertThat(car.getDistance()).isEqualTo(0); } + + @Test + void testCarHasSamePosition() { + Car car = new Car("TestCar", new MovableNumberGenerator()); + car.move(); + assertThat(car.hasSamePosition(1)).isEqualTo(true); + } + + @Test + void testCarIsNotInPosition() { + Car car = new Car("TestCar", new MovableNumberGenerator()); + car.move(); + assertThat(car.hasSamePosition(0)).isEqualTo(false); + } + } From 46cbdbf00170c51220c12f819ebabfceb2de40ae Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Sat, 22 Mar 2025 16:18:11 +0900 Subject: [PATCH 12/32] =?UTF-8?q?*=20test=20:=20Cars=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cars์˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ --- src/test/java/CarsTest.java | 89 +++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 src/test/java/CarsTest.java diff --git a/src/test/java/CarsTest.java b/src/test/java/CarsTest.java new file mode 100644 index 00000000..bb350c84 --- /dev/null +++ b/src/test/java/CarsTest.java @@ -0,0 +1,89 @@ +import static org.assertj.core.api.Assertions.assertThat; + +import domain.Car; +import domain.Cars; +import java.util.ArrayList; +import java.util.List; +import org.junit.jupiter.api.Test; + +public class CarsTest { + + @Test + public void testCreateCars() { + List carNames = List.of("A", "B", "C"); + Cars cars = Cars.create(carNames, new MovableNumberGenerator() ); + + assertThat(cars.getCars().size()).isEqualTo(3); + assertThat(cars.getCars().get(0).getName()).isEqualTo("A"); + assertThat(cars.getCars().get(1).getName()).isEqualTo("B"); + assertThat(cars.getCars().get(2).getName()).isEqualTo("C"); + } + + @Test void testCarsOf() { + List carList = new ArrayList<>(); + Cars cars; + + carList.add(new Car("A", new MovableNumberGenerator())); + carList.add(new Car("B", new MovableNumberGenerator())); + carList.add(new Car("C", new MovableNumberGenerator())); + + cars = Cars.of(carList); + + assertThat(cars.getCars().size()).isEqualTo(3); + assertThat(cars.getCars().get(0).getName()).isEqualTo("A"); + assertThat(cars.getCars().get(1).getName()).isEqualTo("B"); + assertThat(cars.getCars().get(2).getName()).isEqualTo("C"); + } + + @Test + public void testCarsMove() { + List carList = new ArrayList<>(); + Cars cars; + + carList.add(new Car("A", new MovableNumberGenerator())); + carList.add(new Car("B", new MovableNumberGenerator())); + carList.add(new Car("C", new NotMovableNumberGenerator())); + + cars = Cars.of(carList); + cars.move(); + + assertThat(cars.getCars().get(0).getDistance()).isEqualTo(1); + assertThat(cars.getCars().get(1).getDistance()).isEqualTo(1); + assertThat(cars.getCars().get(2).getDistance()).isEqualTo(0); + } + + @Test + public void testCarsGetMaxDistance() { + List carList = new ArrayList<>(); + Cars cars; + + carList.add(new Car("A", new NotMovableNumberGenerator())); + carList.add(new Car("B", new MovableNumberGenerator())); + carList.add(new Car("C", new NotMovableNumberGenerator())); + + cars = Cars.of(carList); + + cars.move(); + cars.move(); + + assertThat(cars.getMaxDistance()).isEqualTo(2); + } + + @Test + public void testFindCarsInSamePosition() { + List carList = new ArrayList<>(); + + carList.add(new Car("A", new NotMovableNumberGenerator())); + carList.add(new Car("B", new MovableNumberGenerator())); + carList.add(new Car("C", new MovableNumberGenerator())); + + Cars cars = Cars.of(carList); + + cars.move(); + cars.move(); + + Cars carsInSamePosition = cars.findCarsInSamePosition(2); + assertThat(carsInSamePosition.getCars()).containsOnly(carList.get(1), carList.get(2)); + } + +} From 1386774becdc3b196d9c8de6ddd5c49d2b7461bc Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Sat, 22 Mar 2025 16:19:24 +0900 Subject: [PATCH 13/32] =?UTF-8?q?*=20test=20:=20Game=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=82=AD=EC=A0=9C=20=EB=B0=8F?= =?UTF-8?q?=20Racing=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gameํด๋ž˜์Šค๊ฐ€ Racingํด๋ž˜์Šค๋กœ ๋ณ€๊ฒฝ๋จ์— ๋”ฐ๋ฅธ ์ˆ˜์ • --- src/test/java/GameTest.java | 25 -------------------- src/test/java/RacingTest.java | 44 +++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 25 deletions(-) delete mode 100644 src/test/java/GameTest.java create mode 100644 src/test/java/RacingTest.java diff --git a/src/test/java/GameTest.java b/src/test/java/GameTest.java deleted file mode 100644 index a8a8c6bb..00000000 --- a/src/test/java/GameTest.java +++ /dev/null @@ -1,25 +0,0 @@ -/* -import domain.Car; -import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.Assertions.*; - -public class GameTest { - - @Test - public void testGetWinnerList() { - Cars carList = Cars; - racing.carList.add(new Car("A", new MovableNumberGenerator())); - racing.carList.add(new Car("B", new NotMovableNumberGenerator())); - racing.carList.add(new Car("C", new MovableNumberGenerator())); - - racing.carList.get(0).move(MOVE_FORWARD); - racing.carList.get(1).move(NOT_MOVE); - racing.carList.get(2).move(MOVE_FORWARD); - - racing.makeWinnerList(); - assertThat(game.winnerList).containsOnly(game.carList.get(0), game.carList.get(2)); - } - -} -*/ diff --git a/src/test/java/RacingTest.java b/src/test/java/RacingTest.java new file mode 100644 index 00000000..3eeab77b --- /dev/null +++ b/src/test/java/RacingTest.java @@ -0,0 +1,44 @@ +import static org.assertj.core.api.Assertions.assertThat; + +import domain.Car; +import domain.Cars; +import domain.Racing; +import java.util.ArrayList; +import java.util.List; +import org.junit.jupiter.api.Test; + +public class RacingTest { + + @Test + public void testPlayRound() { + List carList = new ArrayList<>(); + + carList.add(new Car("A", new NotMovableNumberGenerator())); + carList.add(new Car("B", new MovableNumberGenerator())); + carList.add(new Car("C", new MovableNumberGenerator())); + + Racing racing = new Racing(Cars.of(carList)); + racing.playRound(); + + assertThat(carList.get(0).getDistance()).isEqualTo(0); + assertThat(carList.get(1).getDistance()).isEqualTo(1); + assertThat(carList.get(2).getDistance()).isEqualTo(1); + } + + @Test + public void testFindWinner() { + List carList = new ArrayList<>(); + + carList.add(new Car("A", new NotMovableNumberGenerator())); + carList.add(new Car("B", new MovableNumberGenerator())); + carList.add(new Car("C", new MovableNumberGenerator())); + + Racing racing = new Racing(Cars.of(carList)); + racing.playRound(); + + Cars winnerList = racing.findWinners(); + + assertThat(winnerList.getCars()).containsOnly(carList.get(1), carList.get(2)); + } + +} From e6e1089e671ced14dd611d662323980fb12e4c7a Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Sat, 22 Mar 2025 16:20:46 +0900 Subject: [PATCH 14/32] =?UTF-8?q?*=20test=20:=20Controller=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Controller ํด๋ž˜์Šค์˜ run ๋ฉ”์„œ๋“œ๋ฅผ ์ œ์™ธํ•œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ --- src/test/java/ControllerTest.java | 46 +++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/test/java/ControllerTest.java diff --git a/src/test/java/ControllerTest.java b/src/test/java/ControllerTest.java new file mode 100644 index 00000000..11f1dd3a --- /dev/null +++ b/src/test/java/ControllerTest.java @@ -0,0 +1,46 @@ +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; + +import controller.RacingController; +import domain.Car; +import domain.Cars; +import domain.Racing; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.Test; + +public class ControllerTest { + + private static final int MOVE_POSITION = 3; + private static final int NOT_MOVE_POSITION = 0; + + @Test + public void testPlayRace() { + RacingController racingController = new RacingController(); + List carList = new ArrayList<>(); + + carList.add(new Car("A", new MovableNumberGenerator())); + carList.add(new Car("B", new NotMovableNumberGenerator())); + carList.add(new Car("C", new MovableNumberGenerator())); + + Cars cars = Cars.of(carList); + Racing racing = new Racing(cars); + + racingController.playRace(racing, cars, MOVE_POSITION); + + assertThat(cars.getCars().get(0).getDistance()).isEqualTo(MOVE_POSITION); + assertThat(cars.getCars().get(1).getDistance()).isEqualTo(NOT_MOVE_POSITION); + assertThat(cars.getCars().get(2).getDistance()).isEqualTo(MOVE_POSITION); + } + + @Test + public void checkNameLengths () { + RacingController racingController = new RacingController(); + List names = Arrays.asList("Name", "TooLongName"); + + assertThatThrownBy(() -> racingController.checkCarNameLengths(names)) + .isInstanceOf(IllegalArgumentException.class); + } + +} From 40fd20949e5d84a4bbe4aaccec8a9d48dfc3b143 Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Sat, 22 Mar 2025 16:23:54 +0900 Subject: [PATCH 15/32] =?UTF-8?q?*=20test=20:=20View=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit View ํŒจํ‚ค์ง€์˜ OutputViewํด๋ž˜์Šค ์ค‘ Formatting ๊ด€๋ จ ๋ฉ”์„œ๋“œ์˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ --- src/test/java/ViewTest.java | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/test/java/ViewTest.java diff --git a/src/test/java/ViewTest.java b/src/test/java/ViewTest.java new file mode 100644 index 00000000..ff0d58dc --- /dev/null +++ b/src/test/java/ViewTest.java @@ -0,0 +1,27 @@ +import static org.assertj.core.api.Assertions.assertThat; + +import domain.Car; +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.Test; +import view.OutputView; + +public class ViewTest { + + @Test + public void testFormatCarInfo() { + Car car = new Car("A", new MovableNumberGenerator()); + car.move(); + car.move(); + String formattedInfo = OutputView.formatCarInfo(car); + assertThat(formattedInfo).isEqualTo("A : --"); + } + + @Test void testFormatWinnerNames() { + List winners = Arrays.asList("A", "B", "C"); + String formattedWinners = OutputView.formatWinnerNames(winners); + + assertThat(formattedWinners).isEqualTo("A, B, C"); + } + +} From 294309880902f8b393935ab8e0c17f4bd916965b Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Sat, 22 Mar 2025 16:38:01 +0900 Subject: [PATCH 16/32] =?UTF-8?q?*=20refactor=20:=20Controller=20=EC=9D=B8?= =?UTF-8?q?=EC=8A=A4=ED=84=B4=EC=8A=A4=20=EB=B3=80=EC=88=98=20=EC=B5=9C?= =?UTF-8?q?=EC=86=8C=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Controller์— ๋ถˆํ•„์š”ํ•œ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ง€์—ญ ๋ณ€์ˆ˜๋กœ ๋ณ€ํ™˜ --- .../java/controller/RacingController.java | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/main/java/controller/RacingController.java b/src/main/java/controller/RacingController.java index 502b27e9..a8eacaf1 100644 --- a/src/main/java/controller/RacingController.java +++ b/src/main/java/controller/RacingController.java @@ -1,35 +1,45 @@ package controller; -import domain.Car; import domain.Cars; import domain.Racing; import domain.NumberGenerator; +import java.util.List; import view.InputView; import view.OutputView; public class RacingController { - Racing racing; - Cars carList; - Cars winnerList; - int RoundNumber; + private static final int NAME_LENGTH_LIMIT = 5; public void run(NumberGenerator numberGenerator) { - carList = Cars.create(InputView.getCarNames(), numberGenerator); - RoundNumber = InputView.getRoundNumber(); - racing = new Racing(carList); + + OutputView.printInputCarNames(); + List carNames = InputView.getCarNames(); + checkCarNameLengths(carNames); + Cars carList = Cars.create(carNames, numberGenerator); + + OutputView.printInputRoundNumber(); + int roundNumber = InputView.getRoundNumber(); + + Racing racing = new Racing(carList); OutputView.printResult(); - playRace(); + playRace(racing, carList, roundNumber); - winnerList = racing.findWinners(); + Cars winnerList = racing.findWinners(); OutputView.printWinners(winnerList.getCars()); } - public void playRace() { - for (int i = 0; i < RoundNumber; i++) { + public void playRace(Racing racing, Cars carList, int roundNumber) { + for (int i = 0; i < roundNumber; i++) { racing.playRound(); OutputView.printProcess(carList.getCars()); } } + + public void checkCarNameLengths(List names) { + if (names.stream().anyMatch(name -> name.length() > NAME_LENGTH_LIMIT)) { + throw new IllegalArgumentException("์ด๋ฆ„์˜ ๊ธธ์ด๋Š” " + NAME_LENGTH_LIMIT + "์ž ์ดํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค."); + } + } } From e9de809c9de3f2895d38ab14465c1a9b5c8e6b87 Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Sat, 22 Mar 2025 17:22:42 +0900 Subject: [PATCH 17/32] =?UTF-8?q?*=20refactor=20:=20=EA=B0=99=EC=9D=80=20?= =?UTF-8?q?=EA=B1=B0=EB=A6=AC=EC=9D=98=20=EC=9E=90=EB=8F=99=EC=B0=A8?= =?UTF-8?q?=EB=A5=BC=20=EA=B5=AC=ED=95=98=EB=8A=94=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=EC=9D=98=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EB=AA=85=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Car ๊ฐ์ฒด์˜ isInPosition์„ hasSamePosition์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์ด์— ๋”ฐ๋ผ hasSamePosition์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๋“ค๋„ ์ˆ˜์ • --- src/main/java/domain/Car.java | 5 +++-- src/main/java/domain/Cars.java | 22 +++++++++++++--------- src/main/java/domain/Racing.java | 2 +- src/test/java/CarsTest.java | 2 +- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/main/java/domain/Car.java b/src/main/java/domain/Car.java index 160e7587..fb5cdfba 100644 --- a/src/main/java/domain/Car.java +++ b/src/main/java/domain/Car.java @@ -6,7 +6,7 @@ public class Car { private final String name; private int distance; - private NumberGenerator numberGenerator; + private final NumberGenerator numberGenerator; public Car(String name, NumberGenerator numberGenerator) { this.name = name; @@ -20,7 +20,7 @@ public void move() { } } - public boolean isInPosition(int position) { + public boolean hasSamePosition(int position) { return distance == position; } @@ -31,4 +31,5 @@ public String getName() { public int getDistance() { return distance; } + } diff --git a/src/main/java/domain/Cars.java b/src/main/java/domain/Cars.java index 3b704841..a5a04e0d 100644 --- a/src/main/java/domain/Cars.java +++ b/src/main/java/domain/Cars.java @@ -6,13 +6,13 @@ public class Cars { - private List cars; + private final List cars; private Cars(List cars) { this.cars = cars; } - public static Cars create(String[] carNames, NumberGenerator numberGenerator) { + public static Cars create(List carNames, NumberGenerator numberGenerator) { List newCars = new ArrayList(); for (String carName : carNames) { newCars.add(new Car(carName, numberGenerator)); @@ -20,6 +20,10 @@ public static Cars create(String[] carNames, NumberGenerator numberGenerator) { return new Cars(newCars); } + public static Cars of(List cars) { + return new Cars(new ArrayList<>(cars)); + } + public void move() { for (Car car : cars) { car.move(); @@ -34,16 +38,16 @@ public int getMaxDistance() { return maxDistance; } - public Cars findCarsInPosition(int position) { - List carsInPosition = new ArrayList<>(); - return new Cars( - cars.stream() - .filter(car -> car.isInPosition(position)) - .collect(Collectors.toList()) - ); + public Cars findCarsHasSamePosition(int position) { + List carsHasSamePosition = cars.stream() + .filter(car -> car.hasSamePosition(position)) + .collect(Collectors.toList()); + + return new Cars(carsHasSamePosition); } public List getCars() { return cars; } + } diff --git a/src/main/java/domain/Racing.java b/src/main/java/domain/Racing.java index 17fa6a0d..52e26587 100644 --- a/src/main/java/domain/Racing.java +++ b/src/main/java/domain/Racing.java @@ -13,7 +13,7 @@ public void playRound() { } public Cars findWinners() { - return carList.findCarsInPosition(carList.getMaxDistance()); + return carList.findCarsHasSamePosition(carList.getMaxDistance()); } } diff --git a/src/test/java/CarsTest.java b/src/test/java/CarsTest.java index bb350c84..d88a61db 100644 --- a/src/test/java/CarsTest.java +++ b/src/test/java/CarsTest.java @@ -82,7 +82,7 @@ public void testFindCarsInSamePosition() { cars.move(); cars.move(); - Cars carsInSamePosition = cars.findCarsInSamePosition(2); + Cars carsInSamePosition = cars.findCarsHasSamePosition(2); assertThat(carsInSamePosition.getCars()).containsOnly(carList.get(1), carList.get(2)); } From 34995d0a408e0105374d4e54c85266cb9adf85c5 Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Sat, 22 Mar 2025 17:24:31 +0900 Subject: [PATCH 18/32] =?UTF-8?q?*=20feat=20:=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=EC=9E=85=EB=A0=A5=20=EC=95=88=EB=82=B4=20=EB=A9=94?= =?UTF-8?q?=EC=84=B8=EC=A7=80=20=EC=B6=9C=EB=A0=A5=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๋ˆ„๋ฝ๋˜์—ˆ๋˜ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ --- src/main/java/view/InputView.java | 8 +++++--- src/main/java/view/OutputView.java | 17 +++++++++++++---- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index e9e35554..06bfbb44 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -1,13 +1,15 @@ package view; +import java.util.Arrays; +import java.util.List; import java.util.Scanner; public class InputView { - private static Scanner scanner = new Scanner(System.in); + private static final Scanner scanner = new Scanner(System.in); - public static String[] getCarNames() { - return scanner.nextLine().split(","); + public static List getCarNames() { + return Arrays.asList(scanner.nextLine().split(",")); } public static int getRoundNumber() { diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index bc5efd15..ce0f136a 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -6,18 +6,26 @@ public class OutputView { + public static void printInputCarNames() { + System.out.println("๊ฒฝ์ฃผํ•  ์ž๋™์ฐจ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”(์ด๋ฆ„์€ ์‰ผํ‘œ(,)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„)."); + } + + public static void printInputRoundNumber() { + System.out.println("์‹œ๋„ํ•  ํšŒ์ˆ˜๋Š” ๋ช‡ํšŒ์ธ๊ฐ€์š”?"); + } + public static void printResult() { System.out.println("์‹คํ–‰ ๊ฒฐ๊ณผ"); } public static void printProcess(List cars) { for (Car car : cars) { - System.out.println(formmatCarInfo(car)); + System.out.println(formatCarInfo(car)); } System.out.println(); } - public static String formmatCarInfo(Car car) { + public static String formatCarInfo(Car car) { StringBuilder formatted; formatted = new StringBuilder(car.getName() + " : "); for (int i = 0; i < car.getDistance(); i++) { @@ -31,10 +39,11 @@ public static void printWinners(List winners) { for (Car winner : winners) { winnerNames.add(winner.getName()); } - System.out.println(formattWinnerNames(winnerNames) + "๊ฐ€ ์ตœ์ข… ์šฐ์Šนํ–ˆ์Šต๋‹ˆ๋‹ค."); + System.out.println(formatWinnerNames(winnerNames) + "๊ฐ€ ์ตœ์ข… ์šฐ์Šนํ–ˆ์Šต๋‹ˆ๋‹ค."); } - public static String formattWinnerNames(List cars) { + public static String formatWinnerNames(List cars) { return cars.toString().replace("[", "").replace("]", ""); } + } From 759de064f3cda80a5b60e7dc4df4530f44741866 Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Sat, 22 Mar 2025 17:25:51 +0900 Subject: [PATCH 19/32] =?UTF-8?q?*=20style=20:=20RacingApplicaion=EC=97=90?= =?UTF-8?q?=20=EA=B0=9C=ED=96=89=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/RacingApplication.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/RacingApplication.java b/src/main/java/RacingApplication.java index 16a3ab1c..f57c9d54 100644 --- a/src/main/java/RacingApplication.java +++ b/src/main/java/RacingApplication.java @@ -4,7 +4,9 @@ public class RacingApplication { public static void main(String[] args) { + new RacingController().run(new RandomNumberGenerator()); + } } From bd2d2569050422723b9ae9876d649b4221e7b6eb Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Sat, 22 Mar 2025 17:26:42 +0900 Subject: [PATCH 20/32] =?UTF-8?q?*=20docs=20:=20README.md=20=EC=97=85?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ README ์ˆ˜์ • --- README.md | 59 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 68a2f1a8..d82fa559 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,10 @@ ๋ชจ๋“  ๋ผ์šด๋“œ๊ฐ€ ๋๋‚œ ๋’ค ๊ฐ€์žฅ ๋งŽ์ด ์ด๋™ํ•œ ์ž๋™์ฐจ๋“ค์ด ์šฐ์Šนํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ## ๐ŸŽฎ๊ฒŒ์ž„ ๊ทœ์น™ -* ๐Ÿš— ๊ฒŒ์ž„์— ์ฐธ๊ฐ€ํ•  ์ž๋™์ฐจ ์ˆ˜์™€ ๋ผ์šด๋“œ ์ˆ˜๋ฅผ ์ •ํ•˜๊ณ  ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. +* ๐Ÿš— ๊ฒŒ์ž„์— ์ฐธ๊ฐ€ํ•  ์ž๋™์ฐจ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค(์ž๋™์ฐจ ์ด๋ฆ„์˜ ๊ธธ์ด๋Š” 5์ดํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค) + + +* ๐Ÿ ๋ผ์šด๋“œ ์ˆ˜๋ฅผ ์ •ํ•˜๊ณ  ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. * ๐ŸŽฒ ๊ฒŒ์ž„์ด ์‹œ์ž‘๋˜๋ฉด ๋ชจ๋“  ์ฐจ๋Š” ๋งค ๋ผ์šด๋“œ๋งˆ๋‹ค ๋žœ๋ค์œผ๋กœ ๋ฐœ์ƒํ•œ 0๋ถ€ํ„ฐ 10๊นŒ์ง€์˜ ์ˆซ์ž ์ค‘ 3 ์ดํ•˜๊ฐ€ ๋‚˜์˜ฌ ๊ฒฝ์šฐ ์ •์ง€ํ•ด์žˆ๊ณ , 4์ด์ƒ์˜ ์ˆซ์ž๊ฐ€ ๋‚˜์˜ฌ ๊ฒฝ์šฐ 1๋งŒํผ ์ „์ง„ํ•ฉ๋‹ˆ๋‹ค. @@ -17,28 +20,56 @@ * ๐Ÿ† ๋ชจ๋“  ๋ผ์šด๋“œ๊ฐ€ ๋๋‚˜๊ณ  ์šฐ์Šนํ•œ ์ž๋™์ฐจ๋ฅผ ํ™•์ธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ## ๐Ÿ”งํ”„๋กœ์ ํŠธ ์„ค๊ณ„ -ํ”„๋กœ์ ํŠธ๋Š” ํฌ๊ฒŒ ์ž๋™์ฐจ, ๊ฒŒ์ž„์„ ๊ตฌํ˜„ํ•œ ๋‘๊ฐœ์˜ ํด๋ž˜์Šค๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. -### ๐Ÿš—์ž๋™์ฐจ ํด๋ž˜์Šค -* ์ž๋™์ฐจ ํด๋ž˜์Šค๋Š” ํ•„๋“œ๋กœ ์ด๋ฆ„๊ณผ ์ด๋™ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. +ํ”„๋กœ์ ํŠธ๋Š” MVC ๋ชจ๋ธ์„ ์ ์šฉํ•˜์—ฌ controller, domain((model), view +ํŒจํ‚ค์ง€๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์ธ ํด๋ž˜์Šค๋ฅผ ์‹คํ–‰ํ•˜๋ฉด controller ๊ฐ์ฒด์˜ +๊ฒŒ์ž„ ์‹คํ–‰ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜์–ด ๊ฒŒ์ž„์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. -* ์ƒ์„ฑ์ž๋Š” ์ด๋ฆ„์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. +### โš™๏ธDomain +* domain ํŒจํ‚ค์ง€๋Š” ์ž๋™์ฐจ, ์ž๋™์ฐจ์˜ ๋ฆฌ์ŠคํŠธ, ๋ ˆ์ด์‹ฑ, ๋žœ๋ค ๋ณ€์ˆ˜ ์ƒ์„ฑ ํด๋ž˜์Šค๋กœ ์ด๋ฃจ์–ด์ ธ +์žˆ์Šต๋‹ˆ๋‹ค. -* ์ž๋™์ฐจ์˜ ์ด๋™ ๋ฉ”์„œ๋“œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ ๊ฐ’์ด 4 ์ด์ƒ์ผ ๊ฒฝ์šฐ ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค. +* ์ž๋™์ฐจ ํด๋ž˜์Šค๋Š” ์ด๋ฆ„๊ณผ ์ด๋™ํ•œ ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ƒ์„ฑ๋œ ๋žœ๋ค ๋ณ€์ˆ˜์— +๋”ฐ๋ผ ํ•œ ์นธ ์ „์ง„ํ•˜๋Š” ๋ฉ”์„œ๋“œ, ์ž์‹ ์˜ ํ˜„์žฌ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์ง„ ๊ฐ’๊ณผ ๊ฐ™์€์ง€ ๋ฐ˜ํ™˜ํ•˜๋Š” +๋ฉ”์„œ๋“œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. -### ๐ŸŽฎGame ํด๋ž˜์Šค -* ์ฐธ๊ฐ€ํ•˜๋Š” ์ฐจ๋“ค๊ณผ ์šฐ์Šนํ•œ ์ฐจ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. - -* ๊ฒŒ์ž„ ์‹คํ–‰ ๋ฉ”์„œ๋“œ๋Š” ์ฐจ ๊ฐฏ์ˆ˜์™€ ๋ผ์šด๋“œ ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ๊ฒŒ์ž„ ์ดˆ๊ธฐํ™”, ๊ฒŒ์ž„ ์ง„ํ–‰, ์šฐ์Šน์ž ์„ ์ •์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. +* ์ž๋™์ฐจ ๋ฆฌ์ŠคํŠธ ํด๋ž˜์Šค๋Š” ์ž๋™์ฐจ๋“ค์˜ ๋ฐฐ์—ด์„ ์ €์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฆฌ์ŠคํŠธ์— +์ €์žฅ๋œ ์ž๋™์ฐจ๋“ค์„ ์ด๋™์‹œํ‚ค๋Š” ๋ฉ”์„œ๋“œ, ๋ฆฌ์ŠคํŠธ์— ์ €์žฅ๋œ ์ž๋™์ฐจ ์ค‘ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ +์ด๋™ํ•œ ์ž๋™์ฐจ์˜ ์ด๋™ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ, ์–ด๋–ค ํ•œ ์œ„์น˜์— ์žˆ๋Š” ๋ชจ๋“  ์ž๋™์ฐจ +๋“ค์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. + + +* ๋ ˆ์ด์‹ฑ ํด๋ž˜์Šค๋Š” ์ฐธ๊ฐ€ํ•œ ์ž๋™์ฐจ๋“ค์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ฐธ๊ฐ€ํ•œ ์ž๋™์ฐจ๋“ค์„ +์ „๋ถ€ ์ด๋™์‹œํ‚ค๋Š” ๋ฉ”์„œ๋“œ์™€ ์ฐธ๊ฐ€ํ•œ ์ž๋™์ฐจ๋“ค ์ค‘ ์šฐ์Šน์ž๋“ค์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” +๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. + + +* ๋žœ๋ค ๋ณ€์ˆ˜ ์ƒ์„ฑ ํด๋ž˜์Šค๋Š” 0๋ถ€ํ„ฐ 9์‚ฌ์ด์˜ ์ˆซ์ž๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ +๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. + +### ๐Ÿ’ปView +- view ํŒจํ‚ค์ง€๋Š” ์ž…๋ ฅ์„ ๋‹ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค์™€ ์ถœ๋ ฅ์„ ๋‹ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋‹ด๋‹นํ•˜๋Š” +ํด๋ž˜์Šค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. + + +- ์ž…๋ ฅ์„ ๋‹ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค๋Š” ์ž๋™์ฐจ๋“ค์˜ ์ด๋ฆ„์„ ์–‘์‹์— ๋งž๊ฒŒ ์ž…๋ ฅ๋ฐ›์•„ ์ด๋ฅผ ๋ฌธ์ž์—ด์˜ +๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ์™€, ๋ผ์šด๋“œ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š” ๋ฉ”์„œ๋“œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. + + +- ์ถœ๋ ฅ์„ ๋‹ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค๋Š” ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์š”์ฒญ์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฉ”์„œ๋“œ์™€ ๊ฒŒ์ž„ ํ˜„ํ™ฉ์„ +์ถœ๋ ฅํ•˜๋Š” ๋ฉ”์„œ๋“œ, ์šฐ์Šน์ž ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. -* ๊ฒŒ์ž„ ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ๋Š” ๊ฒŒ์ž„ ์‹คํ–‰ ์ค‘ ๊ฐ€์žฅ ๋จผ์ € ํ˜ธ์ถœ๋˜์–ด ์ฐจ ๊ฐฏ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ๊ฐฏ์ˆ˜๋งŒํผ ์ž๋™์ฐจ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํ˜„ ๋‹จ๊ณ„์—์„œ๋Š” ์ฐจ ์ด๋ฆ„์ด ์ˆœ์ฐจ์ ์œผ๋กœ ์ž๋™์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.( ex)Car_1, Car_2, ... ) +- ์ถœ๋ ฅ์˜ ์–‘์‹์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•œ ํฌ๋งทํŒ… ๋ฉ”์„œ๋“œ๋„ ์ถœ๋ ฅ์„ ๋‹ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค์— +ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค -* ๋ผ์šด๋“œ ์ง„ํ–‰ ๋ฉ”์„œ๋“œ๋Š” ๋ผ์šด๋“œ ์ˆ˜๋งŒํผ ์‹คํ–‰๋˜๋ฉฐ ๊ฒŒ์ž„์— ์ฐธ์—ฌํ•œ ๋ชจ๋“  ์ฐจ์˜ ์ด๋™ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. -์ด๋•Œ ๊ฐ ์ž๋™์ฐจ๋งˆ๋‹ค ๋žœ๋ค ๋ณ€์ˆ˜ ์ƒ์„ฑ๊ธฐ๋ฅผ ํ†ตํ•ด 0๋ถ€ํ„ฐ 10๊นŒ์ง€์˜ ์ˆซ์ž ์ค‘ ํ•˜๋‚˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ค๋‹ˆ๋‹ค +### ๐ŸŽฎController -* ์šฐ์Šน์ž ์„ ์ • ๋ฉ”์„œ๋“œ๋Š” ๋ชจ๋“  ๋ผ์šด๋“œ๊ฐ€ ๋๋‚œ ํ›„ ๊ฐ€์žฅ ๋จผ ๊ฑฐ๋ฆฌ๋ฅผ ์ด๋™ํ•œ ์ฐจ๋“ค์„ ์šฐ์Šน์ž ๋ฆฌ์ŠคํŠธ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. \ No newline at end of file +* Controller ํด๋ž˜์Šค๋Š” domain๊ณผ view์˜ ํด๋ž˜์Šค๋“ค์„ ์ด์šฉํ•˜์—ฌ ๊ฒŒ์ž„์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค +๊ฒŒ์ž„ ์‹คํ–‰ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž๋™์ฐจ ์ด๋ฆ„๊ณผ ๋ผ์šด๋“œ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ +๋ ˆ์ด์‹ฑ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ ˆ์ด์‹ฑ์ด ๋๋‚˜๋ฉด ์šฐ์Šน์ž ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ๋ฉ”์„œ๋“œ๊ฐ€ +์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. From df2090ba1dc4f9b1b08aac5b825ebf07871b806f Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Sat, 22 Mar 2025 17:32:27 +0900 Subject: [PATCH 21/32] =?UTF-8?q?*=20chore=20:=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=EC=9E=90=20=EC=A4=91=EB=B3=B5=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/domain/Cars.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/domain/Cars.java b/src/main/java/domain/Cars.java index a5a04e0d..88841f15 100644 --- a/src/main/java/domain/Cars.java +++ b/src/main/java/domain/Cars.java @@ -13,7 +13,7 @@ private Cars(List cars) { } public static Cars create(List carNames, NumberGenerator numberGenerator) { - List newCars = new ArrayList(); + List newCars = new ArrayList<>(); for (String carName : carNames) { newCars.add(new Car(carName, numberGenerator)); } From c916e39ec05405f8fef6493e3013ea3b6c5eac3d Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Sat, 22 Mar 2025 18:47:29 +0900 Subject: [PATCH 22/32] =?UTF-8?q?docs=20=20:=20README.md=20=EC=98=A4?= =?UTF-8?q?=ED=83=80=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d82fa559..e972e04a 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ * ๐Ÿ ๋ผ์šด๋“œ ์ˆ˜๋ฅผ ์ •ํ•˜๊ณ  ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. -* ๐ŸŽฒ ๊ฒŒ์ž„์ด ์‹œ์ž‘๋˜๋ฉด ๋ชจ๋“  ์ฐจ๋Š” ๋งค ๋ผ์šด๋“œ๋งˆ๋‹ค ๋žœ๋ค์œผ๋กœ ๋ฐœ์ƒํ•œ 0๋ถ€ํ„ฐ 10๊นŒ์ง€์˜ ์ˆซ์ž ์ค‘ 3 ์ดํ•˜๊ฐ€ ๋‚˜์˜ฌ ๊ฒฝ์šฐ ์ •์ง€ํ•ด์žˆ๊ณ , 4์ด์ƒ์˜ ์ˆซ์ž๊ฐ€ ๋‚˜์˜ฌ ๊ฒฝ์šฐ 1๋งŒํผ ์ „์ง„ํ•ฉ๋‹ˆ๋‹ค. +* ๐ŸŽฒ ๊ฒŒ์ž„์ด ์‹œ์ž‘๋˜๋ฉด ๋ชจ๋“  ์ฐจ๋Š” ๋งค ๋ผ์šด๋“œ๋งˆ๋‹ค ๋žœ๋ค์œผ๋กœ ๋ฐœ์ƒํ•œ 0๋ถ€ํ„ฐ 9๊นŒ์ง€์˜ ์ˆซ์ž ์ค‘ 3 ์ดํ•˜๊ฐ€ ๋‚˜์˜ฌ ๊ฒฝ์šฐ ์ •์ง€ํ•ด์žˆ๊ณ , 4์ด์ƒ์˜ ์ˆซ์ž๊ฐ€ ๋‚˜์˜ฌ ๊ฒฝ์šฐ 1๋งŒํผ ์ „์ง„ํ•ฉ๋‹ˆ๋‹ค. * ๐Ÿ† ๋ชจ๋“  ๋ผ์šด๋“œ๊ฐ€ ๋๋‚˜๊ณ  ์šฐ์Šนํ•œ ์ž๋™์ฐจ๋ฅผ ํ™•์ธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. From 2c4887465cfa68d32bac03276e19073349389b81 Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Sun, 23 Mar 2025 14:28:51 +0900 Subject: [PATCH 23/32] =?UTF-8?q?chore=20:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=B4=EC=A7=84=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/Car.java | 30 ---------------------- src/main/java/Game.java | 55 ----------------------------------------- 2 files changed, 85 deletions(-) delete mode 100644 src/main/java/Car.java delete mode 100644 src/main/java/Game.java diff --git a/src/main/java/Car.java b/src/main/java/Car.java deleted file mode 100644 index 163039c5..00000000 --- a/src/main/java/Car.java +++ /dev/null @@ -1,30 +0,0 @@ -public class Car { - - private static final int CRITICAL_NUMBER_TO_MOVE = 4; - - private final String name; - private int distance; - - public Car(String name) { - this.name = name; - this.distance = 0; - } - - public void move(int randomNumber) { - if (randomNumber >= CRITICAL_NUMBER_TO_MOVE) { - distance++; - } - } - - public String getName() { - return name; - } - - public int getDistance() { - return distance; - } - - public boolean isSamePosition(int distance) { - return distance == this.distance; - } -} diff --git a/src/main/java/Game.java b/src/main/java/Game.java deleted file mode 100644 index 2d31413e..00000000 --- a/src/main/java/Game.java +++ /dev/null @@ -1,55 +0,0 @@ -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -public class Game { - - List carList = new ArrayList<>(); - List winnerList = new ArrayList<>(); - - public void playGame(int carNum, int roundNum) { - initGame(carNum); - for (int i = 0; i < roundNum; i++) { - playRound(); - } - makeWinnerList(); - } - - public void initGame(int carNum) { - for (int i = 0; i < carNum; i++) { - carList.add(new Car("Car_" + i)); - } - } - - public void playRound() { - for (Car car : carList) { - car.move(getRandom()); - } - } - - public int getRandom() { - return new Random().nextInt(10); - } - - public void makeWinnerList() { - int maxDistance = getMaxDistance(); - for (Car car : carList) { - addWinner(car, maxDistance); - } - } - - private void addWinner(Car car, int maxDistance) { - if (car.isSamePosition(maxDistance)) { - winnerList.add(car); - } - } - - private int getMaxDistance() { - - int maxDistance = 0; - for (Car car : carList) { - maxDistance = Math.max(maxDistance, car.getDistance()); - } - return maxDistance; - } -} From 0c0ba234beac3f26ed95d2ec9952ee807615d17b Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Sun, 23 Mar 2025 14:29:58 +0900 Subject: [PATCH 24/32] =?UTF-8?q?style=20:=20=EC=8B=A4=ED=96=89=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20=EA=B0=9C?= =?UTF-8?q?=ED=96=89=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/RacingApplication.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/RacingApplication.java b/src/main/java/RacingApplication.java index f57c9d54..16a3ab1c 100644 --- a/src/main/java/RacingApplication.java +++ b/src/main/java/RacingApplication.java @@ -4,9 +4,7 @@ public class RacingApplication { public static void main(String[] args) { - new RacingController().run(new RandomNumberGenerator()); - } } From cb2c86abef7a9bace387ebda9e5b0d07342849c3 Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Mon, 24 Mar 2025 01:24:20 +0900 Subject: [PATCH 25/32] =?UTF-8?q?feat=20:=20=EC=9D=B4=EB=A6=84=EC=97=90=20?= =?UTF-8?q?=EB=8C=80=ED=95=9C=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=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 Car ๊ฐ์ฒด์˜ ์ด๋ฆ„์„ String ์—์„œ ์›์‹œ๊ฐ’ ํฌ์žฅ์„ ํ†ตํ•ด Name ํด๋ž˜์Šค๋กœ ๋ณ€๊ฒฝ Name ํด๋ž˜์Šค์— ์ด๋ฆ„ ๊ธธ์ด, ๊ณต๋ฐฑ ์—ฌ๋ถ€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ถ”๊ฐ€ Cars ํด๋ž˜์Šค์— ์ฐจ ๊ฐฏ์ˆ˜ ์ค‘๋ณต ์—ฌ๋ถ€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ถ”๊ฐ€ Controller ์—์„œ ์ฐจ ์ด๋ฆ„ ๊ธธ์ด ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ ์‚ญ์ œ Cars ํด๋ž˜์Šค์˜ of ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ from ์œผ๋กœ ๋ณ€๊ฒฝ --- .../java/controller/RacingController.java | 8 ----- src/main/java/domain/Car.java | 6 ++-- src/main/java/domain/Cars.java | 27 +++++++++++++- src/main/java/domain/Name.java | 35 +++++++++++++++++++ src/main/java/domain/Racing.java | 2 ++ src/test/java/CarTest.java | 12 +++---- src/test/java/CarsTest.java | 10 +++--- src/test/java/ControllerTest.java | 13 +------ src/test/java/RacingTest.java | 4 +-- 9 files changed, 80 insertions(+), 37 deletions(-) create mode 100644 src/main/java/domain/Name.java diff --git a/src/main/java/controller/RacingController.java b/src/main/java/controller/RacingController.java index a8eacaf1..0a903613 100644 --- a/src/main/java/controller/RacingController.java +++ b/src/main/java/controller/RacingController.java @@ -9,13 +9,10 @@ public class RacingController { - private static final int NAME_LENGTH_LIMIT = 5; - public void run(NumberGenerator numberGenerator) { OutputView.printInputCarNames(); List carNames = InputView.getCarNames(); - checkCarNameLengths(carNames); Cars carList = Cars.create(carNames, numberGenerator); OutputView.printInputRoundNumber(); @@ -37,9 +34,4 @@ public void playRace(Racing racing, Cars carList, int roundNumber) { } } - public void checkCarNameLengths(List names) { - if (names.stream().anyMatch(name -> name.length() > NAME_LENGTH_LIMIT)) { - throw new IllegalArgumentException("์ด๋ฆ„์˜ ๊ธธ์ด๋Š” " + NAME_LENGTH_LIMIT + "์ž ์ดํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค."); - } - } } diff --git a/src/main/java/domain/Car.java b/src/main/java/domain/Car.java index fb5cdfba..b97e2ece 100644 --- a/src/main/java/domain/Car.java +++ b/src/main/java/domain/Car.java @@ -4,12 +4,12 @@ public class Car { private static final int CRITICAL_NUMBER_TO_MOVE = 4; - private final String name; + private final Name name; private int distance; private final NumberGenerator numberGenerator; public Car(String name, NumberGenerator numberGenerator) { - this.name = name; + this.name = Name.from(name); this.distance = 0; this.numberGenerator = numberGenerator; } @@ -25,7 +25,7 @@ public boolean hasSamePosition(int position) { } public String getName() { - return name; + return name.getName(); } public int getDistance() { diff --git a/src/main/java/domain/Cars.java b/src/main/java/domain/Cars.java index 88841f15..f745f820 100644 --- a/src/main/java/domain/Cars.java +++ b/src/main/java/domain/Cars.java @@ -1,11 +1,15 @@ package domain; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; public class Cars { + private static final int MAX_CAR_NUMBER = 10; + private final List cars; private Cars(List cars) { @@ -17,10 +21,12 @@ public static Cars create(List carNames, NumberGenerator numberGenerator for (String carName : carNames) { newCars.add(new Car(carName, numberGenerator)); } + checkCarNumber(newCars); + checkDuplicates(newCars); return new Cars(newCars); } - public static Cars of(List cars) { + public static Cars from(List cars) { return new Cars(new ArrayList<>(cars)); } @@ -50,4 +56,23 @@ public List getCars() { return cars; } + public static void checkCarNumber(List cars) { + if(cars.size() > MAX_CAR_NUMBER) { + throw new IllegalArgumentException("[Error] ์ฐจ์˜ ๊ฐœ์ˆ˜๋Š” 10๋Œ€๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + } + } + + public static void checkDuplicates(List cars) { + if(hasDuplicates(cars)) { + throw new IllegalArgumentException("[Error] ์ฐจ์˜ ์ด๋ฆ„์€ ์ค‘๋ณต๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + } + } + + private static boolean hasDuplicates(List cars) { + Set nameSet = new HashSet<>(); + return cars.stream() + .map(car -> car.getName()) // Name ๊ฐ์ฒด์—์„œ String ๊ฐ’ ์ถ”์ถœ + .anyMatch(name -> !nameSet.add(name)); // ์ค‘๋ณต ๋ฐœ์ƒ ์‹œ true ๋ฐ˜ํ™˜ + } + } diff --git a/src/main/java/domain/Name.java b/src/main/java/domain/Name.java new file mode 100644 index 00000000..ed34fa96 --- /dev/null +++ b/src/main/java/domain/Name.java @@ -0,0 +1,35 @@ +package domain; + +public class Name { + + private static final int MAX_LENGTH = 5; + + private final String name; + + private Name(final String name) { + this.name = name; + } + + public static Name from(final String name) { + checkBlank(name); + checkLength(name); + return new Name(name); + } + + public static void checkLength(String name) { + if(name.length() > MAX_LENGTH) { + throw new IllegalArgumentException("[Error] ์ด๋ฆ„์€ 5๊ธ€์ž๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + } + } + + public static void checkBlank(String name) { + if(name.trim().isEmpty()) { + throw new IllegalArgumentException("[Error] ์ด๋ฆ„์€ ๊ณต๋ฐฑ์œผ๋กœ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + } + } + + public String getName() { + return name; + } + +} diff --git a/src/main/java/domain/Racing.java b/src/main/java/domain/Racing.java index 52e26587..c608603b 100644 --- a/src/main/java/domain/Racing.java +++ b/src/main/java/domain/Racing.java @@ -16,4 +16,6 @@ public Cars findWinners() { return carList.findCarsHasSamePosition(carList.getMaxDistance()); } + + } diff --git a/src/test/java/CarTest.java b/src/test/java/CarTest.java index 0b797d20..f4bb4c34 100644 --- a/src/test/java/CarTest.java +++ b/src/test/java/CarTest.java @@ -7,34 +7,34 @@ public class CarTest { @Test void testCarName() { - Car car = new Car("TestCar", new MovableNumberGenerator()); - assertThat(car.getName()).isEqualTo("TestCar"); + Car car = new Car("KIA", new MovableNumberGenerator()); + assertThat(car.getName()).isEqualTo("KIA"); } @Test void testCarMove() { - Car car = new Car("TestCar", new MovableNumberGenerator()); + Car car = new Car("KIA", new MovableNumberGenerator()); car.move(); assertThat(car.getDistance()).isEqualTo(1); } @Test void testCarNotMove() { - Car car = new Car("TestCar", new NotMovableNumberGenerator()); + Car car = new Car("KIA", new NotMovableNumberGenerator()); car.move(); assertThat(car.getDistance()).isEqualTo(0); } @Test void testCarHasSamePosition() { - Car car = new Car("TestCar", new MovableNumberGenerator()); + Car car = new Car("KIA", new MovableNumberGenerator()); car.move(); assertThat(car.hasSamePosition(1)).isEqualTo(true); } @Test void testCarIsNotInPosition() { - Car car = new Car("TestCar", new MovableNumberGenerator()); + Car car = new Car("KIA", new MovableNumberGenerator()); car.move(); assertThat(car.hasSamePosition(0)).isEqualTo(false); } diff --git a/src/test/java/CarsTest.java b/src/test/java/CarsTest.java index d88a61db..78e4cb3c 100644 --- a/src/test/java/CarsTest.java +++ b/src/test/java/CarsTest.java @@ -19,7 +19,7 @@ public void testCreateCars() { assertThat(cars.getCars().get(2).getName()).isEqualTo("C"); } - @Test void testCarsOf() { + @Test void testCarsFrom() { List carList = new ArrayList<>(); Cars cars; @@ -27,7 +27,7 @@ public void testCreateCars() { carList.add(new Car("B", new MovableNumberGenerator())); carList.add(new Car("C", new MovableNumberGenerator())); - cars = Cars.of(carList); + cars = Cars.from(carList); assertThat(cars.getCars().size()).isEqualTo(3); assertThat(cars.getCars().get(0).getName()).isEqualTo("A"); @@ -44,7 +44,7 @@ public void testCarsMove() { carList.add(new Car("B", new MovableNumberGenerator())); carList.add(new Car("C", new NotMovableNumberGenerator())); - cars = Cars.of(carList); + cars = Cars.from(carList); cars.move(); assertThat(cars.getCars().get(0).getDistance()).isEqualTo(1); @@ -61,7 +61,7 @@ public void testCarsGetMaxDistance() { carList.add(new Car("B", new MovableNumberGenerator())); carList.add(new Car("C", new NotMovableNumberGenerator())); - cars = Cars.of(carList); + cars = Cars.from(carList); cars.move(); cars.move(); @@ -77,7 +77,7 @@ public void testFindCarsInSamePosition() { carList.add(new Car("B", new MovableNumberGenerator())); carList.add(new Car("C", new MovableNumberGenerator())); - Cars cars = Cars.of(carList); + Cars cars = Cars.from(carList); cars.move(); cars.move(); diff --git a/src/test/java/ControllerTest.java b/src/test/java/ControllerTest.java index 11f1dd3a..1f5c9d89 100644 --- a/src/test/java/ControllerTest.java +++ b/src/test/java/ControllerTest.java @@ -1,12 +1,10 @@ import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; import controller.RacingController; import domain.Car; import domain.Cars; import domain.Racing; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Test; @@ -24,7 +22,7 @@ public void testPlayRace() { carList.add(new Car("B", new NotMovableNumberGenerator())); carList.add(new Car("C", new MovableNumberGenerator())); - Cars cars = Cars.of(carList); + Cars cars = Cars.from(carList); Racing racing = new Racing(cars); racingController.playRace(racing, cars, MOVE_POSITION); @@ -34,13 +32,4 @@ public void testPlayRace() { assertThat(cars.getCars().get(2).getDistance()).isEqualTo(MOVE_POSITION); } - @Test - public void checkNameLengths () { - RacingController racingController = new RacingController(); - List names = Arrays.asList("Name", "TooLongName"); - - assertThatThrownBy(() -> racingController.checkCarNameLengths(names)) - .isInstanceOf(IllegalArgumentException.class); - } - } diff --git a/src/test/java/RacingTest.java b/src/test/java/RacingTest.java index 3eeab77b..25f16ad4 100644 --- a/src/test/java/RacingTest.java +++ b/src/test/java/RacingTest.java @@ -17,7 +17,7 @@ public void testPlayRound() { carList.add(new Car("B", new MovableNumberGenerator())); carList.add(new Car("C", new MovableNumberGenerator())); - Racing racing = new Racing(Cars.of(carList)); + Racing racing = new Racing(Cars.from(carList)); racing.playRound(); assertThat(carList.get(0).getDistance()).isEqualTo(0); @@ -33,7 +33,7 @@ public void testFindWinner() { carList.add(new Car("B", new MovableNumberGenerator())); carList.add(new Car("C", new MovableNumberGenerator())); - Racing racing = new Racing(Cars.of(carList)); + Racing racing = new Racing(Cars.from(carList)); racing.playRound(); Cars winnerList = racing.findWinners(); From 0050f0febac9db4d85686d151a08428a985cefe4 Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Mon, 24 Mar 2025 01:49:14 +0900 Subject: [PATCH 26/32] =?UTF-8?q?feat=20:=20=EC=9D=B4=EB=A6=84=EC=97=90=20?= =?UTF-8?q?=EB=8C=80=ED=95=9C=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC?= =?UTF-8?q?=EB=A5=BC=20=EC=9E=85=EB=A0=A5=EB=8B=A8=EC=97=90=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Inputview ํด๋ž˜์Šค์— ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ•จ์ˆ˜ ์ž‘์„ฑ --- src/main/java/domain/Cars.java | 4 +-- src/main/java/domain/Name.java | 2 +- src/main/java/view/InputView.java | 50 ++++++++++++++++++++++++++++++- 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/src/main/java/domain/Cars.java b/src/main/java/domain/Cars.java index f745f820..0c93f358 100644 --- a/src/main/java/domain/Cars.java +++ b/src/main/java/domain/Cars.java @@ -71,8 +71,8 @@ public static void checkDuplicates(List cars) { private static boolean hasDuplicates(List cars) { Set nameSet = new HashSet<>(); return cars.stream() - .map(car -> car.getName()) // Name ๊ฐ์ฒด์—์„œ String ๊ฐ’ ์ถ”์ถœ - .anyMatch(name -> !nameSet.add(name)); // ์ค‘๋ณต ๋ฐœ์ƒ ์‹œ true ๋ฐ˜ํ™˜ + .map(car -> car.getName()) + .anyMatch(name -> !nameSet.add(name)); } } diff --git a/src/main/java/domain/Name.java b/src/main/java/domain/Name.java index ed34fa96..845533d6 100644 --- a/src/main/java/domain/Name.java +++ b/src/main/java/domain/Name.java @@ -18,7 +18,7 @@ public static Name from(final String name) { public static void checkLength(String name) { if(name.length() > MAX_LENGTH) { - throw new IllegalArgumentException("[Error] ์ด๋ฆ„์€ 5๊ธ€์ž๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + throw new IllegalArgumentException("[Error] ์ด๋ฆ„์€ " + MAX_LENGTH + "์ž๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); } } diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index 06bfbb44..f38005a7 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -1,19 +1,67 @@ package view; import java.util.Arrays; +import java.util.HashSet; import java.util.List; import java.util.Scanner; +import java.util.Set; public class InputView { + private static final int MAX_LENGTH = 5; + private static final int MAX_CAR_NUMBER = 10; private static final Scanner scanner = new Scanner(System.in); public static List getCarNames() { - return Arrays.asList(scanner.nextLine().split(",")); + List names = Arrays.asList(scanner.nextLine().split(",")); + checkLength(names); + checkBlank(names); + checkDuplicates(names); + checkCarNumber(names); + return names; } public static int getRoundNumber() { return Integer.parseInt(scanner.nextLine()); } + public static void checkLength(List names) { + if (hasTooLongName(names)) { + throw new IllegalArgumentException("[Error] ์ด๋ฆ„์€ " + MAX_LENGTH + "์ž๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + } + } + + public static void checkBlank(List names) { + if (hasBlank(names)) { + throw new IllegalArgumentException("[Error] ์ด๋ฆ„์€ ๊ณต๋ฐฑ์œผ๋กœ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + } + } + + public static void checkCarNumber(List names) { + if (names.size() > MAX_CAR_NUMBER) { + throw new IllegalArgumentException("[Error] ์ฐจ์˜ ๊ฐœ์ˆ˜๋Š” 10๋Œ€๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + } + } + + public static void checkDuplicates(List names) { + if (hasDuplicates(names)) { + throw new IllegalArgumentException("[Error] ์ฐจ์˜ ์ด๋ฆ„์€ ์ค‘๋ณต๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + } + } + + private static boolean hasTooLongName(List names) { + return names.stream() + .anyMatch(name -> name.length() > MAX_LENGTH); + } + + private static boolean hasBlank(List names) { + return names.stream() + .anyMatch(name -> name.trim().isEmpty()); + } + + private static boolean hasDuplicates(List names) { + Set nameSet = new HashSet<>(); + return names.stream() + .anyMatch(name -> !nameSet.add(name)); + } } From 4995016e68c7bdea99a5037a7cc9809bc27b2d58 Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Mon, 24 Mar 2025 02:07:38 +0900 Subject: [PATCH 27/32] =?UTF-8?q?refactor=20:=20Cars=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=EC=A0=84=EB=9E=B5=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ์ด๋ฆ„๊ณผ ๋‚œ์ˆ˜ ์ƒ์„ฑ๊ธฐ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ Cars ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” create ๋ฉ”์„œ๋“œ๋ฅผ ์‚ญ์ œ ๋Œ€์‹  from ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด Controller ์—์„œ ๋งŒ๋“ค์–ด์ง„ List๊ฐ์ฒด๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ Cars ๊ฐ์ฒด ์ƒ์„ฑ Cars ์˜ getCars ๋ฉ”์†Œ๋“œ์—์„œ ๋ฐฉ์–ด์  ๋ณต์‚ฌ ์‚ฌ์šฉ ๊ทธ ์™ธ ๋ณ€์ˆ˜๋ช… ์ˆ˜์ •(carList -> cars) --- src/main/java/RacingApplication.java | 3 +- .../java/controller/RacingController.java | 25 +++++++--- src/main/java/domain/Cars.java | 50 ++++++++----------- src/main/java/domain/Racing.java | 10 ++-- src/test/java/CarsTest.java | 11 ---- 5 files changed, 46 insertions(+), 53 deletions(-) diff --git a/src/main/java/RacingApplication.java b/src/main/java/RacingApplication.java index 16a3ab1c..e3a458e4 100644 --- a/src/main/java/RacingApplication.java +++ b/src/main/java/RacingApplication.java @@ -1,10 +1,9 @@ import controller.RacingController; -import domain.RandomNumberGenerator; public class RacingApplication { public static void main(String[] args) { - new RacingController().run(new RandomNumberGenerator()); + new RacingController().run(); } } diff --git a/src/main/java/controller/RacingController.java b/src/main/java/controller/RacingController.java index 0a903613..fced9515 100644 --- a/src/main/java/controller/RacingController.java +++ b/src/main/java/controller/RacingController.java @@ -1,36 +1,49 @@ package controller; +import domain.Car; import domain.Cars; import domain.Racing; import domain.NumberGenerator; +import domain.RandomNumberGenerator; +import java.util.ArrayList; import java.util.List; import view.InputView; import view.OutputView; public class RacingController { - public void run(NumberGenerator numberGenerator) { + private static final NumberGenerator randomGenerator = new RandomNumberGenerator(); + + public void run() { OutputView.printInputCarNames(); List carNames = InputView.getCarNames(); - Cars carList = Cars.create(carNames, numberGenerator); + Cars cars = Cars.from(createCars(carNames)); OutputView.printInputRoundNumber(); int roundNumber = InputView.getRoundNumber(); - Racing racing = new Racing(carList); + Racing racing = new Racing(cars); OutputView.printResult(); - playRace(racing, carList, roundNumber); + playRace(racing, cars, roundNumber); Cars winnerList = racing.findWinners(); OutputView.printWinners(winnerList.getCars()); } - public void playRace(Racing racing, Cars carList, int roundNumber) { + public List createCars(List names) { + List cars = new ArrayList<>(); + for(String name : names) { + cars.add(new Car(name, randomGenerator)); + } + return cars; + } + + public void playRace(Racing racing, Cars cars, int roundNumber) { for (int i = 0; i < roundNumber; i++) { racing.playRound(); - OutputView.printProcess(carList.getCars()); + OutputView.printProcess(cars.getCars()); } } diff --git a/src/main/java/domain/Cars.java b/src/main/java/domain/Cars.java index 0c93f358..f7b15d0b 100644 --- a/src/main/java/domain/Cars.java +++ b/src/main/java/domain/Cars.java @@ -16,18 +16,29 @@ private Cars(List cars) { this.cars = cars; } - public static Cars create(List carNames, NumberGenerator numberGenerator) { - List newCars = new ArrayList<>(); - for (String carName : carNames) { - newCars.add(new Car(carName, numberGenerator)); + public static Cars from(List cars) { + checkCarNumber(cars); + checkDuplicates(cars); + return new Cars(new ArrayList<>(cars)); + } + + public static void checkCarNumber(List cars) { + if(cars.size() > MAX_CAR_NUMBER) { + throw new IllegalArgumentException("[Error] ์ฐจ์˜ ๊ฐœ์ˆ˜๋Š” 10๋Œ€๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); } - checkCarNumber(newCars); - checkDuplicates(newCars); - return new Cars(newCars); } - public static Cars from(List cars) { - return new Cars(new ArrayList<>(cars)); + public static void checkDuplicates(List cars) { + if(hasDuplicates(cars)) { + throw new IllegalArgumentException("[Error] ์ฐจ์˜ ์ด๋ฆ„์€ ์ค‘๋ณต๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + } + } + + private static boolean hasDuplicates(List cars) { + Set nameSet = new HashSet<>(); + return cars.stream() + .map(car -> car.getName()) + .anyMatch(name -> !nameSet.add(name)); } public void move() { @@ -53,26 +64,7 @@ public Cars findCarsHasSamePosition(int position) { } public List getCars() { - return cars; - } - - public static void checkCarNumber(List cars) { - if(cars.size() > MAX_CAR_NUMBER) { - throw new IllegalArgumentException("[Error] ์ฐจ์˜ ๊ฐœ์ˆ˜๋Š” 10๋Œ€๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); - } - } - - public static void checkDuplicates(List cars) { - if(hasDuplicates(cars)) { - throw new IllegalArgumentException("[Error] ์ฐจ์˜ ์ด๋ฆ„์€ ์ค‘๋ณต๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); - } - } - - private static boolean hasDuplicates(List cars) { - Set nameSet = new HashSet<>(); - return cars.stream() - .map(car -> car.getName()) - .anyMatch(name -> !nameSet.add(name)); + return new ArrayList<>(cars); } } diff --git a/src/main/java/domain/Racing.java b/src/main/java/domain/Racing.java index c608603b..c46035e8 100644 --- a/src/main/java/domain/Racing.java +++ b/src/main/java/domain/Racing.java @@ -2,18 +2,18 @@ public class Racing { - private final Cars carList; + private final Cars cars; - public Racing(Cars carList) { - this.carList = carList; + public Racing(Cars cars) { + this.cars = cars; } public void playRound() { - carList.move(); + cars.move(); } public Cars findWinners() { - return carList.findCarsHasSamePosition(carList.getMaxDistance()); + return cars.findCarsHasSamePosition(cars.getMaxDistance()); } diff --git a/src/test/java/CarsTest.java b/src/test/java/CarsTest.java index 78e4cb3c..d5323698 100644 --- a/src/test/java/CarsTest.java +++ b/src/test/java/CarsTest.java @@ -8,17 +8,6 @@ public class CarsTest { - @Test - public void testCreateCars() { - List carNames = List.of("A", "B", "C"); - Cars cars = Cars.create(carNames, new MovableNumberGenerator() ); - - assertThat(cars.getCars().size()).isEqualTo(3); - assertThat(cars.getCars().get(0).getName()).isEqualTo("A"); - assertThat(cars.getCars().get(1).getName()).isEqualTo("B"); - assertThat(cars.getCars().get(2).getName()).isEqualTo("C"); - } - @Test void testCarsFrom() { List carList = new ArrayList<>(); Cars cars; From f4133eb3211bd859cfdf6c5882ade59c5ce4671b Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Mon, 24 Mar 2025 02:14:38 +0900 Subject: [PATCH 28/32] =?UTF-8?q?refactor=20:=20RandomNumberGenerator=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Random ๊ฐ์ฒด๋ฅผ ์ƒ์ˆ˜๋กœ ์„ ์–ธ --- src/main/java/domain/RandomNumberGenerator.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/domain/RandomNumberGenerator.java b/src/main/java/domain/RandomNumberGenerator.java index 458504cb..02cca919 100644 --- a/src/main/java/domain/RandomNumberGenerator.java +++ b/src/main/java/domain/RandomNumberGenerator.java @@ -4,9 +4,12 @@ public class RandomNumberGenerator implements NumberGenerator { + private static final int BOUND_RANDOM_NUMBER = 10; + private static final Random random = new Random(); + @Override public int generateNumber() { - return new Random().nextInt(10); + return random.nextInt(BOUND_RANDOM_NUMBER); } } From eed3c57b9462c8c81a61bf3071e71f0e79a382de Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Mon, 24 Mar 2025 02:23:56 +0900 Subject: [PATCH 29/32] =?UTF-8?q?refactor=20:=20OutputView=20=ED=8F=AC?= =?UTF-8?q?=EB=A7=B7=20=EA=B4=80=EB=A0=A8=20=EB=A9=94=EC=84=9C=EB=93=9C=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 StringBuilder ์™€ Stream ์„ ํ™œ์šฉํ•œ ์ฝ”๋“œ๋กœ ์ˆ˜์ • --- src/main/java/domain/Cars.java | 2 +- src/main/java/view/OutputView.java | 18 ++++++------------ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/main/java/domain/Cars.java b/src/main/java/domain/Cars.java index f7b15d0b..a90c5770 100644 --- a/src/main/java/domain/Cars.java +++ b/src/main/java/domain/Cars.java @@ -37,7 +37,7 @@ public static void checkDuplicates(List cars) { private static boolean hasDuplicates(List cars) { Set nameSet = new HashSet<>(); return cars.stream() - .map(car -> car.getName()) + .map(Car::getName) .anyMatch(name -> !nameSet.add(name)); } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index ce0f136a..966fa6ed 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -1,8 +1,8 @@ package view; import domain.Car; -import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; public class OutputView { @@ -26,20 +26,14 @@ public static void printProcess(List cars) { } public static String formatCarInfo(Car car) { - StringBuilder formatted; - formatted = new StringBuilder(car.getName() + " : "); - for (int i = 0; i < car.getDistance(); i++) { - formatted.append("-"); - } - return formatted.toString(); + return car.getName() + " : " + "-".repeat(car.getDistance()); } public static void printWinners(List winners) { - List winnerNames = new ArrayList<>(); - for (Car winner : winners) { - winnerNames.add(winner.getName()); - } - System.out.println(formatWinnerNames(winnerNames) + "๊ฐ€ ์ตœ์ข… ์šฐ์Šนํ–ˆ์Šต๋‹ˆ๋‹ค."); + String winnerNames = winners.stream() + .map(Car::getName) + .collect(Collectors.joining(", ")); + System.out.println(winnerNames + "๊ฐ€ ์ตœ์ข… ์šฐ์Šนํ–ˆ์Šต๋‹ˆ๋‹ค."); } public static String formatWinnerNames(List cars) { From 1350e36026462d27ff0f1388e21f16e87dac7f12 Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Mon, 24 Mar 2025 02:40:43 +0900 Subject: [PATCH 30/32] =?UTF-8?q?test=20:=20Cars=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EC=97=90=20Fixture=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/CarsTest.java | 55 ++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 32 deletions(-) diff --git a/src/test/java/CarsTest.java b/src/test/java/CarsTest.java index d5323698..ece5a89f 100644 --- a/src/test/java/CarsTest.java +++ b/src/test/java/CarsTest.java @@ -4,19 +4,30 @@ import domain.Cars; import java.util.ArrayList; import java.util.List; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class CarsTest { - @Test void testCarsFrom() { - List carList = new ArrayList<>(); - Cars cars; - - carList.add(new Car("A", new MovableNumberGenerator())); - carList.add(new Car("B", new MovableNumberGenerator())); - carList.add(new Car("C", new MovableNumberGenerator())); + private List cars_Fixture; + private Car movableA_Fixture; + private Car movableB_Fixture; + private Car notMovableC_Fixture; + + @BeforeEach + public void setUp() { + movableA_Fixture = new Car("A",new MovableNumberGenerator()); + movableB_Fixture = new Car("B",new MovableNumberGenerator()); + notMovableC_Fixture = new Car("C",new NotMovableNumberGenerator()); + + cars_Fixture = new ArrayList<>(); + cars_Fixture.add(movableA_Fixture); + cars_Fixture.add(movableB_Fixture); + cars_Fixture.add(notMovableC_Fixture); + } - cars = Cars.from(carList); + @Test void testCarsFrom() { + Cars cars = Cars.from(cars_Fixture); assertThat(cars.getCars().size()).isEqualTo(3); assertThat(cars.getCars().get(0).getName()).isEqualTo("A"); @@ -26,14 +37,7 @@ public class CarsTest { @Test public void testCarsMove() { - List carList = new ArrayList<>(); - Cars cars; - - carList.add(new Car("A", new MovableNumberGenerator())); - carList.add(new Car("B", new MovableNumberGenerator())); - carList.add(new Car("C", new NotMovableNumberGenerator())); - - cars = Cars.from(carList); + Cars cars = Cars.from(cars_Fixture); cars.move(); assertThat(cars.getCars().get(0).getDistance()).isEqualTo(1); @@ -43,14 +47,7 @@ public void testCarsMove() { @Test public void testCarsGetMaxDistance() { - List carList = new ArrayList<>(); - Cars cars; - - carList.add(new Car("A", new NotMovableNumberGenerator())); - carList.add(new Car("B", new MovableNumberGenerator())); - carList.add(new Car("C", new NotMovableNumberGenerator())); - - cars = Cars.from(carList); + Cars cars = Cars.from(cars_Fixture); cars.move(); cars.move(); @@ -60,19 +57,13 @@ public void testCarsGetMaxDistance() { @Test public void testFindCarsInSamePosition() { - List carList = new ArrayList<>(); - - carList.add(new Car("A", new NotMovableNumberGenerator())); - carList.add(new Car("B", new MovableNumberGenerator())); - carList.add(new Car("C", new MovableNumberGenerator())); - - Cars cars = Cars.from(carList); + Cars cars = Cars.from(cars_Fixture); cars.move(); cars.move(); Cars carsInSamePosition = cars.findCarsHasSamePosition(2); - assertThat(carsInSamePosition.getCars()).containsOnly(carList.get(1), carList.get(2)); + assertThat(carsInSamePosition.getCars()).containsOnly(movableA_Fixture, movableB_Fixture); } } From 38976c53906c1863f1795bd7c79dd2809454b9ab Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Mon, 24 Mar 2025 02:44:09 +0900 Subject: [PATCH 31/32] =?UTF-8?q?style=20:=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=84=9C=EC=8B=9D=20=EC=A0=90=EA=B2=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/controller/RacingController.java | 2 +- src/main/java/domain/Cars.java | 4 ++-- src/main/java/domain/Name.java | 6 +++--- src/main/java/domain/NumberGenerator.java | 2 -- src/main/java/domain/Racing.java | 2 -- src/main/java/view/InputView.java | 2 +- src/test/java/CarsTest.java | 9 +++++---- src/test/java/ViewTest.java | 3 ++- 8 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/main/java/controller/RacingController.java b/src/main/java/controller/RacingController.java index fced9515..43acc470 100644 --- a/src/main/java/controller/RacingController.java +++ b/src/main/java/controller/RacingController.java @@ -34,7 +34,7 @@ public void run() { public List createCars(List names) { List cars = new ArrayList<>(); - for(String name : names) { + for (String name : names) { cars.add(new Car(name, randomGenerator)); } return cars; diff --git a/src/main/java/domain/Cars.java b/src/main/java/domain/Cars.java index a90c5770..bf03600d 100644 --- a/src/main/java/domain/Cars.java +++ b/src/main/java/domain/Cars.java @@ -23,13 +23,13 @@ public static Cars from(List cars) { } public static void checkCarNumber(List cars) { - if(cars.size() > MAX_CAR_NUMBER) { + if (cars.size() > MAX_CAR_NUMBER) { throw new IllegalArgumentException("[Error] ์ฐจ์˜ ๊ฐœ์ˆ˜๋Š” 10๋Œ€๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); } } public static void checkDuplicates(List cars) { - if(hasDuplicates(cars)) { + if (hasDuplicates(cars)) { throw new IllegalArgumentException("[Error] ์ฐจ์˜ ์ด๋ฆ„์€ ์ค‘๋ณต๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); } } diff --git a/src/main/java/domain/Name.java b/src/main/java/domain/Name.java index 845533d6..b7e3456a 100644 --- a/src/main/java/domain/Name.java +++ b/src/main/java/domain/Name.java @@ -17,13 +17,13 @@ public static Name from(final String name) { } public static void checkLength(String name) { - if(name.length() > MAX_LENGTH) { - throw new IllegalArgumentException("[Error] ์ด๋ฆ„์€ " + MAX_LENGTH + "์ž๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); + if (name.length() > MAX_LENGTH) { + throw new IllegalArgumentException("[Error] ์ด๋ฆ„์€ " + MAX_LENGTH + "์ž๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); } } public static void checkBlank(String name) { - if(name.trim().isEmpty()) { + if (name.trim().isEmpty()) { throw new IllegalArgumentException("[Error] ์ด๋ฆ„์€ ๊ณต๋ฐฑ์œผ๋กœ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."); } } diff --git a/src/main/java/domain/NumberGenerator.java b/src/main/java/domain/NumberGenerator.java index 7fe62aff..2021e72d 100644 --- a/src/main/java/domain/NumberGenerator.java +++ b/src/main/java/domain/NumberGenerator.java @@ -1,7 +1,5 @@ package domain; public interface NumberGenerator { - int generateNumber(); - } diff --git a/src/main/java/domain/Racing.java b/src/main/java/domain/Racing.java index c46035e8..5348c398 100644 --- a/src/main/java/domain/Racing.java +++ b/src/main/java/domain/Racing.java @@ -16,6 +16,4 @@ public Cars findWinners() { return cars.findCarsHasSamePosition(cars.getMaxDistance()); } - - } diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index f38005a7..d22b545b 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -59,7 +59,7 @@ private static boolean hasBlank(List names) { .anyMatch(name -> name.trim().isEmpty()); } - private static boolean hasDuplicates(List names) { + private static boolean hasDuplicates(List names) { Set nameSet = new HashSet<>(); return names.stream() .anyMatch(name -> !nameSet.add(name)); diff --git a/src/test/java/CarsTest.java b/src/test/java/CarsTest.java index ece5a89f..0396101f 100644 --- a/src/test/java/CarsTest.java +++ b/src/test/java/CarsTest.java @@ -16,9 +16,9 @@ public class CarsTest { @BeforeEach public void setUp() { - movableA_Fixture = new Car("A",new MovableNumberGenerator()); - movableB_Fixture = new Car("B",new MovableNumberGenerator()); - notMovableC_Fixture = new Car("C",new NotMovableNumberGenerator()); + movableA_Fixture = new Car("A", new MovableNumberGenerator()); + movableB_Fixture = new Car("B", new MovableNumberGenerator()); + notMovableC_Fixture = new Car("C", new NotMovableNumberGenerator()); cars_Fixture = new ArrayList<>(); cars_Fixture.add(movableA_Fixture); @@ -26,7 +26,8 @@ public void setUp() { cars_Fixture.add(notMovableC_Fixture); } - @Test void testCarsFrom() { + @Test + void testCarsFrom() { Cars cars = Cars.from(cars_Fixture); assertThat(cars.getCars().size()).isEqualTo(3); diff --git a/src/test/java/ViewTest.java b/src/test/java/ViewTest.java index ff0d58dc..d802ace3 100644 --- a/src/test/java/ViewTest.java +++ b/src/test/java/ViewTest.java @@ -17,7 +17,8 @@ public void testFormatCarInfo() { assertThat(formattedInfo).isEqualTo("A : --"); } - @Test void testFormatWinnerNames() { + @Test + void testFormatWinnerNames() { List winners = Arrays.asList("A", "B", "C"); String formattedWinners = OutputView.formatWinnerNames(winners); From 97bb64de5747f2d2f8579b9ef476645188fde76b Mon Sep 17 00:00:00 2001 From: jihwanyeom Date: Mon, 24 Mar 2025 03:08:46 +0900 Subject: [PATCH 32/32] =?UTF-8?q?test=20:=20=EC=9E=85=EB=A0=A5=20=EC=84=9C?= =?UTF-8?q?=EC=8B=9D=20=EA=B2=80=EC=A6=9D=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/CarsTest.java | 23 +++++++++++++++++++++++ src/test/java/NameTest.java | 21 +++++++++++++++++++++ src/test/java/ViewTest.java | 30 ++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 src/test/java/NameTest.java diff --git a/src/test/java/CarsTest.java b/src/test/java/CarsTest.java index 0396101f..ce5ba4cf 100644 --- a/src/test/java/CarsTest.java +++ b/src/test/java/CarsTest.java @@ -4,6 +4,7 @@ import domain.Cars; import java.util.ArrayList; import java.util.List; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -67,4 +68,26 @@ public void testFindCarsInSamePosition() { assertThat(carsInSamePosition.getCars()).containsOnly(movableA_Fixture, movableB_Fixture); } + @Test + public void testCheckCarNumber() { + List cars = new ArrayList<>(); + for (int i = 0; i < 11; i++) { + cars.add(new Car("car" + i, new MovableNumberGenerator())); + } + + Assertions.assertThatThrownBy(() -> Cars.checkCarNumber(cars)) + .isInstanceOf(IllegalArgumentException.class); + } + + @Test + public void testCheckDuplicates() { + List cars = new ArrayList<>(); + cars.add(new Car("A", new MovableNumberGenerator())); + cars.add(new Car("A", new MovableNumberGenerator())); + cars.add(new Car("B", new MovableNumberGenerator())); + + Assertions.assertThatThrownBy(() -> Cars.checkDuplicates(cars)) + .isInstanceOf(IllegalArgumentException.class); + } + } diff --git a/src/test/java/NameTest.java b/src/test/java/NameTest.java new file mode 100644 index 00000000..8b81e929 --- /dev/null +++ b/src/test/java/NameTest.java @@ -0,0 +1,21 @@ +import domain.Name; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + +public class NameTest { + + @Test + public void testCheckLength() { + String name = "HYUNDAI"; + Assertions.assertThatThrownBy(() -> Name.checkLength(name)) + .isInstanceOf(IllegalArgumentException.class); + } + + @Test + public void testCheckBlank() { + String name = " "; + Assertions.assertThatThrownBy(() -> Name.checkBlank(name)) + .isInstanceOf(IllegalArgumentException.class); + } + +} diff --git a/src/test/java/ViewTest.java b/src/test/java/ViewTest.java index d802ace3..1d98f109 100644 --- a/src/test/java/ViewTest.java +++ b/src/test/java/ViewTest.java @@ -3,7 +3,9 @@ import domain.Car; import java.util.Arrays; import java.util.List; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; +import view.InputView; import view.OutputView; public class ViewTest { @@ -25,4 +27,32 @@ void testFormatWinnerNames() { assertThat(formattedWinners).isEqualTo("A, B, C"); } + @Test + public void testCheckLength() { + List names = Arrays.asList("HYUNDAI", "KIA", "FORD"); + Assertions.assertThatThrownBy(() -> InputView.checkLength(names)) + .isInstanceOf(IllegalArgumentException.class); + } + + @Test + public void testCheckBlank() { + List names = Arrays.asList(" ", "KIA", "FORD"); + Assertions.assertThatThrownBy(() -> InputView.checkBlank(names)) + .isInstanceOf(IllegalArgumentException.class); + } + + @Test + public void testCheckCarNumber() { + List names = Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L"); + Assertions.assertThatThrownBy(() -> InputView.checkCarNumber(names)) + .isInstanceOf(IllegalArgumentException.class); + } + + @Test + public void testCheckDuplicates() { + List names = Arrays.asList("KIA", "KIA", "FORD"); + Assertions.assertThatThrownBy(() -> InputView.checkDuplicates(names)) + .isInstanceOf(IllegalArgumentException.class); + } + }