package separator;
public enum SeparatorEnum {
CUSTOM_SEPARATOR_FIRST("//"),
CUSTOM_SEPARATOR_NEWLINE("\\n"),
COLON_SEPARATOR(":"),
REST_SEPARATOR(",");
private final String separator;
SeparatorEnum(String s) {
this.separator = s;
}
public String getSeparator() {
return separator;
}
}
package separator;
import exception.CustomSeparatorEmptyException;
import exception.CustomSeparatorNoNewLineException;
import exception.CustomSeparatorNumberException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class SumSeparatorList {
private List<String> separatorList;
private FindCustomSeparator findCustomSeparator;
public SumSeparatorList(FindCustomSeparator findCustomSeparator) {
this.findCustomSeparator = findCustomSeparator;
this.separatorList = Stream.of(SeparatorEnum.values())
.map(SeparatorEnum::getSeparator)
.collect(Collectors.toList());
}
public List<String> getSeparatorList() {
return separatorList;
}
public void customSeparatorAddSumSeparatorList(String input) throws CustomSeparatorNumberException, CustomSeparatorNoNewLineException, CustomSeparatorEmptyException {
String result = findCustomSeparator.findCustomSeparator(input);
separatorList.add(result);
}
}
package sum;
import java.util.List;
public class SeparatorSumCalculate {
private String[] result;
public void separatorSumCalculate(List<String> sumSeparatorList,String input){
for(String separator:sumSeparatorList){
input = input.replace(separator," ");
}
result = input.split(" ");
}
public int sumCalculate() {
int sum = 0;
for (String resultInteger : result) {
if (!resultInteger.isEmpty()) {
sum += Integer.parseInt(resultInteger);
}
}
return sum;
}
}
package verification;
import exception.CustomSeparatorEmptyException;
import exception.CustomSeparatorNoNewLineException;
import exception.CustomSeparatorNumberException;
import exception.InputStringBlacnkException;
public class VerificationInput {
public void verificationString(String input) throws CustomSeparatorEmptyException, CustomSeparatorNumberException, CustomSeparatorNoNewLineException, InputStringBlacnkException {
if (verficationStringBlacnk(input)) {
throw new InputStringBlacnkException("공백 문자는 포함될 수 없습니다.");
}
}
private boolean verficationStringBlacnk(String input) {
if (input.contains(" ")) {
return true;
} else {
return false;
}
}
}
저번 시간 코드리뷰 때, 예외처리 case 부족, 상수로 치환하기, 필요없는 필드 변수 제거, 계속해서 새로운 객체 생성, 클래스 이름 모호, 파일 구조 없음 이라는 리뷰를 받았다. 그래서 리팩토링을 전체적으로 다시 하였다.
public class CustomSeparatorEmptyException extends Exception{
public CustomSeparatorEmptyException(String message){
super(message);
}
}
package exception;
public class CustomSeparatorNoNewLineException extends Exception{
public CustomSeparatorNoNewLineException(String message){
super(message);
}
}
package exception;
public class CustomSeparatorNumberException extends Exception{
public CustomSeparatorNumberException(String message){
super(message);
}
}
package exception;
public class InputStringBlacnkException extends Exception{
public InputStringBlacnkException(String message){
super(message);
}
}
package inputOutput;
import java.util.Scanner;
public class InputString {
public String getString() {
return scanner.nextLine();
}
private final Scanner scanner;
public InputString() {
this.scanner = new Scanner(System.in);
}
}
package separator;
import exception.CustomSeparatorEmptyException;
import exception.CustomSeparatorNoNewLineException;
import exception.CustomSeparatorNumberException;
public class FindCustomSeparator {
public String findCustomSeparator(String input) throws CustomSeparatorNoNewLineException, CustomSeparatorNumberException, CustomSeparatorEmptyException {
if (input.startsWith(SeparatorEnum.CUSTOM_SEPARATOR_FIRST.getSeparator())) {
int customSeparatorFirestLength = SeparatorEnum.CUSTOM_SEPARATOR_FIRST.getSeparator().length();
int newLineIndex = input.indexOf(SeparatorEnum.CUSTOM_SEPARATOR_NEWLINE.getSeparator());
if (newLineIndex == -1) {
throw new CustomSeparatorNoNewLineException("Custom Separator는 개행문자인 \\n이 필요합니다.");
}
String result = input.substring(customSeparatorFirestLength, newLineIndex);
verificationCustomSeparator(result);
return result;
}
return " ";
}
private void verificationCustomSeparator(String customSeparatorString) throws CustomSeparatorNumberException, CustomSeparatorEmptyException, CustomSeparatorNoNewLineException {
if (customSeparatorString.isEmpty()) {
throw new CustomSeparatorEmptyException("Custom Separator는 null일 수 없습니다.");
} else if (isInteger(customSeparatorString)) {
throw new CustomSeparatorNumberException("Cutome Separator는 숫자로 지정할 수 없습니다.");
}
}
private boolean isInteger(String customSeparatorString) {
try {
Integer.parseInt(customSeparatorString);
return true;
} catch (NumberFormatException e) {
return false;
}
}
}
이렇게 고쳤었지만, 정적 팩토링 메서드를 활용해보라고 다시 조언해주었다.
addStringPOJO(3) - 예외 처리 방식 변경 (0) | 2025.01.05 |
---|---|
AddStringPOJO(2) - [Refactor] 정적 메소드 사용 (0) | 2025.01.04 |
Java - POJO 형식으로 객체지향 공부하기 (0) | 2025.01.02 |
Board (2) | 2024.11.20 |
웹서버 - Calendar (0) | 2024.11.19 |