From af200fec2970afe79b611626d0a5b6de6641ea17 Mon Sep 17 00:00:00 2001 From: chs1234 Date: Sun, 30 Apr 2023 00:36:27 +0900 Subject: [PATCH 1/3] =?UTF-8?q?refactor,=20test:=20Movable=20=EC=9D=B8?= =?UTF-8?q?=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=83=9D=EC=84=B1=20/?= =?UTF-8?q?=20=EB=8F=84=EB=A9=94=EC=9D=B8=20=EB=AA=A8=EB=8D=B8=20=EB=B3=84?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BD=94=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20/=20Cars=20=EC=BB=AC=EB=A0=89=EC=85=98=20=ED=8F=AC?= =?UTF-8?q?=EC=9E=A5(RacingCars)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/controller/RacingGameController.java | 41 +++++++++++++------ .../exception/InvalidPositionException.java | 7 ++++ src/main/java/model/Car.java | 17 ++++---- src/main/java/model/Cars.java | 28 +++++++++---- src/main/java/model/Position.java | 41 ++++++++++++------- src/main/java/model/RacingCars.java | 34 +++++++++++++++ src/main/java/properties/ErrorMessage.java | 4 ++ src/main/java/service/Movable.java | 6 +++ .../RandomMoveConstraintsStrategy.java | 11 +++++ src/test/java/model/CarNameTest.java | 21 ++++++++++ src/test/java/model/CarTest.java | 27 ++++++++++++ src/test/java/model/CarsTest.java | 34 ++++++++++++++- src/test/java/model/PositionTest.java | 22 ++++++++++ 13 files changed, 248 insertions(+), 45 deletions(-) create mode 100644 src/main/java/exception/InvalidPositionException.java create mode 100644 src/main/java/model/RacingCars.java create mode 100644 src/main/java/service/Movable.java create mode 100644 src/main/java/service/RandomMoveConstraintsStrategy.java create mode 100644 src/test/java/model/CarNameTest.java create mode 100644 src/test/java/model/CarTest.java create mode 100644 src/test/java/model/PositionTest.java diff --git a/src/main/java/controller/RacingGameController.java b/src/main/java/controller/RacingGameController.java index ae71c24..bc4ae12 100644 --- a/src/main/java/controller/RacingGameController.java +++ b/src/main/java/controller/RacingGameController.java @@ -1,30 +1,45 @@ package controller; import exception.InvalidTryCountException; -import model.Cars; +import model.RacingCars; import properties.ErrorMessage; +import service.Movable; +import service.RandomMoveConstraintsStrategy; import view.RacingGameView; public class RacingGameController { - - private Cars cars; + private RacingCars racingCars; private int tryCount; + private Movable moveStrategy; public void start() { - init(); + readyForRace(); race(); - result(); + printWinners(); + } + + private void readyForRace() { + initMoveStrategy(); + askCarNames(); + askTryCount(); } - private void init() { + private void initMoveStrategy() { + this.moveStrategy = new RandomMoveConstraintsStrategy(); + } + + private void askCarNames() { RacingGameView.askCarNames(); - initCars(RacingGameView.getConsoleInput()); + initRacingCars(RacingGameView.getConsoleInput()); + } + + private void askTryCount() { RacingGameView.askTryCount(); initTryCount(RacingGameView.getConsoleInput()); } - private void initCars(final String carNames) { - cars = new Cars(carNames); + private void initRacingCars(final String carNames) { + this.racingCars = new RacingCars(carNames); } private void initTryCount(final String tryCount) { @@ -46,13 +61,13 @@ private int parsedTryCount(String tryCount) { private void race() { int playCount = 0; while (playCount != tryCount) { - cars.move(); - cars.moveResult(); + racingCars.move(moveStrategy); + racingCars.moveResult(); playCount++; } } - private void result() { - cars.pickWinners(); + private void printWinners() { + racingCars.printWinners(); } } diff --git a/src/main/java/exception/InvalidPositionException.java b/src/main/java/exception/InvalidPositionException.java new file mode 100644 index 0000000..0e72e34 --- /dev/null +++ b/src/main/java/exception/InvalidPositionException.java @@ -0,0 +1,7 @@ +package exception; + +public class InvalidPositionException extends RacingGameException { + public InvalidPositionException(String message) { + super(message); + } +} diff --git a/src/main/java/model/Car.java b/src/main/java/model/Car.java index 4dbc66f..edff2f8 100644 --- a/src/main/java/model/Car.java +++ b/src/main/java/model/Car.java @@ -1,11 +1,12 @@ package model; +import service.Movable; import view.RacingGameView; public class Car { private final CarName name; - private final Position position; + private Position position; public Car(String name) { this(name, 0); @@ -16,26 +17,26 @@ public Car(String name, int position) { this.position = new Position(position); } - public void move() { - if (!position.canMove()) + public void move(Movable moveStrategy) { + if (!moveStrategy.canMove()) return; - position.increasePosition(); + this.position = this.position.increasePosition(); } public void printCurrPosition() { RacingGameView.printText( - name.getName() + " : " + position.indicateCharacterByPosition() + name.getName() + " : " + position.getPosition() ); } public int getCurrentPosition() { - return position.getPosition(); + return position.getPosition().length(); } public String getNameIfWin(int winnerPosition) { - if (position.getPosition() == winnerPosition) - return name.getName() + ", "; + if (position.getPosition().length() == winnerPosition) + return name.getName(); return ""; } diff --git a/src/main/java/model/Cars.java b/src/main/java/model/Cars.java index 06f827a..3bbb9de 100644 --- a/src/main/java/model/Cars.java +++ b/src/main/java/model/Cars.java @@ -2,17 +2,24 @@ import exception.InvalidCarNameException; import properties.ErrorMessage; +import service.Movable; import view.RacingGameView; import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class Cars { private final List cars; private static final String CAR_NAME_DELIMITER = ","; + public Cars(List cars) { + this.cars = cars; + } + public Cars(String carNames) { this.cars = makeCars(carNames); } @@ -22,8 +29,8 @@ public List makeCars(String carNames) { return parsedCarNames(carNames).stream().map(Car::new).toList(); } - public void move() { - cars.forEach(Car::move); + public void move(Movable moveStrategy) { + cars.forEach(car -> car.move(moveStrategy)); } public void moveResult() { @@ -32,12 +39,19 @@ public void moveResult() { RacingGameView.printLine(); } - public void pickWinners() { - int winnerPosition = cars.stream().mapToInt(Car::getCurrentPosition).max().getAsInt(); + public int getWinnerPosition() { + return cars.stream().mapToInt(Car::getCurrentPosition).max().getAsInt(); + } + + public List findWinnerNamesByPosition(int winnerPosition) { StringBuilder result = new StringBuilder(); - cars.forEach(car -> result.append(car.getNameIfWin(winnerPosition))); - String winners = result.substring(0, result.length() - 2); - RacingGameView.printText(winners + "가 최종 우승했습니다."); + cars.forEach(car -> + result.append(car.getNameIfWin(winnerPosition)).append(",") + ); + + return Stream.of(result.toString().split(",")) + .filter(winner -> !winner.isBlank()) + .collect(Collectors.toList()); } private void validNames(String carNames) { diff --git a/src/main/java/model/Position.java b/src/main/java/model/Position.java index 45c34ae..054bd58 100644 --- a/src/main/java/model/Position.java +++ b/src/main/java/model/Position.java @@ -1,34 +1,45 @@ package model; -public class Position { +import exception.InvalidPositionException; +import properties.ErrorMessage; + +import java.util.Objects; - private int position; +public class Position { - private static final int MOVE_CONDITION = 4; + private final int position; private static final String DISPLAY_CHARACTER = "-"; - public Position(int position) { - this.position = position; + public Position() { + this(0); } - public int getPosition() { - return position; + public Position(int position) { + if (position < 0) + throw new InvalidPositionException(ErrorMessage.Position.NOT_POSITIVE_NUMBER); + + this.position = position; } - public void increasePosition() { - position++; + public Position increasePosition() { + return new Position(position + 1); } - public boolean canMove() { - return createRandomNumber() >= MOVE_CONDITION; + public String getPosition() { + return DISPLAY_CHARACTER.repeat(Math.max(0, position)); } - public int createRandomNumber() { - return (int) (Math.random() * 10); + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Position position1 = (Position) o; + return position == position1.position; } - public String indicateCharacterByPosition() { - return DISPLAY_CHARACTER.repeat(Math.max(0, position)); + @Override + public int hashCode() { + return Objects.hash(position); } } diff --git a/src/main/java/model/RacingCars.java b/src/main/java/model/RacingCars.java new file mode 100644 index 0000000..f8e632f --- /dev/null +++ b/src/main/java/model/RacingCars.java @@ -0,0 +1,34 @@ +package model; + +import org.apache.commons.lang3.StringUtils; +import service.Movable; +import view.RacingGameView; + +import java.util.List; + +public class RacingCars { + + private final Cars cars; + + public RacingCars(String carNames) { + this.cars = new Cars(carNames); + } + + public void move(Movable moveStrategy) { + cars.move(moveStrategy); + } + + public void moveResult() { + cars.moveResult(); + } + + public void printWinners() { + RacingGameView.printText(findWinnerNames() + "가 최종 우승했습니다."); + } + + private String findWinnerNames() { + List winners = cars.findWinnerNamesByPosition(cars.getWinnerPosition()); + return StringUtils.join(winners, ", "); + } + +} diff --git a/src/main/java/properties/ErrorMessage.java b/src/main/java/properties/ErrorMessage.java index 425139d..b1bd194 100644 --- a/src/main/java/properties/ErrorMessage.java +++ b/src/main/java/properties/ErrorMessage.java @@ -14,4 +14,8 @@ public static class CarName { public static class TryCount { public static final String NOT_POSITIVE_NUMBER = "[ERROR] 시도 횟수 입력값은 1 이상의 정수여야만 합니다."; } + + public static class Position { + public static final String NOT_POSITIVE_NUMBER = "[ERROR] 위치 값은 음수일 수 없습니다."; + } } diff --git a/src/main/java/service/Movable.java b/src/main/java/service/Movable.java new file mode 100644 index 0000000..e1b1513 --- /dev/null +++ b/src/main/java/service/Movable.java @@ -0,0 +1,6 @@ +package service; + +@FunctionalInterface +public interface Movable { + boolean canMove(); +} diff --git a/src/main/java/service/RandomMoveConstraintsStrategy.java b/src/main/java/service/RandomMoveConstraintsStrategy.java new file mode 100644 index 0000000..567ccb6 --- /dev/null +++ b/src/main/java/service/RandomMoveConstraintsStrategy.java @@ -0,0 +1,11 @@ +package service; + +public class RandomMoveConstraintsStrategy implements Movable { + + private static final int CONSTRAINTS = 4; + + @Override + public boolean canMove() { + return (int) (Math.random() * 10) >= CONSTRAINTS; + } +} diff --git a/src/test/java/model/CarNameTest.java b/src/test/java/model/CarNameTest.java new file mode 100644 index 0000000..38e4e2c --- /dev/null +++ b/src/test/java/model/CarNameTest.java @@ -0,0 +1,21 @@ +package model; + +import exception.InvalidCarNameException; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import properties.ErrorMessage; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class CarNameTest { + + @ParameterizedTest + @ValueSource(strings = {"123456"}) + @DisplayName("잘못된 자동차 이름 에러 테스트") + void test(String parameter) { + InvalidCarNameException invalidCarNameException = assertThrows(InvalidCarNameException.class, () -> new CarName(parameter)); + assertEquals(ErrorMessage.CarName.NOT_EXCEED_CAR_NAME_LENGTH, invalidCarNameException.getMessage()); + } +} \ No newline at end of file diff --git a/src/test/java/model/CarTest.java b/src/test/java/model/CarTest.java new file mode 100644 index 0000000..84ccbd0 --- /dev/null +++ b/src/test/java/model/CarTest.java @@ -0,0 +1,27 @@ +package model; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class CarTest { + + @Test + @DisplayName("move전략의 움직임 여부가 true면 위치값이 1 증가한다.") + void test() { + Car car = new Car("seung"); + car.move(() -> true); + + assertEquals(1, car.getCurrentPosition()); + } + + @Test + @DisplayName("move전략의 움직임 여부가 false면 움직이지 않는다.") + void test2() { + Car car = new Car("seung"); + car.move(() -> false); + + assertEquals(0, car.getCurrentPosition()); + } +} diff --git a/src/test/java/model/CarsTest.java b/src/test/java/model/CarsTest.java index 0360d96..23cc5d2 100644 --- a/src/test/java/model/CarsTest.java +++ b/src/test/java/model/CarsTest.java @@ -3,15 +3,17 @@ import exception.InvalidCarNameException; import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import properties.ErrorMessage; +import service.Movable; +import java.util.List; import java.util.stream.Stream; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.*; class CarsTest { @@ -23,6 +25,34 @@ void test(String parameter, String name) { assertEquals(name, invalidCarNameException.getMessage()); } + @Test + @DisplayName("가장 멀리간 자동차의 position은 winnerPosition이다") + void test2() { + Cars cars = new Cars("ko,ho,seung"); + cars.move(() -> true); + assertEquals(cars.getWinnerPosition(), 1); + } + + @Test + @DisplayName("우승자의 position으로 우승자들의 이름을 가져온다.") + void test3() { + Movable movable = () -> true; + + var porsche = new Car("포르쉐"); + porsche.move(movable); + + var zhivagen = new Car("지바겐"); + zhivagen.move(movable); + zhivagen.move(movable); + + var lamborghini = new Car("람보르기니"); + lamborghini.move(movable); + lamborghini.move(movable); + + var cars = new Cars(List.of(porsche, zhivagen, lamborghini)); + assertTrue(cars.findWinnerNamesByPosition(2).toString().contains("ho, seung")); + } + static Stream invalidParameters() { return Stream.of( Arguments.of("", ErrorMessage.CarName.NOT_ALLOW_EMPTY_OR_CONTAINS_WHITE_SPACE), diff --git a/src/test/java/model/PositionTest.java b/src/test/java/model/PositionTest.java new file mode 100644 index 0000000..235417b --- /dev/null +++ b/src/test/java/model/PositionTest.java @@ -0,0 +1,22 @@ +package model; + +import exception.InvalidPositionException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class PositionTest { + + @Test + @DisplayName("위치 값은 음수일 수 없다.") + void test() { + Assertions.assertThrows(InvalidPositionException.class, () -> new Position(-1)); + } + + @Test + @DisplayName("move를 하면 position을 증가시킨다.") + void test2() { + Assertions.assertEquals(new Position(1), new Position().increasePosition()); + } + +} \ No newline at end of file From 9cbe815526391132e5fe3119273b7aa24bbda95b Mon Sep 17 00:00:00 2001 From: chs1234 Date: Mon, 1 May 2023 11:51:48 +0900 Subject: [PATCH 2/3] =?UTF-8?q?chore,=20test:=20junit5-bom=20=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EB=B3=80=EA=B2=BD,=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=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 --- .gradle/7.5.1/checksums/checksums.lock | Bin 17 -> 17 bytes .gradle/7.5.1/checksums/md5-checksums.bin | Bin 19297 -> 19997 bytes .gradle/7.5.1/checksums/sha1-checksums.bin | Bin 21305 -> 24113 bytes build.gradle | 5 ++--- src/test/java/model/CarsTest.java | 2 +- 5 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.gradle/7.5.1/checksums/checksums.lock b/.gradle/7.5.1/checksums/checksums.lock index 934157aa127841c2ef82ce3b170108fac3a18aef..cf7490d9dc85a5c501923a247c961141d8b1083d 100644 GIT binary patch literal 17 UcmZQ}U+td7{`Qa@0|d+h04ux%6#xJL literal 17 UcmZQ}U+td7{`Qa@0|W#B04s6>%K!iX diff --git a/.gradle/7.5.1/checksums/md5-checksums.bin b/.gradle/7.5.1/checksums/md5-checksums.bin index 263d11f5e8e6708471541675624a5fd04ef50d0b..5f1ec5031493db8483636a239e9e8304275ee510 100644 GIT binary patch delta 987 zcmaDjjdAWA#tkMChH{;`j(po*nC@W!1Mj2%pm-Gp@Neq_ev;e{Jzed@chZw zB#5BzPM8Udk7TOXrX^p3iib{KDiPqorxG|jMBvmfh@ek2OtJ7Q#fRBj`WHYIzlMp6 zyhysio&I<#RQ>+RZ-LHGb?&MXZ!KRBRjfRjRnkJh;+j01HLwuuwh3IBS4+Z9WW1y@i5G#VP zz*WuGooSw*PS5QUdK%;{w3LB?vArPjxeLSy(SJZ%4^>CMfZxUI%iG(%B_6MR!O-&^ zs^bVmhqNB14jWs$qxTr5N93^woPWigB*6pG@@(?t(;iY@JQ21$H~Js$pWbi0q4VhN z=@7{mB@pvO0x`|ITV(#AYky(+xq_9eR?aE11?f0(GCOnfM=vR_scvsRx_n~15mllY z)U#i}6e?K{F;2_|)3_Y@PcbiMGlVF5(kqwGNAP@#6Og#W_kwRkt delta 59 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 Xdu1J8ZP5CukvogX0$KPsfzbLdfQA9n delta 157 zcmdnEhjHgJ#tkMCf+lT$q?m1$)?fyV6(lC_RWO{)rYJsnt)c|ae<)yJVEMRF@rU?E0}bKLjvha_04LNq A=Kufz diff --git a/build.gradle b/build.gradle index 54696fe..9f4a182 100644 --- a/build.gradle +++ b/build.gradle @@ -11,9 +11,8 @@ repositories { dependencies { implementation 'org.projectlombok:lombok:1.18.22' - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' - testImplementation 'org.junit.jupiter:junit-jupiter-params:5.4.2' + testImplementation platform('org.junit:junit-bom:5.9.1') + testImplementation 'org.junit.jupiter:junit-jupiter' implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.0' } diff --git a/src/test/java/model/CarsTest.java b/src/test/java/model/CarsTest.java index 23cc5d2..e901a97 100644 --- a/src/test/java/model/CarsTest.java +++ b/src/test/java/model/CarsTest.java @@ -50,7 +50,7 @@ void test3() { lamborghini.move(movable); var cars = new Cars(List.of(porsche, zhivagen, lamborghini)); - assertTrue(cars.findWinnerNamesByPosition(2).toString().contains("ho, seung")); + assertTrue(cars.findWinnerNamesByPosition(2).toString().contains("지바겐, 람보르기니")); } static Stream invalidParameters() { From 1eb96137db16d89cf80cb374fbf4d815abcc6393 Mon Sep 17 00:00:00 2001 From: chs1234 Date: Mon, 1 May 2023 15:02:45 +0900 Subject: [PATCH 3/3] =?UTF-8?q?chore:=20=EB=B9=8C=EB=93=9C=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=A0=84=EB=B6=80=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gradle/7.5.1/checksums/checksums.lock | Bin 17 -> 0 bytes .gradle/7.5.1/checksums/md5-checksums.bin | Bin 19997 -> 0 bytes .gradle/7.5.1/checksums/sha1-checksums.bin | Bin 24113 -> 0 bytes .../dependencies-accessors.lock | Bin 17 -> 0 bytes .../7.5.1/dependencies-accessors/gc.properties | 0 .../7.5.1/executionHistory/executionHistory.bin | Bin 19671 -> 0 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 0 bytes .gradle/7.5.1/fileChanges/last-build.bin | Bin 1 -> 0 bytes .gradle/7.5.1/fileHashes/fileHashes.bin | Bin 18697 -> 0 bytes .gradle/7.5.1/fileHashes/fileHashes.lock | Bin 17 -> 0 bytes .gradle/7.5.1/gc.properties | 0 .../buildOutputCleanup/buildOutputCleanup.lock | Bin 17 -> 0 bytes .gradle/buildOutputCleanup/cache.properties | 2 -- .gradle/buildOutputCleanup/outputFiles.bin | Bin 18731 -> 0 bytes .gradle/file-system.probe | Bin 8 -> 0 bytes .gradle/vcs-1/gc.properties | 0 out/production/classes/Application.class | Bin 450 -> 0 bytes 17 files changed, 2 deletions(-) delete mode 100644 .gradle/7.5.1/checksums/checksums.lock delete mode 100644 .gradle/7.5.1/checksums/md5-checksums.bin delete mode 100644 .gradle/7.5.1/checksums/sha1-checksums.bin delete mode 100644 .gradle/7.5.1/dependencies-accessors/dependencies-accessors.lock delete mode 100644 .gradle/7.5.1/dependencies-accessors/gc.properties delete mode 100644 .gradle/7.5.1/executionHistory/executionHistory.bin delete mode 100644 .gradle/7.5.1/executionHistory/executionHistory.lock delete mode 100644 .gradle/7.5.1/fileChanges/last-build.bin delete mode 100644 .gradle/7.5.1/fileHashes/fileHashes.bin delete mode 100644 .gradle/7.5.1/fileHashes/fileHashes.lock delete mode 100644 .gradle/7.5.1/gc.properties delete mode 100644 .gradle/buildOutputCleanup/buildOutputCleanup.lock delete mode 100644 .gradle/buildOutputCleanup/cache.properties delete mode 100644 .gradle/buildOutputCleanup/outputFiles.bin delete mode 100644 .gradle/file-system.probe delete mode 100644 .gradle/vcs-1/gc.properties delete mode 100644 out/production/classes/Application.class diff --git a/.gradle/7.5.1/checksums/checksums.lock b/.gradle/7.5.1/checksums/checksums.lock deleted file mode 100644 index cf7490d9dc85a5c501923a247c961141d8b1083d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZQ}U+td7{`Qa@0|d+h04ux%6#xJL diff --git a/.gradle/7.5.1/checksums/md5-checksums.bin b/.gradle/7.5.1/checksums/md5-checksums.bin deleted file mode 100644 index 5f1ec5031493db8483636a239e9e8304275ee510..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19997 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 Xdu1J8ZP5CukvogX0$KPsfzbLdfQA9n diff --git a/.gradle/7.5.1/dependencies-accessors/dependencies-accessors.lock b/.gradle/7.5.1/dependencies-accessors/dependencies-accessors.lock deleted file mode 100644 index a6528b37e1f91781ef01e50aa8f18f9d85c9cc05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZQxm-hax_AF*01}FdkGn)g> diff --git a/.gradle/7.5.1/dependencies-accessors/gc.properties b/.gradle/7.5.1/dependencies-accessors/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/.gradle/7.5.1/executionHistory/executionHistory.bin b/.gradle/7.5.1/executionHistory/executionHistory.bin deleted file mode 100644 index 88fdcb3bbec54169901f56de2056c458ff971043..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19671 zcmeI%Pe>F|90%}OcL|B2?NAuiAzTkZJG<+yu1a9)S_Ycow*8^S?d{Cl-LZ9dd~a51 zp_@vOnihB{N$4O&QPDv(1eFLW2m+-d>E@v*38F(#X0!iLp@U#S#CKq39`j~?zu)`3 zd2<<$AQYIFvzxH8?O17|1px>^00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P-n{BH+^p zvN& zf`C&HOuhQvmD+Cv!(36LZEZY6WGzaPNv+jQNU}|9%hoz9JczTf7-mF{Qjw^Ns1bgi ziye%pDrMrS%sJqpQk)Tu%I2lJvH9{Z=SH4>9-MwLHTNNJ!x4lTL!dgLL}jnU6jcjY z0xS^=NYOY?FzT@6TEzjEtJv+3LT=)q#1RU~4rggus9csx?QRkbI%MvDKVbkLzom%+G#c6H2?m3Mrt`uv`Fgqfg?>-p8DE=&s*CRsB3Jf&BaRHVC>5R z*<^)ld?0mXN-&`*@z|fpwI<+i5)Q6T=#7x#l2UJ?Rao=bi3=*tA6?g&J*&!3J=R%$ z^jQDu6h0O;PDV6MtF(D9^n$dWtkd4uIP-uang+mWU2(P>G32MeWO6JV_bX zk&NBxPQla@B$^b-%)DXBP*dUe>G8Q=ig1_9-x#AFrq7@M z4JPtur$3w5np-YAMOBbHodrz{j zUMj@wy8eG)kGwdkT;k`n%+Gb+UkaxRJ4bW=`AMB`yzP}HqRxz;=XI`EnXjpLJP|+u z0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY**5I_I{1Q0*~0R#|0009ILKmY** z5J2EB0+uZI$=T&i!`+MyceokzY(H*`_ti@wYIbkR!Fu(D#x}VQ{capSv|Pkig2zUp zClZexJgP=uTQ%Ip>c)I-Y_zyMIKB`lNAk&x?KiemL)=$4uCgKL+Hyaw)8bV3Q|Q)j L+^I(Ahu8Q9%zt)e diff --git a/.gradle/7.5.1/fileHashes/fileHashes.lock b/.gradle/7.5.1/fileHashes/fileHashes.lock deleted file mode 100644 index 34ba174dcb9d2aa112f64f573c15880fbdc60be3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZR+>3hvCdP}Vb0|c-E05qWl7ytkO diff --git a/.gradle/7.5.1/gc.properties b/.gradle/7.5.1/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock deleted file mode 100644 index c1ca5fe3aae738143b5579cf58c2d2d8aa9495b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZQR`kXIMMyXqp0RjX7DVzfy diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties deleted file mode 100644 index e2d0866..0000000 --- a/.gradle/buildOutputCleanup/cache.properties +++ /dev/null @@ -1,2 +0,0 @@ -#Wed Apr 26 00:06:57 KST 2023 -gradle.version=7.5.1 diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin deleted file mode 100644 index 7ab2265ef2f1cf4d8e1e0d30dba9a900ac37588d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18731 zcmeI&KS%;m9Ki8sOWD7RAhIAD0v8*E8X5{Nh{(qNfDJ*5O9V*}Iy5u{p%hLLBn3i{ z4c6LJgDnvf4Q&mYP#^>rMq}N1?}tQN5J7w&+}-1Qf4KKq@5Yq!w0-EIYNMkzWrhF( z2q1s}0tg_000IagfB*srAb=rTvlvf*ojoxkO8J|uNy~b^*y-Kh zdvQ)r+{*WZc(8O-SWZ6bUX;Eyob5@6;{n}c(zgenveBzh_326l>ZR|FRJ?cjoT;x5 zNl)hvjfI4{sQa7r`x&<{HI+HgJtDoS`=LE^ytJx&Mta}enNdjHoajC+-B(}h`_%RM*u%T4n6_4Wba3?9$$!m?ev)&BdbGwE5G3Q0Se@=eR8BwAisl;h z##HBOLT&AT$_(D9Sg1r?N^@#+4SZ}^I6|Es$SezV4^&ATl!X)-MW??6ds&s6q^1nm z*dh&nHlT$zWi@PLhaA&