Skip to content

Commit 31920dd

Browse files
committed
2중 for 문 제거. stream 사용
1 parent ba18632 commit 31920dd

3 files changed

Lines changed: 20 additions & 20 deletions

File tree

src/main/java/calculator/config/Configuration.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ public class Configuration {
77
private final CalculatorController calculatorController;
88

99
public Configuration() {
10-
this.calculatorController = new CalculatorController(new CalculatorService());
10+
this.calculatorController = new CalculatorController();
1111
}
1212

1313
public CalculatorController getCalculatorController() {

src/main/java/calculator/controller/CalculatorController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
public class CalculatorController {
77
private final CalculatorService calculatorService;
88

9-
public CalculatorController(CalculatorService calculatorService) {
10-
this.calculatorService = calculatorService;
9+
public CalculatorController() {
10+
this.calculatorService = new CalculatorService();
1111
}
1212

1313
public void input() {

src/main/java/calculator/service/CalculatorService.java

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
package calculator.service;
22

3+
import java.util.Arrays;
4+
35
public class CalculatorService {
46
private String s;
5-
private String plusSeparator;
7+
private String customSeparator;
68

79
/**
810
* 덧셈 로직을 순차적으로 진행한다.
911
*/
1012
public int sum(String s) {
1113
this.s = s;
12-
boolean hasPlusSeparator = checkPlusSeparator();
13-
String[] separatedString = separate(hasPlusSeparator);
14+
boolean hasCustomSeparator = checkCustomSeparator();
15+
String[] separatedString = separate(hasCustomSeparator);
1416
hasNaN(separatedString);
1517
return sumSeparatedStringArr(separatedString);
1618
}
@@ -20,9 +22,9 @@ public int sum(String s) {
2022
*
2123
* @return 만약 커스텀 구분자가 있다면 true, 없다면 false 를 반환한다.
2224
*/
23-
private boolean checkPlusSeparator() {
25+
private boolean checkCustomSeparator() {
2426
if (s.length() >= 5 && s.startsWith("//") && s.startsWith("\\n", 3)) {
25-
plusSeparator = String.valueOf(s.charAt(2));
27+
customSeparator = String.valueOf(s.charAt(2));
2628
s = s.substring(5);
2729
return true;
2830
}
@@ -32,17 +34,17 @@ private boolean checkPlusSeparator() {
3234
/**
3335
* 받은 문자열을 구분자를 기준으로 나눈다. 만약 커스텀 구분자에 역슬래시가 있다면 문제가 생기지 않도록 한다.
3436
*
35-
* @param hasPlusSeparator 커스텀 구분자가 있다면 true, 없다면 false 를 입력한다.
37+
* @param hasCustomSeparator 커스텀 구분자가 있다면 true, 없다면 false 를 입력한다.
3638
* @return 분리된 문자열을 반환한다. 이 문자열에는 반드시 숫자만 있는 것은 아니다.
3739
*/
38-
private String[] separate(boolean hasPlusSeparator) {
39-
if (!hasPlusSeparator) {
40+
private String[] separate(boolean hasCustomSeparator) {
41+
if (!hasCustomSeparator) {
4042
return s.split("[:,]");
4143
}
42-
if (plusSeparator.equals("\\")) {
43-
return s.split("[:," + plusSeparator.repeat(2) + "]");
44+
if (customSeparator.equals("\\")) {
45+
return s.split("[:," + customSeparator.repeat(2) + "]");
4446
}
45-
return s.split("[:," + plusSeparator + "]");
47+
return s.split("[:," + customSeparator + "]");
4648
}
4749

4850
/**
@@ -51,12 +53,10 @@ private String[] separate(boolean hasPlusSeparator) {
5153
* @param separatedStringArr 숫자 외의 문자가 있는지 확인하고 싶은 문자열을 입력한다.
5254
*/
5355
private void hasNaN(String[] separatedStringArr) {
54-
for (String s : separatedStringArr) {
55-
for (char c : s.toCharArray()) {
56-
if (c < 48 || c > 57) {
57-
throw new IllegalArgumentException();
58-
}
59-
}
56+
if (Arrays.stream(separatedStringArr)
57+
.flatMapToInt(String::chars)
58+
.anyMatch(it -> it < '0' || it > '9')) {
59+
throw new IllegalArgumentException();
6060
}
6161
}
6262

0 commit comments

Comments
 (0)