✔️ If 문 과 Switch 문 동작 방법
- if-else if 는 조건을 걸어서 한줄 한줄 읽어가며 여러개의 control flow 가능하다.
- switch 의 경우에는 변수를 입력 받아 정해 놓은 여러 값과의 일치여부를 판단하여 control flow 를 결정한다
예시 )
import java.util.Scanner;
public class if_switch {
public static void main (String[] args){
System.out.println("what grade is my score? ");
Scanner input = new Scanner(System.in);
int score = input.nextInt();
System.out.println(ifMethod(score));
System.out.println(switchMethod(score));
}
public static String ifMethod(int score) {
String grade = "";
if(score >= 90) {
grade = "A";
} else if(score >= 80) {
grade = "B";
} else if (score >= 70 ){
grade = "C";
} else if (score >= 60 ){
grade = "D";
} else {
grade = "F";
}
return grade;
}
public static String switchMethod(int score) {
String grade = "";
score = score / 10;
switch(score){
case 10: case 9:
grade = "A";
break;
case 8 :
grade = "B";
break;
case 7 :
grade = "C";
break;
case 6 :
grade = "D";
break;
default :
grade = "F";
}
return grade;
}
}
> If문 과 Switch 문의 동작 방식
if 문은 n개의 조건문이 있다면 본인이 가지고 있는 조건이 맞는 해당 값을 찾기위해 worst case scenario 시간복잡도 : O(N) 즉 n개의 진위 여부를 판단을 한다. = Branch Statement
하지만 switch문의 경우는 조금 다르다.
switch 문은 jump statement 이다. 케이스가 4개이상일 경우 jump table을 생성해서 jump 할 case문이 없다면 default로, 해당 case문이 존재한다면 코드를 진입해서 jump table안에 key값과 mapping 되어있는 label 값으로 jump한다. 해당 컴파일 방식 구조가 HashTable, List와 비슷하기 때문에 시간복잡도 : O(log N) / O(1) 이다.
- jump table 크기 : (case 가장 큰 값 - case 가장 작은 값 + 1)


> jump table :
- 해당 case 를 jump table key 에서 찾은 후 -> goto *target; -> codeBlock 실행
📍 정리
- 속도 차이 : 5개 이하의 케이스일 경우에는 if-else 이용해도 상관없지만 조건문이 많아질 경우에는 속도면에서는 switch가 더 빠른 결정이다. 그러므로 성능 향상을 중요하게 생각한다면 yes!
- but! switch case문은 상당한 메모리를 잡아먹을 수 있다. 메모리 관리를 위해서 case문의 값을 순차적으로 증가 또는 감소로 하는 것이 좋다.
'🌈 Java > Back to Basic 101' 카테고리의 다른 글
| 자바 기초 정리: @Overloading vs. @Overriding (0) | 2021.03.03 |
|---|---|
| 자바 기초 정리: ArrayList vs. LinkedList (0) | 2021.03.03 |
| 자바 기초 정리: Class, Data Types (0) | 2021.03.03 |
| 2주차 : 자바 데이터 타입, 변수 그리고 배열 (0) | 2021.02.28 |
| 1주차 : JVM 과 자바 실행 (0) | 2021.02.25 |