- 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개만 되도 아래쪽이 훨씬 간단해진다.
반응형
'Java' 카테고리의 다른 글
| [JAVA] 증감연산자 의미와 위치에 따른 종류 (ft. i++ 의미) (0) | 2022.03.19 |
|---|---|
| [JAVA] while 문에서 애초에 조건을 만족하지 않는다면? (ft. while문 do while문 차이) (0) | 2022.03.19 |
| [JAVA] isNumber / isNumeric 문자열(String)이 숫자인지 확인하는 함수 (0) | 2022.03.19 |
| [JAVA] 추상 클래스 인터페이스 차이점 / abstract class interface 사용법 (0) | 2022.03.19 |
| [JAVA] ConcurrentModificationException 의미와 해결 방법 (0) | 2022.03.19 |