Skip to content

Commit c145fc0

Browse files
committed
refactor:Separator 클래스 생성 및 로직 분리
1 parent 831a58f commit c145fc0

3 files changed

Lines changed: 63 additions & 35 deletions

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package calculator.dto;
2+
3+
public class CheckSeparatorDto {
4+
private String inputString;
5+
private String customSeparator = null;
6+
7+
public String getInputString() {
8+
return inputString;
9+
}
10+
11+
public void setInputString(String inputString) {
12+
this.inputString = inputString;
13+
}
14+
15+
public String getCustomSeparator() {
16+
return customSeparator;
17+
}
18+
19+
public void setCustomSeparator(String customSeparator) {
20+
this.customSeparator = customSeparator;
21+
}
22+
}

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

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,27 @@
11
package calculator.service;
22

3+
import calculator.dto.CheckSeparatorDto;
4+
import calculator.service.separator.Separator;
35
import calculator.service.validator.Validator;
46

57
public class CalculatorService {
68
private final Validator validator = new Validator();
7-
private String inputString;
8-
private String customSeparator;
9+
private final Separator separator = new Separator();
910

1011

1112
/**
1213
* 덧셈 로직을 순차적으로 진행한다.
1314
*/
1415
public int add(String inputString) {
15-
this.inputString = inputString;
16-
boolean hasCustomSeparator = checkCustomSeparator();
17-
String[] separatedString = separate(hasCustomSeparator);
16+
CheckSeparatorDto checkSeparatorDto = new CheckSeparatorDto();
17+
checkSeparatorDto.setInputString(inputString);
18+
separator.checkCustomSeparator(checkSeparatorDto);
19+
String[] separatedString = separator.separate(checkSeparatorDto);
20+
1821
validator.hasNaN(separatedString);
1922
return sumSeparatedStringArr(separatedString);
2023
}
2124

22-
/**
23-
* 커스텀 구분자가 있는지 확인한다.
24-
*
25-
* @return 만약 커스텀 구분자가 있다면 true, 없다면 false 를 반환한다.
26-
*/
27-
private boolean checkCustomSeparator() {
28-
if (inputString.length() >= 5 && inputString.startsWith("//") && inputString.startsWith("\\n", 3)) {
29-
customSeparator = String.valueOf(inputString.charAt(2));
30-
inputString = inputString.substring(5);
31-
return true;
32-
}
33-
return false;
34-
}
35-
36-
/**
37-
* 받은 문자열을 구분자를 기준으로 나눈다. 만약 커스텀 구분자에 역슬래시가 있다면 문제가 생기지 않도록 한다.
38-
*
39-
* @param hasCustomSeparator 커스텀 구분자가 있다면 true, 없다면 false 를 입력한다.
40-
* @return 분리된 문자열을 반환한다. 이 문자열에는 반드시 숫자만 있는 것은 아니다.
41-
*/
42-
private String[] separate(boolean hasCustomSeparator) {
43-
if (!hasCustomSeparator) {
44-
return inputString.split("[:,]");
45-
}
46-
if (customSeparator.equals("\\")) {
47-
return inputString.split("[:," + customSeparator.repeat(2) + "]");
48-
}
49-
return inputString.split("[:," + customSeparator + "]");
50-
}
51-
5225
/**
5326
* 문자열을 int 형으로 바꾼 뒤 합한다.
5427
*
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package calculator.service.separator;
2+
3+
import calculator.constant.CalConst;
4+
import calculator.dto.CheckSeparatorDto;
5+
6+
public class Separator {
7+
8+
public void checkCustomSeparator(CheckSeparatorDto checkSeparatorDto) {
9+
String inputString = checkSeparatorDto.getInputString();
10+
String customSeparator;
11+
if (inputString.length() >= CalConst.MINIMUM_LENGTH_IF_EXIST_CUSTOM_SEPARATOR.value()
12+
&& inputString.startsWith("//")
13+
&& inputString.startsWith("\\n", CalConst.END_INDEX_OF_CUSTOM_SEPARATOR.value())) {
14+
customSeparator = String.valueOf(inputString.charAt(CalConst.INDEX_OF_CUSTOM_SEPARATOR.value()));
15+
inputString = inputString.substring(CalConst.START_INDEX_OF_CALCULATING.value());
16+
17+
checkSeparatorDto.setCustomSeparator(customSeparator);
18+
checkSeparatorDto.setInputString(inputString);
19+
}
20+
}
21+
22+
public String[] separate(CheckSeparatorDto checkSeparatorDto) {
23+
String customSeparator = checkSeparatorDto.getCustomSeparator();
24+
String inputString = checkSeparatorDto.getInputString();
25+
if (customSeparator==null) {
26+
return inputString.split("[:,]");
27+
}
28+
if (customSeparator.equals("\\")) {
29+
return inputString.split("[:," + customSeparator.repeat(2) + "]");
30+
}
31+
return inputString.split("[:," + customSeparator + "]");
32+
}
33+
}

0 commit comments

Comments
 (0)