본문 바로가기

🌈 Java/Back to Basic 101

자바 기초 정리: IF vs. Switch

✔️ 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문의 값을 순차적으로 증가 또는 감소로 하는 것이 좋다.