Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
68f468c
docs(README): README μž‘μ„±
HyunjeLee Apr 16, 2025
db22f39
feat(): λͺ©ν‘œκ°’ 생성 κΈ°λŠ₯ κ΅¬ν˜„
HyunjeLee Apr 16, 2025
4fd920a
feat(): 야ꡬ κ²Œμž„ μ‹œμž‘ μ•ˆλ‚΄ 문ꡬ 좜λ ₯ κΈ°λŠ₯ κ΅¬ν˜„
HyunjeLee Apr 16, 2025
4ade51f
docs(README): README μˆ˜μ •
HyunjeLee Apr 16, 2025
b515286
docs(README): μž…λ ₯값에 λŒ€ν•œ 검사 κΈ°λŠ₯ μΆ”κ°€
HyunjeLee Apr 16, 2025
a7bad90
refactor(): NUM_SIZE둜 κΈ°μ‘΄ size λŒ€μ²΄
HyunjeLee Apr 16, 2025
54f0d21
docs(README): README μˆ˜μ •
HyunjeLee Apr 16, 2025
0dd8c67
feat(): 숫자 μž…λ ₯ μš”μ²­ κΈ°λŠ₯ κ΅¬ν˜„
HyunjeLee Apr 16, 2025
9b48255
feat(): μž…λ ₯κ°’ 검사 κΈ°λŠ₯ κ΅¬ν˜„
HyunjeLee Apr 16, 2025
c33df81
refactor(): λ°°μ—΄λͺ… μˆ˜μ • (λ‹¨μˆ˜ν˜• -> λ³΅μˆ˜ν˜•)
HyunjeLee Apr 16, 2025
b95ad3d
feat(): μž…λ ₯κ°’κ³Ό λͺ©ν‘œκ°’ 비ꡐ μ—°μ‚° κΈ°λŠ₯ κ΅¬ν˜„
HyunjeLee Apr 16, 2025
4891135
feat(): μ—°μ‚° κ²°κ³Ό 좜λ ₯ κΈ°λŠ₯ κ΅¬ν˜„
HyunjeLee Apr 16, 2025
f965b4c
fix(): ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ λ³€μˆ˜ κ³ μ • μ½”λ“œ μ‚­μ œ
HyunjeLee Apr 16, 2025
d557496
feat(): μ‹€νŒ¨ μ‹œ `숫자 μž…λ ₯ μš”μ²­`λΆ€ν„° 반볡 κΈ°λŠ₯ κ΅¬ν˜„
HyunjeLee Apr 16, 2025
3e69c01
feat(): 성곡 μ‹œ μž…λ ₯ μš”μ²­ κΈ°λŠ₯ κ΅¬ν˜„
HyunjeLee Apr 16, 2025
33e7d9d
feat(): 성곡 μ‹œ μž…λ ₯값에 λ”°λ₯Έ 반볡 κΈ°λŠ₯ κ΅¬ν˜„
HyunjeLee Apr 16, 2025
04ccc5d
refactor(): κΈ°μ‘΄ intκ°’ 숫자 -> BaseballNumberκ°’ 숫자둜 λ¦¬νŒ©ν† λ§
HyunjeLee Apr 17, 2025
d5751a7
docs(README): μž…λ ₯κ°’ 검사 쀑 λˆ„λ½λœ 0 검사 μΆ”κ°€
HyunjeLee Apr 17, 2025
4c2b2dd
fix(): μž…λ ₯κ°’ 검사 쀑 λˆ„λ½λœ 0 검사 μΆ”κ°€
HyunjeLee Apr 17, 2025
112c522
chore(): λΆˆν•„μš” 주석 및 import 제거
HyunjeLee Apr 17, 2025
a7b339f
refactor(): κΈ°μ‘΄ intκ°’μœΌλ‘œ λ‹€λ£¨λ˜ statusλ₯Ό enumν™”
HyunjeLee Apr 17, 2025
77d0740
fix(): λˆ„λ½λœ strike/ball μƒνƒœ μ΄ˆκΈ°ν™” μ½”λ“œ μΆ”κ°€
HyunjeLee Apr 17, 2025
fda9895
refactor(): μ‚¬μš©μž 숫자 μž¬μž…λ ₯ μ‹œ 기쑴에 μƒμ„±λœ μ‚¬μš©μž 숫자 객체 제거
HyunjeLee Apr 17, 2025
b6682d0
refactor(): MVC νŒ¨ν„΄μœΌλ‘œ λ¦¬νŒ©ν† λ§ & κ·Έ μ™Έ Util νŒ¨ν‚€μ§€λ‘œ 뢄리
HyunjeLee Apr 17, 2025
c14b790
fix(checkBall()): ball 검사 쀑 잘λͺ»λœ 쑰건 μˆ˜μ •
HyunjeLee Apr 26, 2025
6cce9fc
refactor(checkBall()): 가독성을 κ³ λ €ν•΄ 쑰건문 λ‚΄ λ³€μˆ˜ μœ„μΉ˜ λ³€κ²½
HyunjeLee Apr 26, 2025
a492d6b
refactor(isRestart()): μ˜ˆμ™Έμ²˜λ¦¬ 방법 λ¦¬νŒ©ν† λ§
HyunjeLee Apr 26, 2025
fc1b2f7
docs(): todo 주석 μΆ”κ°€
HyunjeLee Apr 26, 2025
7c83502
Merge branch 'master' into hyunje
HyunjeLee Apr 26, 2025
edd9b2e
test(): μ½”λ“œμ— 맞게 ν…ŒμŠ€νŠΈμ½”λ“œ μˆ˜μ • 및 μž‘μ„±
HyunjeLee Apr 26, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 37 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,37 @@
# baseball
# κΈ°λŠ₯ λͺ©λ‘

## λͺ©ν‘œκ°’ 생성 μ—°μ‚°

- `Random` 클래슀λ₯Ό μ΄μš©ν•œ μž„μ˜μ˜ 수 3개 생성 (1~9)
- μΆ”ν›„ 연산을 μœ„ν•΄ intν˜• λ°°μ—΄λ‘œ 생성

## 야ꡬ κ²Œμž„ μ‹œμž‘ μ•ˆλ‚΄ 문ꡬ 좜λ ₯

## 숫자 μž…λ ₯ μš”μ²­

## μž…λ ₯값에 λŒ€ν•œ 검사

- 잘λͺ»λœ 값에 λŒ€ν•œ μ˜ˆμ™Έ 처리 `IllegalArgumentException` 호좜 ν›„ μ’…λ£Œ

- 곡백 검사 -> 처음 μž…λ ₯κ°’ μ €μž₯ μ‹œ λͺ¨λ“  곡백 제거 // 4 5 6 κ°€λŠ₯ // 456 κ°€λŠ₯ // 4 56 κ°€λŠ₯
- νƒ€μž… 검사 -> μ˜ˆμ™Έ
- μ‚¬μ΄μ¦ˆ 검사 -> μ˜ˆμ™Έ
- 0 검사 (λ²”μœ„ 검사) -> μ˜ˆμ™Έ

## μž…λ ₯κ°’κ³Ό λͺ©ν‘œκ°’ 비ꡐ μ—°μ‚°

- μž…λ ₯κ³Ό λͺ©ν‘œ κ°„ κ°’ κ³Ό μœ„μΉ˜κ°€ κ°™λ‹€λ©΄ 슀트라이크
- κ°’λ§Œ κ°™λ‹€λ©΄ λ³Ό
- λ‘˜ λ‹€ λ‹€λ₯΄λ‹€λ©΄ 미슀

## μ—°μ‚° κ²°κ³Ό(힌트) 좜λ ₯

## μ‹€νŒ¨ μ‹œ `숫자 μž…λ ₯ μš”μ²­`λΆ€ν„° 반볡

## 성곡 μ‹œ μž…λ ₯ μš”μ²­

## 성곡 μ‹œ μž…λ ₯값에 λ”°λ₯Έ 반볡

- 1의 경우 ν”„λ‘œκ·Έλž¨ μ²˜μŒλΆ€ν„° 반볡
- 2의 경우 ν”„λ‘œκ·Έλž¨ μ’…λ£Œ

4 changes: 3 additions & 1 deletion src/main/java/baseball/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package baseball;

import baseball.controller.BaseballGameController;

public class Application {
public static void main(String[] args) {
// TODO: μ½”λ“œ κ΅¬ν˜„
new BaseballGameController().run();
}
}
33 changes: 33 additions & 0 deletions src/main/java/baseball/controller/BaseballGameController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package baseball.controller;

import baseball.model.BaseballGame;
import baseball.view.InputView;
import baseball.view.OutputView;

import java.util.Scanner;

public class BaseballGameController {
private final BaseballGame game = new BaseballGame();
private final InputView inputView = new InputView();
private final OutputView outputView = new OutputView();
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

μ»¨νŠΈλ‘€λŸ¬μ—μ„œ ν•„λ“œμ— λ‹€λ₯Έ 클래슀 객체λ₯Ό μƒμ„±ν•œ μ΄μœ κ°€ μžˆλ‚˜μš”?
ν˜„μž¬ 방식이 잘λͺ»λœ 방식인 건 μ•„λ‹ˆκ³ , 본인만의 μ˜λ„κ°€ μžˆμ—ˆλ‹€λ©΄ 상관은 μ—†μŠ΅λ‹ˆλ‹€!


private static final int START = 1;
private static final int END = 9;

public void run() {
game.createTargetNumber(START, END);
outputView.printStartMessage();

while (true) {
game.reset(); // targetNumber의 μƒνƒœ μ΄ˆκΈ°ν™” 및 이전 userNumber free
inputView.getUserNumber(game);
game.match();
outputView.printResult(game); //todo: ball, strike 연산을 viewν΄λž˜μŠ€μ—μ„œ?
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OutputView μ—μ„œ ν•˜λŠ” 것은 큰 연산이 μ•„λ‹Œ 쑰건 λΆ„κΈ°λΌμ„œ 크게 상관은 μ—†λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.
λ‹€λ§Œ μ‹ κ²½ 쓰이신닀면 쑰금 κΉ”λ”ν•˜κ²Œ μˆ˜μ •μ€ ν•΄λ³Ό 수 μžˆμ„ 것 κ°™λ„€μš”


if (game.getStatus() == baseball.model.GameStatus.SUCCESS) { // todo: 이것도 λ”°λ‘œ ν•¨μˆ˜λ‘œ 빼야될 λ“―
if (outputView.isRestart(game)) continue; // todo: restart 연산을 viewν΄λž˜μŠ€μ—μ„œ?
break;
}
}
}
}
81 changes: 81 additions & 0 deletions src/main/java/baseball/model/BaseballGame.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package baseball.model;

import java.util.Random;

public class BaseballGame {
private static final int NUM_SIZE = 3;

BaseballNumber[] targetNumbers;
BaseballNumber[] userNumbers;

GameStatus status;

public void createTargetNumber(int start, int end) {
targetNumbers = new BaseballNumber[NUM_SIZE];
for (int i = 0; i < NUM_SIZE; i++) {
targetNumbers[i] = new BaseballNumber(new Random().nextInt(end) + start);
}
}

public void createUserNumbers(String input) {
userNumbers = new BaseballNumber[NUM_SIZE];
for (int i = 0; i < NUM_SIZE; i++) {
int inputNumber = Integer.parseInt(String.valueOf(input.charAt(i)));
userNumbers[i] = new BaseballNumber(inputNumber);
}
}


public void match() {
checkStrike();
checkBall();
}

private void checkStrike() {
for (int index = 0; index < NUM_SIZE; index++) {
if (userNumbers[index].getValue() == targetNumbers[index].getValue()) {
userNumbers[index].setStrike(true);
targetNumbers[index].setStrike(true);
}
}
}

private void checkBall() {
for (int targetIndex = 0; targetIndex < NUM_SIZE; targetIndex++) {
if (targetNumbers[targetIndex].isStrike()) continue;
for (int userIndex = 0; userIndex < NUM_SIZE; userIndex++) {
if (userNumbers[userIndex].isBall()) continue;
if (targetNumbers[targetIndex].getValue() == userNumbers[userIndex].getValue()) {
targetNumbers[userIndex].setBall(true);
userNumbers[userIndex].setBall(true);
break;
}
}
}
}

public void reset() {
for (BaseballNumber targetNumber: targetNumbers) {
targetNumber.setStrike(false);
targetNumber.setBall(false);
}

userNumbers = null;
}

public BaseballNumber[] getTargetNumbers() {
return targetNumbers;
}

public GameStatus getStatus() {
return status;
}

public void setStatus(GameStatus status) {
this.status = status;
}

public static int getNumSize() {
return NUM_SIZE;
}
}
33 changes: 33 additions & 0 deletions src/main/java/baseball/model/BaseballNumber.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package baseball.model;

// vo class
public class BaseballNumber {
private final int value;

private boolean strike = false;
private boolean ball = false;

public BaseballNumber(int value) {
this.value = value;
}

public int getValue() {
return value;
}

public boolean isStrike() {
return strike;
}

public boolean isBall() {
return ball;
}

public void setStrike(boolean strike) {
this.strike = strike;
}

public void setBall(boolean ball) {
this.ball = ball;
}
}
7 changes: 7 additions & 0 deletions src/main/java/baseball/model/GameStatus.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package baseball.model;

public enum GameStatus {
FAIL,
SUCCESS,
RESTART
}
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

κ²Œμž„ μƒνƒœλ₯Ό enum 클래슀둜 κ΅¬λΆ„ν•œ 게 μ’‹λ„€μš”~

14 changes: 14 additions & 0 deletions src/main/java/baseball/util/Message.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package baseball.util;

public class Message {
public static final String MESSAGE_START = "숫자 야ꡬ κ²Œμž„μ„ μ‹œμž‘ν•©λ‹ˆλ‹€.";
public static final String MESSAGE_INPUT_PROMPT = "숫자λ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš” : ";
public static final String MESSAGE_INPUT_ERROR = "1~9 사이 3개의 숫자λ₯Ό μž…λ ₯ν•΄μ£Όμ„Έμš” !!";
public static final String MESSAGE_MISS = "미슀";
public static final String MESSAGE_STRIKE_ONLY_FORMATTED = "%d슀트라이크";
public static final String MESSAGE_BALL_ONLY_FORMATTED = "%dλ³Ό";
public static final String MESSAGE_BALL_STRIKE_FORMATTED = "%d볼 %d슀트라이크";
public static final String MESSAGE_SUCCESS_FORMATTED = "%d개의 숫자λ₯Ό λͺ¨λ‘ λ§žνžˆμ…¨μŠ΅λ‹ˆλ‹€!";
public static final String MESSAGE_RESTART_PROMPT = "κ²Œμž„μ„ μƒˆλ‘œ μ‹œμž‘ν•˜λ €λ©΄ 1, μ’…λ£Œν•˜λ €λ©΄ 2λ₯Ό μž…λ ₯ν•˜μ„Έμš”.";
public static final String MESSAGE_RESTART_ERROR = "1 λ˜λŠ” 2λ₯Ό μž…λ ₯ν•˜μ„Έμš” !!";
}
17 changes: 17 additions & 0 deletions src/main/java/baseball/util/Validator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package baseball.util;

import baseball.model.BaseballGame;

public class Validator {
public static void inputValidate(String input) {
try {
Integer.parseInt(input);
if (input.contains("0") || input.length() != BaseballGame.getNumSize()) {
throw new IllegalArgumentException();
}
} catch (Exception e) {
System.out.println(Message.MESSAGE_INPUT_ERROR);
throw new IllegalArgumentException();
}
}
}
19 changes: 19 additions & 0 deletions src/main/java/baseball/view/InputView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package baseball.view;

import baseball.model.BaseballGame;
import baseball.util.Message;
import baseball.util.Validator;

import java.util.Scanner;

public class InputView {
public void getUserNumber(BaseballGame baseballGame) {
System.out.print(Message.MESSAGE_INPUT_PROMPT);
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine().replaceAll("\\s+", "");

Validator.inputValidate(input);

baseballGame.createUserNumbers(input);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MVC νŒ¨ν„΄μ—μ„œλŠ” 뷰와 λͺ¨λΈμ΄ μ§μ ‘μ μœΌλ‘œ μƒν˜Έμž‘μš© ν•˜λ©΄ μ•ˆλ©λ‹ˆλ‹€.
μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ„ μ μš©ν•œ μ΄μœ κ°€ 각 λ ˆμ΄μ–΄μ˜ 역할을 κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄μ„œμΈλ°,
ν˜„μž¬ μ½”λ“œμ—μ„œλŠ” λ·°κ°€ λͺ¨λΈμ— μ§μ ‘μ μœΌλ‘œ μ˜μ‘΄ν•˜κ²Œ λ˜μ–΄μ„œ 결합도가 λ†’μ•„μ§€κ²Œ λ©λ‹ˆλ‹€.
이처럼 μž‘μ„±ν•˜λ©΄ μƒκΈ°λŠ” λ¬Έμ œμ μ€

  • ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κΈ° νž˜λ“€λ‹€.
  • 관심사 뢄리가 μ•ˆλœλ‹€.
  • λ·°λ₯Ό λ³€κ²½ν•  μ‹œ λͺ¨λΈλ„ 같이 λ³€κ²½ν•΄μ•Όν•  수 있고, λͺ¨λΈ λ³€κ²½μ‹œ λ·°λ₯Ό 같이 λ³€κ²½ν•΄μ•Ό ν•  μˆ˜λ„ μžˆλ‹€.

μ§€κΈˆ μƒκ°λ‚˜λŠ” 건 이정도가 있고, input을 μ»¨νŠΈλ‘€λŸ¬μ—μ„œ λ°›κ³  μ»¨νŠΈλ‘€λŸ¬μ—μ„œ λͺ¨λΈλ‘œ μ „λ‹¬ν•˜λŠ” λ°©ν–₯을 κ³ λ €ν•΄ λ³΄μ„Έμš”!

}
}
68 changes: 68 additions & 0 deletions src/main/java/baseball/view/OutputView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package baseball.view;

import baseball.model.BaseballGame;
import baseball.model.BaseballNumber;
import baseball.model.GameStatus;
import baseball.util.Message;

import java.util.Scanner;

public class OutputView {
public void printStartMessage() {
System.out.println(Message.MESSAGE_START);
}

public void printResult(BaseballGame game) {
int strike = 0;
int ball = 0;

for (BaseballNumber targetNumber : game.getTargetNumbers()) {
if (targetNumber.isStrike()) {
strike++;
continue;
}
if (targetNumber.isBall()) {
ball++;
}
}

if (ball == 0 && strike == 0) { // todo: 연산을 viewν΄λž˜μŠ€μ—μ„œ?
game.setStatus(GameStatus.FAIL);
System.out.println(Message.MESSAGE_MISS);
} else if (ball == 0) {
game.setStatus(GameStatus.FAIL);
System.out.println(String.format(Message.MESSAGE_STRIKE_ONLY_FORMATTED, strike));
if (strike == game.getNumSize()) {
game.setStatus(GameStatus.SUCCESS);
System.out.println(String.format(Message.MESSAGE_SUCCESS_FORMATTED, BaseballGame.getNumSize()));
}
} else if (strike == 0) {
game.setStatus(GameStatus.FAIL);
System.out.println(String.format(Message.MESSAGE_BALL_ONLY_FORMATTED, ball));
} else {
game.setStatus(GameStatus.FAIL);
System.out.println(String.format(Message.MESSAGE_BALL_STRIKE_FORMATTED, ball, strike));
}
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

λ³Όκ³Ό 슀트라이크 λͺ¨λ‘ 0인 것은 FAIL둜 νŒλ‹¨ν•œ 건 μ’‹λ‹€κ³  μƒκ°ν•˜λŠ”λ°,
λ³Όμ΄λ‚˜ 슀크라이크 ν•˜λ‚˜λ§Œ 0인 것도 FAIL둜 ν•˜λ‹ˆ λ°”λ‘œ νŒŒμ•…ν•˜κΈ°κ°€ 쑰금 μ–΄λ €μ› μŠ΅λ‹ˆλ‹€.

μ—¬κΈ°μ„œ 성곡과 μ‹€νŒ¨λΌλŠ” 틀을 κΉ¨κ³  쑰금 더 νŒŒμ•…ν•˜κΈ° μ‰¬μš΄ μƒνƒœλ₯Ό λ§Œλ“€μ–΄λ³΄λŠ” 건 μ–΄λ–¨κΉŒμš”?
제 개인적인 생각이라 ν•œ 번 고민만 ν•΄λ³΄μ‹œλŠ” 것을 μΆ”μ²œλ“œλ¦½λ‹ˆλ‹€..

}

public boolean isRestart(BaseballGame game) { // todo: 좜λ ₯뿐 μ•„λ‹ˆλΌ 쑰건 뢄기도 ν•˜κ³  있음..
System.out.println(Message.MESSAGE_RESTART_PROMPT);
Scanner scanner = new Scanner(System.in);
try {
int option = scanner.nextInt();
if (option == 1) {
game.createTargetNumber(1, 9);
game.setStatus(GameStatus.RESTART); // μ˜λ―Έκ°€ μžˆλ‚˜?
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

15번 라인뢀터 μ—¬κΈ°κΉŒμ§€λ„ λ§ˆμ°¬κ°€μ§€λ‘œ 뷰와 λͺ¨λΈμ΄ μ§μ ‘μ μœΌλ‘œ μ—°κ²°λ˜μ–΄ μœ μ§€λ³΄μˆ˜μ„±μ΄ 많이 λ–¨μ–΄μ§€κ²Œ λ©λ‹ˆλ‹€.
MVC νŒ¨ν„΄μ˜ 각 계측 역할을 μ•„λž˜ μ μ–΄λ“œλ¦¬λ‹ˆ ν•œ 번 μ°Έκ³ ν•΄ λ³΄μ‹œλ©΄ μ’‹κ² μŠ΅λ‹ˆλ‹€~

  1. λͺ¨λΈμ€ μ»¨νŠΈλ‘€λŸ¬λ‚˜ 뷰에 μ˜μ‘΄ν•˜λ©΄ μ•ˆλœλ‹€.
    • λͺ¨λΈ 내뢀에 컨트둀러 및 뷰와 κ΄€λ ¨λœ μ½”λ“œκ°€ 있으면 μ•ˆλœλ‹€.
  2. λ·°λŠ” λͺ¨λΈμ—λ§Œ μ˜μ‘΄ν•΄μ•Ό ν•˜κ³ , μ»¨νŠΈλ‘€λŸ¬μ—λŠ” μ˜μ‘΄ν•˜λ©΄ μ•ˆλœλ‹€.
    • λ·° 내뢀에 λͺ¨λΈμ˜ μ½”λ“œλ§Œ μžˆμ„ 수 있고, 컨트둀러의 μ½”λ“œκ°€ 있으면 μ•ˆλœλ‹€.
  3. λ·°κ°€ λͺ¨λΈλ‘œλΆ€ν„° 데이터λ₯Ό 받을 λ•ŒλŠ” μ‚¬μš©μžλ§ˆλ‹€ λ‹€λ₯΄κ²Œ 보여주어야 ν•˜λŠ” 데이터에 ν•œν•΄μ„œλ§Œ λ°›μ•„μ•Ό ν•œλ‹€.
  4. μ»¨νŠΈλ‘€λŸ¬λŠ” λͺ¨λΈκ³Ό 뷰에 μ˜μ‘΄ν•΄λ„ λœλ‹€.
    • 컨트둀러 λ‚΄λΆ€μ—λŠ” λͺ¨λΈκ³Ό 뷰의 μ½”λ“œκ°€ μžˆμ„ 수 μžˆλ‹€.
  5. λ·°κ°€ λͺ¨λΈλ‘œλΆ€ν„° 데이터λ₯Ό 받을 λ•ŒλŠ” λ°˜λ“œμ‹œ μ»¨νŠΈλ‘€λŸ¬μ—μ„œ λ°›μ•„μ•Ό ν•œλ‹€.

return true;
} else if (option == 2) return false;
else {
// 1,2 μ™Έμ˜ 숫자
System.out.println(Message.MESSAGE_RESTART_ERROR);
throw new IllegalArgumentException();
}
} catch (Exception e) { // 잘λͺ»λœ νƒ€μž…
System.out.println(Message.MESSAGE_RESTART_ERROR);
throw e;
}
}
}
22 changes: 11 additions & 11 deletions src/test/java/baseball/ApplicationTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,31 @@
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;

import baseball.model.BaseballGame;
import baseball.model.BaseballNumber;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

public class ApplicationTest {

// TODO: 클래슀λͺ…κ³Ό ν•¨μˆ˜λͺ… λ³€κ²½ κ°€λŠ₯ (RandomNumberGenerator.generate())
@Test
public void 랜덀_숫자_생성_ν•¨μˆ˜λŠ”_1λΆ€ν„°_9κΉŒμ§€μ˜_숫자_3개λ₯Ό_μƒμ„±ν•œλ‹€() {
// TODO: μ‹€μ œ κ΅¬ν˜„μ—μ„œλŠ” RandomNumberGenerator.generate() λ“± μ‹€μ œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  것

List<Integer> numbers = List.of(); // μž„μ‹œ μ½”λ“œ. κ΅¬ν˜„ ν›„ μ•„λž˜ μ½”λ“œλ‘œ λ³€κ²½ν•΄μ£Όμ„Έμš”.
// 예: List<Integer> numbers = RandomNumberGenerator.generate();
BaseballGame baseballGame = new BaseballGame();
baseballGame.createTargetNumber(1,9);
BaseballNumber[] numbers = baseballGame.getTargetNumbers();

assertThat(numbers.size()).isEqualTo(3);
assertThat(numbers.length).isEqualTo(3);

for (Integer number : numbers) {
assertThat(number).isBetween(1, 9);
for (BaseballNumber number : numbers) {
assertThat(number.getValue()).isBetween(1, 9);
}

long distinctCount = numbers.stream().distinct().count();
assertThat(distinctCount).isEqualTo(3);
// long distinctCount = numbers.stream().distinct().count();
// assertThat(distinctCount).isEqualTo(3);
}

// TODO: ν•„μš”μ— 따라 μΆ”κ°€ ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„± κ°€λŠ₯
}