From 638255f2ba5c8ac617659a444f599cb71cdad0cb Mon Sep 17 00:00:00 2001 From: eunwoo song Date: Mon, 6 Nov 2023 01:49:17 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=9E=90=EB=8F=99=EC=B0=A8=EC=9D=98=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=EC=9D=84=20=EB=B0=9B=EB=8A=94=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/kotlin/racingcar/Car.kt | 14 +++++++++++--- src/main/kotlin/racingcar/Cars.kt | 4 ++-- src/main/kotlin/racingcar/InputView.kt | 5 +++++ src/main/kotlin/racingcar/Main.kt | 5 +++-- src/test/kotlin/racingcar/CarTest.kt | 15 ++++++++++++--- src/test/kotlin/racingcar/CarsTest.kt | 4 ++-- 6 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/main/kotlin/racingcar/Car.kt b/src/main/kotlin/racingcar/Car.kt index 3c8e7cafbb..b882a6139c 100644 --- a/src/main/kotlin/racingcar/Car.kt +++ b/src/main/kotlin/racingcar/Car.kt @@ -1,12 +1,18 @@ package racingcar -class Car(val position: Int) { - constructor() : this(INITIAL_POSITION) +class Car(val name: String, val position: Int) { + init { + require(name.length in MINIMUM_CAR_NAME_LENGTH..MAXIMUM_CAR_NAME_LENGTH) { + "자동차의 이름은 ${MINIMUM_CAR_NAME_LENGTH}글자 이상 ${MAXIMUM_CAR_NAME_LENGTH}글자 이하만 가능합니다." + } + } + + constructor(name: String) : this(name, INITIAL_POSITION) fun move(power: Int): Car { validatePower(power) if (power >= MINIMUM_AMOUNT_TO_MOVE) { - return Car(position + 1) + return Car(name, position + 1) } return this } @@ -22,5 +28,7 @@ class Car(val position: Int) { const val MINIMUM_AMOUNT_TO_MOVE = 4 const val MAXIMUM_MOVE_POWER = 9 const val MINIMUM_MOVE_POWER = 0 + const val MINIMUM_CAR_NAME_LENGTH = 1 + const val MAXIMUM_CAR_NAME_LENGTH = 5 } } diff --git a/src/main/kotlin/racingcar/Cars.kt b/src/main/kotlin/racingcar/Cars.kt index ab00706ca0..adec065d09 100644 --- a/src/main/kotlin/racingcar/Cars.kt +++ b/src/main/kotlin/racingcar/Cars.kt @@ -8,10 +8,10 @@ class Cars(val cars: List, private val powerGenerator: PowerGenerator) { } companion object { - fun initializeWithNumberOfCars(numberOfCars: Int, powerGenerator: PowerGenerator): Cars { + fun initialize(numberOfCars: Int, names: List, powerGenerator: PowerGenerator): Cars { val cars = mutableListOf() repeat(numberOfCars) { - cars.add(Car()) + cars.add(Car(names[it])) } return Cars(cars, powerGenerator) } diff --git a/src/main/kotlin/racingcar/InputView.kt b/src/main/kotlin/racingcar/InputView.kt index 8d96975093..36999f68d6 100644 --- a/src/main/kotlin/racingcar/InputView.kt +++ b/src/main/kotlin/racingcar/InputView.kt @@ -11,4 +11,9 @@ object InputView { println("시도할 회수는 몇 회 인가요?") return readln().toInt() } + + fun inputNameOfCars(): List { + println("자동차 이름을 입력하세요. (이름은 쉼표(,) 기준으로 구분)") + return readln().split(",") + } } diff --git a/src/main/kotlin/racingcar/Main.kt b/src/main/kotlin/racingcar/Main.kt index 30e64b2b38..b21814ff1b 100644 --- a/src/main/kotlin/racingcar/Main.kt +++ b/src/main/kotlin/racingcar/Main.kt @@ -2,9 +2,10 @@ package racingcar fun main() { val numberOfCars = InputView.inputNumberOfCars() - val numberOfMoves = InputView.inputNumberOfMoves() + val namesOfCars = InputView.inputNameOfCars() + val cars = Cars.initialize(numberOfCars, namesOfCars, RandomPowerGenerator) - val cars = Cars.initializeWithNumberOfCars(numberOfCars, RandomPowerGenerator) + val numberOfMoves = InputView.inputNumberOfMoves() OutputView.printResultTitle() diff --git a/src/test/kotlin/racingcar/CarTest.kt b/src/test/kotlin/racingcar/CarTest.kt index 6f102d7562..16d81c452d 100644 --- a/src/test/kotlin/racingcar/CarTest.kt +++ b/src/test/kotlin/racingcar/CarTest.kt @@ -7,17 +7,26 @@ import org.junit.jupiter.params.ParameterizedTest import org.junit.jupiter.params.provider.ValueSource internal class CarTest { + @Test + fun `자동차의 이름은 1자 이상이어야 한다`() { + assertThrows { Car("") } + } + + @Test + fun `자동차의 이름은 5자 이하여야 한다`() { + assertThrows { Car("123456") } + } @Test fun `자동차는 4 이상이 들어오면 움직인다`() { - val car = Car() + val car = Car("name") val result = car.move(4) assertThat(result.position).isOne() } @Test fun `자동차는 4 미만이 들어오면 움직이지 않는다`() { - val car = Car() + val car = Car("name") val result = car.move(3) assertThat(result.position).isZero() } @@ -25,7 +34,7 @@ internal class CarTest { @ParameterizedTest @ValueSource(ints = [-1, 10]) fun `자동차는 0 이상 9 이하의 값만 가능하다`(power: Int) { - val car = Car() + val car = Car("name") assertThrows { car.move(power) diff --git a/src/test/kotlin/racingcar/CarsTest.kt b/src/test/kotlin/racingcar/CarsTest.kt index 4000a1cb3a..a4d1a319df 100644 --- a/src/test/kotlin/racingcar/CarsTest.kt +++ b/src/test/kotlin/racingcar/CarsTest.kt @@ -7,7 +7,7 @@ internal class CarsTest { @Test fun `자동차들은 특정 숫자 이상이 들어오면 움직인다`() { - val cars = Cars.initializeWithNumberOfCars(3, FixedPowerGenerator(4)) + val cars = Cars.initialize(3, listOf("a", "b", "c"), FixedPowerGenerator(4)) val result = cars.move() @@ -16,7 +16,7 @@ internal class CarsTest { @Test fun `자동차들은 특정 숫자 미만이 들어오면 움직이지 않는다`() { - val cars = Cars.initializeWithNumberOfCars(3, FixedPowerGenerator(3)) + val cars = Cars.initialize(3, listOf("a", "b", "c"), FixedPowerGenerator(3)) val result = cars.move()