์๋ก
์ง๋ 1์ฃผ์ฐจ์ ์์ฒญ๋ ๋ฐ์ฑ๊ณผ ๊น์ ๊นจ๋ฌ์์ ํ ๋๋ก 2์ฃผ์ฐจ๋ฅผ ์์ํ๋ค. 2์ฃผ์ฐจ ๋ฏธ์ ์ ์์ ์ฐํ ์ฝ์์ 2์ฃผ์ฐจ๋ฅผ ์ค๊ณํ๋ฉฐ ์ฐํ ์ฝ ์ฝ์น์ ํฌ๋น๊ฐ ์์ฌํ๊ณ ์ ํ๋ ๊ฒฝํ๊ณผ ๋ชฉํ๋ฅผ ํ์ ํ๋ ๊ฒ์ ์ค์ ์ ๋์๋ค.
2์ฃผ์ฐจ ๋ชฉํ
- 1์ฃผ์ฐจ์์ ํ์ตํ ๊ฒ์ ๋ํด ํจ์๋ฅผ ๋ถ๋ฆฌํ ๊ฒ
- ๊ฐ ํจ์๋ณ๋ก ํ
์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ
- ํ ์คํธ๊ฐ ์ฒ์์ด๋ผ๋ฉด, ์ธ์ด๋ณ ํ ์คํธ ๋๊ตฌ๋ฅผ ํ์ตํด๋ณด๊ธฐ
- ์์ ๋จ์์ ๊ธฐ๋ฅ๋ถํฐ ์์ฑํด๋ณด๊ธฐ
- ๋จ์ํ๊ณ , ์์ด๋ณด์ด์ง ์์๋ ๊ธฐ๋ณธ์ ์ถฉ์คํ ํ ์คํธ์ผ์ด์ค ๋ง๋ค๊ธฐ
- ์๊ตฌ์ฌํญ์ ์ ํ์
ํ๊ธฐ
- ์ต๋ํ ์ค์ค๋ก ํด๊ฒฐํด๋ณผ ๊ฒ
- ๋ฌด์์ ๋ค๋ฅธ ์ฌ๋์ ๋์์ ๋ฐ๋ ๊ฒ์ ์ง์ํ๊ธฐ(์ปค๋ฎค๋ํฐ๋ ๋๋๋ก ํผํ๊ธฐ)
- ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ ๊ธฐ๋ฅ๋ชฉ๋ก์ ๋ง๋ค๊ณ , ๊ธฐ๋ฅ ๋จ์๋ก commit ํ๊ธฐ
- commit ์ปจ๋ฒค์ ์งํค๊ธฐ
ํ๋ฆฌ์ฝ์ค, ๋๋ ์ด๋ฐ๋ ์์ด์๊ตฌ๋(?)
1์ฃผ์ฐจ ํผ๋๋ฐฑ๊ณผ ํจ๊ป ์ ๋ฌํด์ฃผ์ ๋ด์ฉ์ ํตํด.. ๋น๋ก์ ํ๋ฆฌ์ฝ์ค ๋ฏธ์
์๊ตฌ ์ฌํญ์ ์ด๋ค ์์ผ๋ก ๊ตฌํํ๋์ง ์ ์ ์์๋ค. ์๊ตฌ์ฌํญ์ ํตํด ๊ธฐ๋ฅ๋ชฉ๋ก์ ๋์ถํ๋ ๊ฒ์ด ์ฌ์ ํ ์ด๋ ต๊ณ ์ต์ํ์ง ์์์ง๋งใ
ใ
์ด๋ฒ ์ฃผ์ฐจ์์๋ ์ต๋ํ ์ฃผ์ด์ง ์๊ตฌ์ฌํญ์์ ๊ธฐ๋ฅ๋ชฉ๋ก์ ๋์ถํ๋๋ก ์๊ฐํ๋ ์ฐ์ต์ ๋ง์ ์๊ฐ์ ํฌ์ํ๋ ๊ฒ ๊ฐ๋ค. ์ผ๋ค ์ง์ ๋ค๋ฅผ ๊ฑฐ์ 100๋ฒ์ด์ ๋ฐ๋ณตํ๋ ๊ฒ ๊ฐ์๋ฐใ
ใ
ใ
์ง์ง.. ์ด๋ ๊ฒ ํ๋ค ์ค์ ๋ชฐ๋์ต๋๋ค.. (๋๋ฌด ๋ง๋งํ๊ฒ ์๊ฐํ๋ค์๐คง)
๊ธฐ๋ฅ ๋ชฉ๋ก์ ๋์ถํ๊ธฐ๊น์ง
์ด๋์ ๋ ๊ณ ๋ฏผ์ ๋๋ด๊ณ ๋ ํ ์ฃผ์ด์ง ๊ธฐ๋ฅ ์๊ตฌ์ฌํญ์ ์ ๋ฆฌํ๋ฉฐ ํ๋ฆ์ ์๊ฐํ๊ณ , ๊ทธ ๊ณผ์ ์์ ๋ฌถ์ ํ๋์ ๊ธฐ๋ฅ์ด ๋ณด์ด๋ฉด ๋ฌถ์ด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋ชฉ๋ก์ ์์ฑํ๋ค. ๊ฐ์ฒด์งํฅ๊ณผ ํน์ ํจํด์ ์ง์ฐฉํ์ง ์์๋ ์์ฐ์ค๋ฝ๊ฒ ๊ฐ์ฒด ๋จ์์ ๊ฒฐ๊ณผ๊ฐ ๋์์ ๋๋ผ์ด ๊ฒฝํ์ ํ ์ ์์๋ค. ์ปค๋ฎค๋ํฐ์์ ๋ง์ ๋ถ๋ค์ด ํจํด ์ค์ฌ์ ์ผ๋ก ํด์ผํ๋์ง ๊ณ ๋ฏผ์ด ๋ง์ ๊ฒ ๊ฐ์๋ฐ ์ฒ์๋ถํฐ ํจํด์ด๋ผ๋ ์ด๋ก ์์ฒด์ ์ง์คํ๋ฉด ๋ง์์ ์ธ๋ฆฌ๋ ๊ฒฝํ์ ํ๊ธด ์ด๋ ต๋ค. ํน์๋ผ๋ ์ด ๊ธ์ ๋ณด๋ ๋๋ฃ๊ฐ ํจํด์ ๋ํด ๊ณ ๋ฏผํ๋ค๋ฉด, ๊ณผ๊ฐํ ๋งํด์ฃผ๊ณ ์ถ๋ค. "ํจํด์ ๋์ค์ ๊นจ๋ซ๋ ๊ฒ๐๋ฏธ๋ฆฌ ์๋ฉด ์ฌ๋ฏธ์์ต๋๋ค"
๋ฉ์๋ ๋ค์ด๋ฐ, ์ฐฝ์์ ๊ณ ํต
๊ธฐ๋ฅ ๋ชฉ๋ก์ ๋์ถํ๊ณ ๋ ํ ๋ค์์ผ๋ก ๋ค์ด๋ฐ์๋ ๋ง์ ์๊ฐ์ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ๋ค. '๋'๋ง ์ดํดํ ์ ์๋ ๋ด์ฉ์ด ์๋๋ผ, ์ด๋ฆ๋ง ๋ณด๊ณ ๋ ๋ด์ฉ์ ์ ์ถํ ์ ์๋๋ก ์ฃผ์์ด ํ์์๋ ์ง๊ด์ ์ธ ์ด๋ฆ์ ์ง๊ธฐ ์ํด ์ฌ๋ฌ๊ฐ์ง ๋จ์ด๋ฅผ ์กฐํฉํด๋ณด๊ณ ์ด๋ฆฌ์ ๋ฆฌ ์๊ฐํ๋๋ผ ํ๋ฃจ๋ฅผ ๊ผฌ๋ฐ ๋ณด๋๋ค. ์ปค๋ฎค๋ํฐ๋ฅผ ์ ๊น ์ฐธ๊ณ ํ๋ ๋ค๋ฅธ ๋ถ๋ค๋ ์ฐฝ์์ ๊ณ ํต์ ํจ๊ป ๊ฒช๊ณ ๊ณ์ ๊ฒ ๊ฐ์์ ๋ด์ ์น๋ฐ๊ฐ์ด ์๊ฒจ๋ฒ๋ ธ๋คใ
(์์งํ ์ด๋ ๋๋ฌด ํ๋ฌดํ๊ณ , ์ด์ ๋๋ ๋ชปํ๋?๋ผ๋ ์๊ฐ์ด ๋ง์ด๋ค์ด์.. ์ ๋ ๋ง์๊ณ ์์ ์ด์ง ํ๊ธฐ๋ ํ์ต๋๋ค)
TDD๋ฅผ ์์๊ฐ๋ค.
์์ฆ ํ์ฐธ ํซํ TDD, ํ
์คํธ ์ค์ฌ ์ค๊ณ. ์ด๋ฒ ์ฃผ์ฐจ๋ฅผ ํตํด ์ฐ๋จน ํด๋ดค๋ค๊ณ ์๊ฐํ๋ค. ์ ํํ๊ฒ๋ ์ ์จ์ผํ๋์ง ๊ทธ ์ด์ ์ ๋๋ ์๊ฒ ๋์๋ค. TDD ๊ด๋ จ ๋ด์ฉ์ ์๊ธฐ๊ฐ ๊ธธ์ด์ง ๊ฒ ๊ฐ์ ์ถํ์ ํฌ์คํ
์ผ๋ก ๋ค์ ๊ฐ์ ธ์ค๋ ค๊ณ ํ๋ค. (์ฝ์ด์ฃผ์ค๊ฑฐ์ฃ ?๐)
๋ฏธ์ <์๋์ฐจ ๊ฒฝ์ฃผ> ์ ํ๋ฆฌ๋ทฐ
1) ๋ฌธ์์ด ์์๋ก ๊ด๋ฆฌํ๊ธฐ
1์ฃผ์ฐจ์์ ๋ฌธ์์ด์ ๊ทธ๋๋ก ์์ค ๋ด๋ถ์ ํฌํจ์์ผฐ๋๋, ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ๋ ๊ฒ ์ด๋ ๋๋ ํผ์ด๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์๋ค. ๋ํ ๋ค๋ฅธ ๋ถ๋ค์ ์ฝ๋๋ฅผ ๋ฆฌ๋ทฐํ๋ฉฐ ๋ฌธ์์ด๋ผ๋ฆฌ ๋ฌถ์ด์ฃผ๋ ํจ์ฌ ๋ ๊ฐ๋ ์ฑ์ด ์ข์์ ๋๊ผ๋ค. ๋ชจ๋ฅด๊ณ ์๋ ๋ด์ฉ์ ์๋์ง๋ง, ๋ด๊ฐ ๋์ณค๋ ๋ถ๋ถ์ด๋ผ ์์ฐจ! ์ถ์๋ค. ๊ทธ๋์ ์ด๋ฒ์ฃผ์ฐจ๋ถํฐ๋ ํด๋น ๋ถ๋ถ์ ์์ง์๊ณ ๋ฐ๋ก ์ ์ฉํด๋ณด์๋ค.
์ด ๋ฌธ์์ด์ ์ฝ์์์ ์ถ๋ ฅ๋๋ ์๋ฌ ๋ฉ์์ง์ด๋ค. ์๋ฌ ๋ฉ์์ง์ ๊ฒฝ์ฐ ํฐ ํ๋ก์ ํธ์์๋ ์ค์ํ๊ฒ ๊ด๋ฆฌ๋๋ ์์ ์ค ํ๋์ด๋ค. ๋๋ฌธ์ ๋ฌธ์์ด, ์์ ๋ฑ ๊ณตํต์ผ๋ก ๊ด๋ฆฌ๊ฐ ํ์ํ ๋ ์๋ค์ ๋ฌถ์ด์ฃผ๋ ์ต๊ด์ ๊ฐ์ง๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
package racingcar.constant;
public class StringError {
public static final String REQUIRED_CAR_NAME = "์๋์ฐจ ์ด๋ฆ์ ์
๋ ฅํด์ผ ํฉ๋๋ค.";
public static final String REQUIRED_NUMBER = "์ซ์๋ง ์
๋ ฅํด์ผ ํฉ๋๋ค.";
public static final String CAR_NAME_TOO_LONG = "์๋์ฐจ ์ด๋ฆ์ 5์ ์ดํ๋ง ๊ฐ๋ฅํฉ๋๋ค.";
}
2) ์ปจํธ๋กค๋ฌ๋ ๋ชจ๋ ํ๋ฆ์ ์ปจํธ๋กคํ์
์ด๋ฒ ๋ฏธ์ ์์ ํจํค์ง๋ฅผ ๋๋๋ฉฐ ๊ฐ์ฅ ์ค์ํ๊ฒ ์๊ฐํ๋ ๋ถ๋ถ์ ์ปจํธ๋กค๋ฌ์ ์ญํ ์ด์๋ค. ์ ๋ง ๋ง๊ทธ๋๋ก ์ปจํธ๋กค๋ฌ๋ ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ ์ปจํธ๋กค ํด์ผํ๋ค๊ณ ์๊ฐํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ปจํธ๋กค๋ฌ๋ ์ ๋ฐ์ ์ธ ํ๋ฆ์ ์ฃผ๋ํด์ผํ๋ค๊ณ ํ๋จํ๋ค. ์ง๋ ๊ณผ์ ์๋ ๋ฌ๋ฆฌ ์ปจํธ๋กค๋ฌ์์ ์ปจํธ๋กคํ ํ๋์ ๋ฉ์๋ run()์ ๋๊ณ ๊ทธ ์์์ ์ฃผ์์ด ์์ด๋ ํ๋ฆ์ ์ฝ๊ฒ ์ฝ์ด๋ผ ์ ์๋๋ก ๋ ธ๋ ฅํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ค์์ผ๋ก๋ ๋ญ๋นํ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ง ์๊ฒ ๋ค๊ณ ๋ค์งํ๋ค. ๋ฐ๋ผ์ ๊ฒ์์ ์งํํ๋ฉฐ ๋จ ํ๋์ ์ปจํธ๋กค๋ฌ ๊ฐ์ฒด๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ๊ณ ๋ คํ๊ณ , ์ฑ๊ธํค์ผ๋ก ๊ตฌํํด์ฃผ์๋ค. ์ด ์ฑ๊ธํค ๋๋ฌธ์.. ํ ์คํธ์ผ์ด์ค๋ฅผ ์์ฑํ๋ฉฐ ์ ์ ๋ฐฉํฉํ์ง๋ง, ์ปจํธ๋กค๋ฌ๋ ์ปจํธ๋กค๋ฌ์ผ ๋๊ฐ ๊ฐ์ฅ ์์ด์ธ๋ฆฐ๋ค๊ณ ์๊ฐํ๋ค..!
(ํน์ ๋ค๋ฅธ ์๊ฒฌ์ด๋ ์๋ชป์๊ฐํ๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ์ธ์ ๋ ์ฝ๋ฉํธ ๋จ๊ฒจ์ฃผ์ธ์๐)
package racingcar.controller;
import camp.nextstep.edu.missionutils.Console;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import racingcar.domain.Car;
import racingcar.domain.NumberGenerator;
import racingcar.view.UserInput;
import racingcar.view.UserOutput;
public class RacingGame {
private static RacingGame instance; // ๊ฒ์์ ์งํํ ์ฑ๊ธํค ์ธ์คํด์ค
private final List<Car> cars;
private RacingGame() {
cars = new ArrayList<>();
}
private static RacingGame getInstance() {
if (instance == null) {
instance = new RacingGame();
}
return instance;
}
public static void run() {
UserOutput.askForCarNames();
String[] carNames = UserInput.readCarName();
RacingGame game = RacingGame.getInstance();
game.addCar(carNames);
UserOutput.askForTryCount();
int rounds = UserInput.readRound();
game.play(rounds);
List<String> result = game.getWinners();
UserOutput.showWinners(result);
Console.close();
}
...
}
run() ๋ฉ์๋๋ฅผ ์ ์๋ณด๋ฉด, ์ฃผ์์ด ์๋๋ผ๋ ์ธ๋ถ ์ฝ๋๋ฅผ ๋ณด์ง ์๋๋ผ๋ ์ผ๋จ ํ์ค์ฉ ์ฝ์ด๋๊ฐ ์ ์๋ค.
//์ฌ์ฉ์์ ์
๋ ฅ์ ๋ฐ์ ์๋์ฐจ ์ด๋ฆ์ ๋ฌผ์ด๋ณธ๋ค.
UserOutput.askForCarNames();
//์ฌ์ฉ์์๊ฒ ์
๋ ฅ๋ฐ์ ์๋์ฐจ ์ด๋ฆ์ ์ฝ์ด String[]์ ์ ์ฅํ๋ค.
String[] carNames = UserInput.readCarName();
//๋ ์ด์ฑ๊ฒ์์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ค๋ค.
RacingGame game = RacingGame.getInstance();
//๊ฒ์ ๊ฐ์ฒด์ ์๋์ฐจ ์ด๋ฆ์ ์ถ๊ฐํ์ฌ ๊ฒ์ํ ์๋์ฐจ๋ฅผ ์ถ๊ฐํ๋ค.
game.addCar(carNames);
//์๋ํ์๋ฅผ ๋ฌป๋ ์ถ๋ ฅ๋ฌธ์ ์ฌ์ฉ์์๊ฒ ์ถ๋ ฅํด์ค๋ค.
UserOutput.askForTryCount();
//์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๊ฒ์ ๋ผ์ด๋ ํ์๋ฅผ ์ฝ์ด int์ ์ ์ฅํ๋ค.
int rounds = UserInput.readRound();
//ํ์๋งํผ ๊ฒ์์ ์งํํ๋ค.
game.play(rounds);
//๊ฒ์์ ์ฐ์น์ ๋ชฉ๋ก์ ๊ฐ์ ธ์ result์ ์ ์ฅํ๋ค.
List<String> result = game.getWinners();
//์ฌ์ฉ์์๊ฒ ๊ฒ์ ์ฐ์น์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
UserOutput.showWinners(result);
//์ฌ์ฉํ Console ๊ฐ์ฒด๋ฅผ ๋ซ๋๋ค.
Console.close();
3) Main()์ ์ญํ
์๋ฐ ์ดํ๋ฆฌ์ผ์ด์ ์์ main์ ์์ฃผ ์ค์ํ ์ญํ ์ ํ๋ค. ์ฌ์ค ์์์ ๋งํ ์ปจํธ๋กค๋ฌ ์ฝ๋๋ฅผ main()์ ์ ์ด๋์ด๋ ์ถฉ๋ถํ ์ข์ ์ฝ๋๋ผ๊ณ ๋ณผ ์ ์๋ค. ๊ทธ๋ฌ๋, ๋ด๊ฐ ๊ตณ์ด ์ปจํธ๋กค๋ฌ๋ก ๋ถ๋ฆฌํ๊ณ Main()์ ๊ฐ๋จํ๊ฒ ์ด ์ด์ ๋ main()์ ํ๋ก๊ทธ๋จ์ ์คํํ๋ ๊ฒ์ด ์ญํ ์ด๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฆ, ๊ฐ์ฒด๋ ๊ฐ์์ ์ญํ ์ด ์๊ณ ๊ทธ ์ญํ ์ ์ต๋ํ ์๊ฒ ๋๋์ด 1๊ฐ์ ์ฑ ์๋ง ์ง๋๋ก ํ๋ ๊ฒ์ด ๋ชฉํ๋ค. ๊ทธ๋ฐ๋ฐ main()์ ์ด๋ฏธ ์ดํ๋ฆฌ์ผ์ด์ ์ด๋ผ๋ ์คํ์ ์ญํ ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ํ๋ก๊ทธ๋จ ์ ์ฒด์ ํ๋ฆ์ ๋ด๋ ๊ฒ์ด ๋ถ๋ด์ค๋ฌ์ ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ๋ด ์ทจํฅ์ด๊ธฐ๋ ํ๋ค๐คใ ใ
package racingcar;
import racingcar.controller.RacingGame;
public class Application {
public static void main(String[] args) {
RacingGame.run();
}
}
์ด๋ฒ ์ฃผ์ฐจ๋ ์ฝ์ง ์์ต๋๋ค... ๊ฐ๋ฐ์์ ๊ธธ์ ๋ฉ๊ณ ๋ ํํ๋ค์...
๊ทธ๋๋ ๋ค๋ค ๊ณ ์๋ง์ผ์ จ์ต๋๋ค :)
๋.
'Study > ์ฐ์ํํ ํฌ์ฝ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฐํ ์ฝ] 3์ฃผ์ฐจ ํ๊ณ ๋ก, ๋ ๋ค๋ฅธ ์์ (0) | 2023.11.23 |
---|---|
๋น ๋ฅด๊ฒ ์คํจํ๊ธฐ, ์ด์ฐจํผ ํ ๋ฒ์ ์ฑ๊ณตํ ์ ์๋ค. (0) | 2023.11.02 |
[์ฐํ ์ฝ] 1์ฃผ์ฐจ ํ๋ฆฌ์ฝ์ค ํ๊ณ ๋ก (1) | 2023.10.28 |