JAVA

[Snack Java] 9. 자바의 조건문 (SWITCH문)

yunjuniverse 2022. 6. 5. 05:14

 

이전 글 보기

2022.06.05 - [JAVA] - [Snack Java] 8. 자바의 조건문 (If문)

 

[Snack Java] 8. 자바의 조건문 (If문)

이전 글 보기 2022.06.05 - [JAVA] - [Snack Java] 7. 자바의 콘솔 입력(Console Input) [Snack Java] 7. 자바의 콘솔 입력(Console Input) 이전 글 보기 2022.06.04 - [JAVA] - [Snack Java] 6. 자바의 콘솔 출력..

yunjuniverse.tistory.com

 

SWITCH문도 IF문과 같이 조건문입니다. 하지만 분명한 차이가 있는데, SWITCH문은 조건문 안의 내용을 맞다 / 아니다로 판별하는 것이 아니라 변수가 어떤 값을 갖느냐에 따라 실행문이 선택됩니다.

 

그럼 IF문이 있는데 왜 SWITCH문이 쓰일까요? 조금 어려운 말로 하자면 IF문은 true/false라는 두가지 경우만 판별합니다. 이는 마치 이진트리 구조의 알고리즘과 같습니다.

 

 

 

그러나 switch문은 변수의 값에 따라서 실행문이 결정되기 때문에 같은 기능의 if문보다 코드가 간결할 수 있습니다. 일단 형태를 확인해보죠

 

 

 

IF문 보다는 아주 조금 복잡해보이지만 별게 아닙니다. SWITCH문에서는 조건을 두고자하는 변수 즉, 데이터에 case 키워드로 분기를 나눠 실행 결과를 나누고 각 실행 결과는 break라는 키워드를 이용해 구분합니다. 그러나 모든 case를 고려할 수는 없겠죠. 따라서 IF문의 ELSE처럼 case로 지정한 분기에 해당하지 않는 경우에 실행할 수 있는 기본 분기점인 default 분기를 지정합니다. 아래 예시를 보시죠

 

public class Switchs {
    public static void main(String[] args) {
        int month = 3;
        int day;

		//스위치문입니다.
        switch (month) {
            case 1: day = 31; break; //케이스와 케이스의 조건은 띄어쓰기로 한칸 띄웁니다.
            case 2: day = 28; break;
            case 3: day = 31; break;
            case 4: day = 30; break;
            case 5: day = 31; break;
            case 6: day = 30; break;
            case 7: day = 31; break;
            case 8: day = 31; break;
            case 9: day = 30; break;
            case 10: day = 31; break;
            case 11: day = 30; break;
            case 12: day = 31; break;
            default: day = 0; System.out.println("달은 1월부터 12월까지입니다."); break;
        }
        System.out.println(month + "월은 " + day + "일까지입니다.");
    }
}

//출력값: 3월은 31일까지입니다.

 

SWITCH문은 case 키워드 뒤에 조건을 간단하게 지정하여 각 월의 일 수를 출력합니다. 다만, 이렇게 중복되는 실행 결과가 있는 경우 각 조건을 한번에 통합할 수 있습니다. 더 간단한 코드 예시를 보시죠.

 

public class Switchs {
    public static void main(String[] args) {
        int month = 3;
        int day =0;

        switch (month) { // 같은 실행 결과를 가진 케이스를 모두 모았습니다.
            case 1: case 3: case 5: case 7: case 8: case 10: case 12: day = 31; break;
            case 4: case 6: case 9: case 11: day = 30; break;
            case 2: day = 28;
        }
        System.out.println(month + "월은 " + day + "일까지입니다.");
    }
}

 

위와 같이  같은 결과물을 가진 case는 조건문을 한번에 모아 써서 코드를 조금 더 간단하게 만들 수 있습니다. 그리고 default 문과 마지막 case에 있는 break는 생략할 수 있습니다. 위의 코드를 보면 default와 마지막 break는 빠져있는 걸 확인할 수 있습니다.

 

분기구조를 그려보면 차이가 더 명확하겠군요

 

* JAVA14부터 지원되는 Swtich Expression으로 더욱 간단하게 만들 수도 있습니다. 하지만 Yield 키워드에 대한 설명이 필요하므로 이후 과정에서 다시 설명하겠습니다.