본문 바로가기

Java

[JAVA] switch 문을 반복문으로 바꾸기

 

- switch 두 번 돌려야 할 상황에서 for문으로 변환하기 -

Stack 기반으로 계산기를 만들고 있었다.
연산자에 따라서 우선 순위를 다르게 부여해야 한다.
그 연산자가 op1 과  op2 두 개가 있다.
똑같은 작업을 op1 과 op2 에 두 번 해야 한다.
지금은 2개지만, 더 늘어난다면 여러 번 반복해야 할 수도 있다.
아니, 여러 번 반복하든 어떻든, 똑같은 코드를 두 번 쓰는 구조가 싫었다.
op1과 op2를 배열에 담아 버린 뒤에,
그 배열을 가지고 for문을 돌리기로 했다.
각 요소마다 새로운 정보를 저장해야 한다면,
미리 따로 배열을 만들어 놓고,
op1과 op2를 담은 배열과 인덱스가 일치하도록
정보를 담아 두기로 하자.

//before
        switch(op1) {
            case "(" :
                rank1 = 1;
                break;
            case "+" :
            case "-" :
                rank1 = 3;
                break;
            case "*" :
            case "/" :
                rank1 = 5;
                break;
        }

        switch(op2) {
            case "(" :
                rank2 = 1;
                break;
            case "+" :
            case "-" :
                rank2 = 3;
                break;
            case "*" :
            case "/" :
                rank2 = 5;
                break;
        }



//after
        String[] ops = {op1, op2};
        int[] ranks = new int[ops.length];
        for(int i = 0; i < ops.length-1; i++) {
            if(ops[i] == "(") {
                ranks[i] = 1;
                continue;
            } else if(ops[i] == "+" || ops[i] == "-") {
                ranks[i] = 3;
                continue;
            } else if (ops[i] == "*" || ops[i] == "/") {
                ranks[i] = 5;
                continue;
            } else {
                ranks[i] = 0;
                continue;
            }
        }

 

사실 코드 길이만 봐서는 크게 차이가 없어 보이기는 한다.

오히려 더 지저분해 보이고 복잡해 보이기까지 한다.

하지만 유지 보수를 생각하면 아래쪽이 훨씬 낫다.

요소가 2개일 때는 똑같은 처리를 반복한다고 해도,

요소가 3개, 4개만 되도 아래쪽이 훨씬 간단해진다.

반응형