Skip to content

Commit ff8b0a0

Browse files
committed
refactor: BaseballGameConfig를 외부에서 주입받도록 기본 생성자 제거
1 parent 6338514 commit ff8b0a0

10 files changed

Lines changed: 67 additions & 80 deletions

File tree

src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConfig.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,17 @@ public class BaseballGameConfig {
1010
private final int minRange;
1111
private final int maxRange;
1212

13-
public BaseballGameConfig() {
14-
this(DEFAULT_LENGTH, DEFAULT_MIN_RANGE, DEFAULT_MAX_RANGE);
15-
}
16-
1713
public BaseballGameConfig(int length, int minRange, int maxRange) {
1814
validateConfig(length, minRange, maxRange);
1915
this.length = length;
2016
this.minRange = minRange;
2117
this.maxRange = maxRange;
2218
}
2319

20+
public static BaseballGameConfig ofDefault() {
21+
return new BaseballGameConfig(DEFAULT_LENGTH, DEFAULT_MIN_RANGE, DEFAULT_MAX_RANGE);
22+
}
23+
2424
private void validateConfig(int length, int minRange, int maxRange) {
2525
if (length <= 0) {
2626
throw new RuntimeException("길이는 양수여야 합니다.");

src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameConsoleView.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@ public class BaseballGameConsoleView implements TurnBaseGameView {
1616

1717
private final BaseballGameConfig config;
1818

19-
public BaseballGameConsoleView() {
20-
this(new BaseballGameConfig());
21-
}
22-
2319
public BaseballGameConsoleView(BaseballGameConfig config) {
2420
this.config = config;
2521
}
@@ -47,7 +43,7 @@ public void printStart() {
4743
@Override
4844
public TurnInput requestTurnInput() {
4945
System.out.print(REQUEST_INPUT_MESSAGE);
50-
return new BaseballGameTurnInput(Console.readLine());
46+
return new BaseballGameTurnInput(config, Console.readLine());
5147
}
5248

5349
@Override

src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class BaseballGameService implements TurnBaseGameService {
1111
private BaseballNumber answer;
1212

1313
public BaseballGameService(BaseballNumberGenerator baseballNumberGenerator) {
14-
this(new BaseballGameConfig(), baseballNumberGenerator);
14+
this(new BaseballGameConfig(3, 1, 9), baseballNumberGenerator);
1515
}
1616

1717
public BaseballGameService(BaseballGameConfig config, BaseballNumberGenerator baseballNumberGenerator) {

src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameTurnInput.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,17 @@ public class BaseballGameTurnInput implements TurnInput {
99

1010
private final BaseballNumber baseballNumber;
1111

12-
public BaseballGameTurnInput(String input) {
12+
public BaseballGameTurnInput(BaseballGameConfig config, String input) {
1313
valid(input);
14-
this.baseballNumber = createBaseballNumber(input);
14+
this.baseballNumber = createBaseballNumber(config, input);
1515
}
1616

17-
private BaseballNumber createBaseballNumber(String input) {
17+
private BaseballNumber createBaseballNumber(BaseballGameConfig config, String input) {
1818
List<Integer> numbers = new ArrayList<>();
1919
for (char ch : input.toCharArray()) {
2020
numbers.add(ch - '0');
2121
}
22-
return new BaseballNumber(numbers);
22+
return new BaseballNumber(config, numbers);
2323
}
2424

2525
private void valid(String input) {

src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumber.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,6 @@ public class BaseballNumber {
77
private final BaseballGameConfig config;
88
private final List<Integer> numbers;
99

10-
public BaseballNumber(List<Integer> numbers) {
11-
this(new BaseballGameConfig(), numbers);
12-
}
13-
1410
public BaseballNumber(BaseballGameConfig config, List<Integer> numbers) {
1511
this.config = config;
1612
checkLength(numbers);
@@ -39,13 +35,15 @@ private void checkNumbersRange(List<Integer> numbers) {
3935
private void checkNumberRange(int number) {
4036
if (number < config.getMinRange() || config.getMaxRange() < number) {
4137
throw new RuntimeException(
42-
String.format("숫자 범위는 %d 이상 %d 이하여야 합니다. (문제 숫자: %d)", config.getMinRange(), config.getMaxRange(), number));
38+
String.format("숫자 범위는 %d 이상 %d 이하여야 합니다. (문제 숫자: %d)", config.getMinRange(), config.getMaxRange(),
39+
number));
4340
}
4441
}
4542

4643
private void checkLength(List<Integer> numbers) {
4744
if (numbers.size() != config.getLength()) {
48-
throw new RuntimeException(String.format("숫자야구 길이는 %d이어야 합니다.(현재 길이 : %d)", config.getLength(), numbers.size()));
45+
throw new RuntimeException(
46+
String.format("숫자야구 길이는 %d이어야 합니다.(현재 길이 : %d)", config.getLength(), numbers.size()));
4947
}
5048
}
5149

src/main/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/RandomBaseballNumberGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class RandomBaseballNumberGenerator implements BaseballNumberGenerator {
1111
private final BaseballGameConfig config;
1212

1313
public RandomBaseballNumberGenerator() {
14-
this(new BaseballGameConfig());
14+
this(new BaseballGameConfig(3, 1, 9));
1515
}
1616

1717
public RandomBaseballNumberGenerator(BaseballGameConfig config) {

src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballGameServiceTest.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,37 @@
11
package com.kakao.onboarding.precource.dukeyun.baseball.baseball;
22

3-
import static org.assertj.core.api.Assertions.assertThat;
3+
import static org.assertj.core.api.Assertions.*;
44

5-
import com.kakao.onboarding.precource.dukeyun.baseball.mock.TestBaseballNumberGenerator;
65
import java.util.List;
6+
77
import org.junit.jupiter.api.BeforeEach;
88
import org.junit.jupiter.api.DisplayNameGeneration;
99
import org.junit.jupiter.api.DisplayNameGenerator;
1010
import org.junit.jupiter.api.Test;
1111

12+
import com.kakao.onboarding.precource.dukeyun.baseball.mock.TestBaseballNumberGenerator;
13+
1214
@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class)
1315
class BaseballGameServiceTest {
1416

1517
private BaseballGameService baseballGameService;
18+
private BaseballGameConfig baseballGameConfig;
1619

1720
@BeforeEach
1821
public void init() {
1922
baseballGameService = new BaseballGameService(new TestBaseballNumberGenerator(List.of(1, 2, 3)));
2023
baseballGameService.init();
24+
25+
baseballGameConfig = new BaseballGameConfig(3, 1, 9);
2126
}
2227

2328
@Test
2429
public void 정답_시_결과_객체에_클리어_정보를_반환한다() throws Exception {
2530
// given
26-
BaseballGameTurnInput input = new BaseballGameTurnInput("123");
31+
BaseballGameTurnInput input = new BaseballGameTurnInput(baseballGameConfig, "123");
2732

2833
// when
29-
BaseballGameTurnResult result = (BaseballGameTurnResult) baseballGameService.playTurn(input);
34+
BaseballGameTurnResult result = (BaseballGameTurnResult)baseballGameService.playTurn(input);
3035

3136
//then
3237
assertThat(result.isGameCleared()).isTrue();
@@ -37,10 +42,10 @@ public void init() {
3742
@Test
3843
public void 정답이_아닐_시_결과_객체에_클리어_실패_정보를_반환한다() throws Exception {
3944
// given
40-
BaseballGameTurnInput input = new BaseballGameTurnInput("132");
45+
BaseballGameTurnInput input = new BaseballGameTurnInput(baseballGameConfig, "132");
4146

4247
// when
43-
BaseballGameTurnResult result = (BaseballGameTurnResult) baseballGameService.playTurn(input);
48+
BaseballGameTurnResult result = (BaseballGameTurnResult)baseballGameService.playTurn(input);
4449

4550
//then
4651
assertThat(result.isGameCleared()).isFalse();
@@ -51,10 +56,10 @@ public void init() {
5156
@Test
5257
public void 모두_틀리면_볼과_스트라이크_모두_0이다() throws Exception {
5358
// given
54-
BaseballGameTurnInput input = new BaseballGameTurnInput("456");
59+
BaseballGameTurnInput input = new BaseballGameTurnInput(baseballGameConfig, "456");
5560

5661
// when
57-
BaseballGameTurnResult result = (BaseballGameTurnResult) baseballGameService.playTurn(input);
62+
BaseballGameTurnResult result = (BaseballGameTurnResult)baseballGameService.playTurn(input);
5863

5964
//then
6065
assertThat(result.isGameCleared()).isFalse();
@@ -65,10 +70,10 @@ public void init() {
6570
@Test
6671
public void 모두_자리만_다르면_3볼이다() throws Exception {
6772
// given
68-
BaseballGameTurnInput input = new BaseballGameTurnInput("312");
73+
BaseballGameTurnInput input = new BaseballGameTurnInput(baseballGameConfig, "312");
6974

7075
// when
71-
BaseballGameTurnResult result = (BaseballGameTurnResult) baseballGameService.playTurn(input);
76+
BaseballGameTurnResult result = (BaseballGameTurnResult)baseballGameService.playTurn(input);
7277

7378
//then
7479
assertThat(result.isGameCleared()).isFalse();
Lines changed: 2 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.kakao.onboarding.precource.dukeyun.baseball.baseball;
22

3-
import static org.assertj.core.api.Assertions.assertThatThrownBy;
3+
import static org.assertj.core.api.Assertions.*;
44

55
import org.junit.jupiter.api.DisplayNameGeneration;
66
import org.junit.jupiter.api.DisplayNameGenerator;
@@ -9,33 +9,10 @@
99
@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class)
1010
class BaseballGameTurnInputTest {
1111

12-
@Test
13-
public void 세자리가_아닌_숫자가_들어오면_예외를_발생시킨다() throws Exception {
14-
// given
15-
// when
16-
//then
17-
assertThatThrownBy(() -> {
18-
new BaseballGameTurnInput("1234");
19-
}).isInstanceOf(RuntimeException.class);
20-
}
21-
2212
@Test
2313
public void 숫자가_아니면_예외를_발생시킨다() throws Exception {
24-
// given
25-
// when
26-
//then
2714
assertThatThrownBy(() -> {
28-
new BaseballGameTurnInput("1aa");
15+
new BaseballGameTurnInput(new BaseballGameConfig(3, 1, 9), "1aa");
2916
}).isInstanceOf(IllegalArgumentException.class);
3017
}
31-
32-
@Test
33-
public void 중복된_숫자면_예외를_발생시킨다() throws Exception {
34-
// given
35-
// when
36-
//then
37-
assertThatThrownBy(() -> {
38-
new BaseballGameTurnInput("112");
39-
}).isInstanceOf(RuntimeException.class);
40-
}
4118
}

src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/baseball/BaseballNumberTest.java

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,72 +4,81 @@
44

55
import java.util.List;
66

7+
import org.junit.jupiter.api.BeforeEach;
78
import org.junit.jupiter.api.Test;
89

910
class BaseballNumberTest {
11+
12+
private BaseballGameConfig config;
13+
14+
@BeforeEach
15+
void setup() {
16+
config = new BaseballGameConfig(3, 1, 9);
17+
}
18+
1019
@Test
1120
void 기준_길이보다_길면_생성이_안된다() {
1221
assertThatThrownBy(() ->
13-
new BaseballNumber(List.of(1, 2, 3, 4))
22+
new BaseballNumber(config, List.of(1, 2, 3, 4))
1423
).isInstanceOf(RuntimeException.class);
1524
}
1625

1726
@Test
1827
void 기준_길이보다_짧으면_생성이_안된다() {
1928
assertThatThrownBy(() ->
20-
new BaseballNumber(List.of(1, 2))
29+
new BaseballNumber(config, List.of(1, 2))
2130
).isInstanceOf(RuntimeException.class);
2231
}
2332

2433
@Test
2534
void 숫자가_범위가_최소_허용_범위보다_작으면_생성이_안된다() {
2635
assertThatThrownBy(() ->
27-
new BaseballNumber(List.of(-1, 2, 3))
36+
new BaseballNumber(config, List.of(0, 2, 3))
2837
).isInstanceOf(RuntimeException.class);
2938
}
3039

3140
@Test
3241
void 숫자가_범위가_최소_허용_범위보다_크면_생성이_안된다() {
3342
assertThatThrownBy(() ->
34-
new BaseballNumber(List.of(10, 2, 3))
43+
new BaseballNumber(config, List.of(10, 2, 3))
3544
).isInstanceOf(RuntimeException.class);
3645
}
3746

3847
@Test
3948
void 중복된_숫자로_생성할_수_없다() {
4049
assertThatThrownBy(() ->
41-
new BaseballNumber(List.of(1, 1, 3))
50+
new BaseballNumber(config, List.of(1, 1, 3))
4251
).isInstanceOf(RuntimeException.class);
4352
}
4453

4554
@Test
4655
void 올바른_조건으로_생성할_수_있다() {
4756
assertThatCode(
48-
() -> new BaseballNumber(List.of(1, 2, 3))
57+
() -> new BaseballNumber(config, List.of(1, 2, 3))
4958
).doesNotThrowAnyException();
5059
}
5160

5261
@Test
5362
void 스트라이크_갯수를_계산할_수_있다() {
54-
BaseballNumber systemNumber = new BaseballNumber(List.of(1, 2, 3));
55-
56-
assertThat(systemNumber.countStrike(new BaseballNumber(List.of(1, 2, 3)))).isEqualTo(3);
57-
assertThat(systemNumber.countStrike(new BaseballNumber(List.of(1, 2, 4)))).isEqualTo(2);
58-
assertThat(systemNumber.countStrike(new BaseballNumber(List.of(1, 3, 4)))).isEqualTo(1);
59-
assertThat(systemNumber.countStrike(new BaseballNumber(List.of(3, 2, 1)))).isEqualTo(1);
60-
assertThat(systemNumber.countStrike(new BaseballNumber(List.of(4, 5, 6)))).isEqualTo(0);
61-
assertThat(systemNumber.countStrike(new BaseballNumber(List.of(3, 1, 2)))).isEqualTo(0);
63+
BaseballNumber systemNumber = new BaseballNumber(config, List.of(1, 2, 3));
64+
65+
assertThat(systemNumber.countStrike(new BaseballNumber(config, List.of(1, 2, 3)))).isEqualTo(3);
66+
assertThat(systemNumber.countStrike(new BaseballNumber(config, List.of(1, 2, 4)))).isEqualTo(2);
67+
assertThat(systemNumber.countStrike(new BaseballNumber(config, List.of(1, 3, 4)))).isEqualTo(1);
68+
assertThat(systemNumber.countStrike(new BaseballNumber(config, List.of(3, 2, 1)))).isEqualTo(1);
69+
assertThat(systemNumber.countStrike(new BaseballNumber(config, List.of(4, 5, 6)))).isEqualTo(0);
70+
assertThat(systemNumber.countStrike(new BaseballNumber(config, List.of(3, 1, 2)))).isEqualTo(0);
6271
}
6372

6473
@Test
6574
void 볼_갯수를_계산할_수_있다() {
66-
BaseballNumber systemNumber = new BaseballNumber(List.of(1, 2, 3));
67-
68-
assertThat(systemNumber.countBall(new BaseballNumber(List.of(1, 2, 3)))).isEqualTo(0);
69-
assertThat(systemNumber.countBall(new BaseballNumber(List.of(1, 2, 4)))).isEqualTo(0);
70-
assertThat(systemNumber.countBall(new BaseballNumber(List.of(1, 3, 4)))).isEqualTo(1);
71-
assertThat(systemNumber.countBall(new BaseballNumber(List.of(3, 2, 1)))).isEqualTo(2);
72-
assertThat(systemNumber.countBall(new BaseballNumber(List.of(4, 5, 6)))).isEqualTo(0);
73-
assertThat(systemNumber.countBall(new BaseballNumber(List.of(3, 1, 2)))).isEqualTo(3);
75+
BaseballNumber systemNumber = new BaseballNumber(config, List.of(1, 2, 3));
76+
77+
assertThat(systemNumber.countBall(new BaseballNumber(config, List.of(1, 2, 3)))).isEqualTo(0);
78+
assertThat(systemNumber.countBall(new BaseballNumber(config, List.of(1, 2, 4)))).isEqualTo(0);
79+
assertThat(systemNumber.countBall(new BaseballNumber(config, List.of(1, 3, 4)))).isEqualTo(1);
80+
assertThat(systemNumber.countBall(new BaseballNumber(config, List.of(3, 2, 1)))).isEqualTo(2);
81+
assertThat(systemNumber.countBall(new BaseballNumber(config, List.of(4, 5, 6)))).isEqualTo(0);
82+
assertThat(systemNumber.countBall(new BaseballNumber(config, List.of(3, 1, 2)))).isEqualTo(3);
7483
}
7584
}

src/test/java/com/kakao/onboarding/precource/dukeyun/baseball/mock/TestBaseballNumberGenerator.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.kakao.onboarding.precource.dukeyun.baseball.mock;
22

3+
import java.util.List;
4+
5+
import com.kakao.onboarding.precource.dukeyun.baseball.baseball.BaseballGameConfig;
36
import com.kakao.onboarding.precource.dukeyun.baseball.baseball.BaseballNumber;
47
import com.kakao.onboarding.precource.dukeyun.baseball.baseball.BaseballNumberGenerator;
5-
import java.util.List;
68

79
public class TestBaseballNumberGenerator implements BaseballNumberGenerator {
810
private final List<Integer> fixedNumbers;
@@ -13,6 +15,6 @@ public TestBaseballNumberGenerator(List<Integer> fixedNumbers) {
1315

1416
@Override
1517
public BaseballNumber generate() {
16-
return new BaseballNumber(fixedNumbers);
18+
return new BaseballNumber(new BaseballGameConfig(3, 1, 9), fixedNumbers);
1719
}
1820
}

0 commit comments

Comments
 (0)