상세 컨텐츠

본문 제목

AddStringPOJO(2) - [Refactor] 정적 메소드 사용

백엔드 공부진행도/연습 코드

by myeongjaechoi 2025. 1. 4. 18:53

본문

package verification;


import exception.CustomSeparatorEmptyException;
import exception.CustomSeparatorNoNewLineException;
import exception.CustomSeparatorNumberException;
import exception.InputStringBlacnkException;
import separator.SeparatorEnum;
import separator.SumSeparatorList;

public class VerificationInput {
    private  String input;

    public String getCustomSeparator() {
        return customSeparator;
    }

    private String customSeparator =" ";

    private VerificationInput(String input){
        this.input=input;
    }


    public void verificationString() throws CustomSeparatorEmptyException, CustomSeparatorNumberException, CustomSeparatorNoNewLineException, InputStringBlacnkException {
        if (verficationStringBlacnk()) {
            throw new InputStringBlacnkException("공백 문자는 포함될 수 없습니다.");
        }

    }

    public static VerificationInput verificationInputFrom(String input) throws CustomSeparatorNoNewLineException, CustomSeparatorNumberException, CustomSeparatorEmptyException, InputStringBlacnkException {
        VerificationInput verificationInput = new VerificationInput(input);
        verificationInput.verificationString();
        verificationInput.findCustomSeparator();
        return verificationInput;
    }

    private boolean verficationStringBlacnk() {

        if (input.contains(" ")) {
            return true;
        } else {
            return false;
        }
    }
    public void findCustomSeparator() 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);

            customSeparator = result;
        }

    }

    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;
        }
    }



}
package sum;

import java.util.List;

public class SeparatorSumCalculate {
    private String[] result;
    private List<String> sumSeparatorList;
    private String input;

    public void separatorReplaceBlank() {

        for (String separator : sumSeparatorList) {
            input = input.replace(separator, " ");

        }
        result = input.split(" ");

    }

    public SeparatorSumCalculate(List<String> sumSeparatorList, String input) {
        this.sumSeparatorList = sumSeparatorList;
        this.input = input;
        separatorReplaceBlank();
    }

    public static SeparatorSumCalculate sumSeparatorListInputOf(List<String> sumSeparatorList, String input) {
        return new SeparatorSumCalculate(sumSeparatorList, input);
    }


    public int sumCalculate() {
        int sum = 0;
        for (String resultInteger : result) {
            if (!resultInteger.isEmpty()) {
                sum += Integer.parseInt(resultInteger);
            }
        }
        return sum;
    }


}
package separator;

import exception.CustomSeparatorEmptyException;
import exception.CustomSeparatorNoNewLineException;
import exception.CustomSeparatorNumberException;
import sum.SeparatorSumCalculate;

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;


    public SumSeparatorList(String customSeparator) {

        this.separatorList = Stream.of(SeparatorEnum.values())
                .map(SeparatorEnum::getSeparator)
                .collect(Collectors.toList());
        this.separatorList.add(customSeparator);
    }

    public List<String> getSeparatorList() {
        return separatorList;
    }


    public static SumSeparatorList separatorListInputFrom(String customSeparator) {
        return new SumSeparatorList(customSeparator);
    }



}
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 inputOutput;

import verification.VerificationInput;

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);
    }


}
import exception.CustomSeparatorEmptyException;
import exception.CustomSeparatorNoNewLineException;
import exception.CustomSeparatorNumberException;
import exception.InputStringBlacnkException;
import inputOutput.InputString;
import separator.SumSeparatorList;
import sum.SeparatorSumCalculate;
import verification.VerificationInput;

//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class Main {
    public static void main(String[] args) throws CustomSeparatorNumberException, CustomSeparatorNoNewLineException, CustomSeparatorEmptyException, InputStringBlacnkException {

        InputString inputString = new InputString();


        while (true) {
            String input = inputString.getString();
            VerificationInput verificationInput = VerificationInput.verificationInputFrom(input);
            String customSeparator = verificationInput.getCustomSeparator();
            SumSeparatorList sumSeparatorList = SumSeparatorList.separatorListInputFrom(customSeparator);
            SeparatorSumCalculate separatorSumCalculate = SeparatorSumCalculate.sumSeparatorListInputOf(sumSeparatorList.getSeparatorList(), input);
            System.out.println(separatorSumCalculate.sumCalculate());
        }
    }
}

기존 코드와 유사하게, 모든 인스턴스들이 메인에서 생성되어 실행되고 있다는 피드백을 받았다..

코드 수정할 것들이랑 참고할 레퍼런스도 코드 리뷰에 달아주셔서 그것을 토대로 리팩토링 할 예정이다.

관련글 더보기