day12 🌕

장미·2022년 6월 25일
0

오늘의 성과

목록 보기
12/129
post-thumbnail

계산기 코드 수정하기 진짜 최종.java

오늘 인준이 만나서 도움 받고 수정해서 올렸는데, 아무리 봐도 뭔가 좀 부족한 것 같다... 뭔가... 뭔가 더 간결하게 할 수 있을 것 같은데 생각이 안 나.

⬇️ SOLID도 보고 객체지향 생활 체조 원칙 어쩌구도 보았으나 그래도 더러운 내 코드 자랑.

public class Main {
    public static void main(String[] args) {

        //조금 더러운 것 같음

        InputStrSplit input = new InputStrSplit();
        OpsNumSplit opsNumSplit = new OpsNumSplit();

        String[] str = input.strSplit();
        opsNumSplit.opsNumSplit(str);

        List<String> opsList = opsNumSplit.getOpsList();
        List<Integer> numList = opsNumSplit.getNumList();

        System.out.println(Output.output(numList, opsList));
    }
}
public class Input {

    public static String input() {
        System.out.print("입력값: ");
        return new Scanner(System.in).nextLine();
    }

}
public class InputStrSplit {

    String str = Input.input();

    public String[] strSplit() {
        String[] strArr = str.split(" ");
        return strArr;
    }

}
public class OpsNumSplit {

    List<String> opsList;
    List<Integer> numList;

    public void opsNumSplit(String[] strArr) {

        opsList = new ArrayList<>();
        numList = new ArrayList<>();

        for(int i = 0; i < strArr.length; i++) {
            if (i % 2 == 0) {
                validateNums(strArr[i]);
            }
            else {
                validateOps(strArr[i]);
            }
        }

    }

    public void validateNums(String str) {
        if(str.matches("^[0-9]*$")) {
            numList.add(Integer.parseInt(str));
        }
        else {
            throw new RuntimeException("숫자가 아닙니다.");
        }
    }

    public void validateOps(String str) {
        if(str.matches("[-+*/]")) {
            opsList.add(str);
        }
        else {
            throw new RuntimeException("부호가 아닙니다.");
        }
    }

    public List<String> getOpsList(){
        return opsList;
    }

    public List<Integer> getNumList(){
        return numList;
    }

}
public class Calculator {

    //여기서 어떻게 더 나눠야 할지 모르겠음

    public static int calculate(List<Integer> nums, List<String> ops) {
        int sum = nums.get(0);

        for(int i = 0; i < ops.size(); i++) {

            switch (ops.get(i)) {
                case "+" -> sum += nums.get(i+1);
                case "-" -> sum -= nums.get(i+1);
                case "*" -> sum *= nums.get(i+1);
                case "/" -> sum /= nums.get(i+1);
            }
        }

        return sum;
    }

}
public class Output {

    public static String output(List<Integer> numList, List<String> opsList) {
        return "결과값: " + Calculator.calculate(numList, opsList);
    }

}

코드를 봤을 때 주석이 없어도 최대한 알아볼 수 있도록 직관적이고 간결하게 짜보려 했으나 아직은 실력이 많이 부족한 것 같다.
남이 보면 이 시끼 이게 뭐꼬? 뭘 짠 기고? 싶을 정도로...ㅎ;
근데 함정은 이게 두 번이나 피드백 받은 코드란 거다.
이게 바로 뇌가 토끼정 크림카레우동(맛있어요)사리인 빡머가리의 숙명인가? 그치만 어쨌든... 조금씩 나아지고 있는 것 같긴 하다... 아마도지만...


토픽 2개 조지기

1. 세마포어와 뮤텍스

+) 22. 06. 26. 정리 완료.

day13 🌕 에 올려놨습니다.
이거 제 역작이라 표현할 정도로... 잘 정리해놓은 것 같습니다. 물론 제가 봤을 때요.

2. 동기 vs 비동기

+) 22. 06. 26. 기준 현재 알아보는 중... 이건... 책에 안 나와있어서 빡시다.


코테 2문제 풀기


벨로그 정리하기~!

이것저것 그동안 못 채워넣었던 거 쫌쫌따리 채워넣는 중.

profile
김뉴비

0개의 댓글

관련 채용 정보