본문 바로가기

Java/Chapter 05. 실행 흐름의 컨트롤

[Java] 05.02 - switch와 break

들어가며

 이어서 소개하는 switch문도
조건에 따라 실행할 문장을

 구분한다는 측면에서 if ~
else if ~ else 문과 유사하다.

 실제로 이 문장을 대체하는
용도로 사용이 된다.

 특히 중간에 else if가 많이
들어가는 상황에서는

 switch문이 더 좋은 선택이
될 수 있다.

 

switch문의 기본 구성

 다음 그림은 switch문의 기본
구성을 보여준다.

 이렇듯 switch문은 switch, case
그리고 default로 이뤄진다.

그림 37 - switch 문의 구성

 위 그림에 존재하는 키워드
case와 default를 가리켜

 '레이블(Label)'이라 한다.

 레이블이라고 하면 생소하게
느낄 수 있다.

 그러나 다음과 같이 말하면
친근하게 느껴진다.

 '라벨(Label)'

 다음 그림은 문구점에서
구입이 가능한 라벨(레이블)이다.

그림 38 - 가장 흔한 라벨(레이블)

 흔히 사무용으로 사용되는
견출지가 가장 대중적이다.

 이들은 어떤 대상의 정보 등을
표시하기 위해 사용된다.

 마찬가지로 레이블 case와
default도 코드상에서

 위치를 표시하기 위해
사용된다.

 switch문은 처음 보면 복잡해
보인다.

 그러나 case와 default가 위치를
표시하는 목적의 레이블이라는
사실을 알면

 그 구성이 단순해 보인다.

 그럼 switch문의 외부 골격을
보자.

switch (n){
    . . . .
}

 여기서 n의 값이 1이면
1이라고 표시된

 다음 레이블로 이동하여
실행을 이어간다.

case 1:

 물론 switch 문 안에서만
레이블을 찾는다.

 그리고 레이블을 찾았다면

 이후로는 다른 레이블은
모두 무시된다.

 그럼 다음 예제를 통해서
이러한 사실을 확인해보자.

public class temp {
    public static void main(String[] args){
        int n = 3;

        switch (n){
            case 1:
                System.out.println("n is 1");
            case 2:
                System.out.println("n is 2");
            case 3:
                System.out.println("n is 3");
            default:
                System.out.println("default output");
        }

        System.out.println("outside of switch");
    }
}
/*
n is 3
default output
outside of switch
*/

 위 예제의 switch 문은 다음과
같다.

 그리고 변수 n에는 3이 저장된
상태다.

 따라서 case 3으로 이도을 해서
실행을 이어간다.

그림 39 - switch 문의 실행 구조

 그리고 이렇듯 이어서
실행할 위치가 결정되면

 레이블은 의미가 없어진다.

 즉, default를 포함하여 모든
레이블이 사라진 상태에서
실행을 이어간다.

 따라서 다음 두 문장이 출력된다.

n is 3
default output

 

switch + break문의 일반적인 사용 모델

자바의 키워드 중에
break가 있다.

 그리고 이는 switch문 안에
사용되면 다음의 의미를
갖는다.

그림 40 - break 문의 의미

 따라서 switch 문 안에서
break 문을 적절히 사용하면

 다음 그림과 같은 구조의
실행을 기대할 수 있다.

 그리고 이는 if ~ else if ~ else 문을
일부 대체할 수 있는 형태이기도 하다.

그림 41 - 영역별 실행을 위한 구성

 앞서 보였던 switch 문과의
유일한 차이점은

 break의 존재 유뮤이다.

 하지만 이 덕분에레이블
별로 영역을 형성하여

 해당 영역만 실행할 수 있게
되었다.

 예를 들어서 switch 문에
2가 전달되면

 case 2로 이동해서 실행을
이어간다.

 그러다 break문을 만나면
switch문을 벗어나게 된다.

 결과적으로는 case 2가
그상힌 영역만 실행하는
셈이다

 그럼 다음 예제를 통해서
이러한 사실을 확인해보자.

public class temp {
    public static void main(String[] args){
        int n = 3;

        switch (n){
            case 1:
                System.out.println(". . .");
                break;
            case 2:
                System.out.println(". . .");
                break;
            case 3:
                System.out.println(". . .");
                break;
            default:
                System.out.println(". . .");
                break;
        }

        System.out.println(". . .");
    }
}

 마지막 default 부분에서는
break를 생략하여도 좋지만

 종료에 대한 명확한 표시를
하여 가독성을 높이자.


 switch문의 특징을 한 가지
더 언급하자면,

 둘 이상의 레이블을 이어서
둘 수도 있다.

 때문에 다음과 같은 형태의
switch문 구성도 가능하다.

switch (n){
    case 1:
    case 2:
    case 3:
        System.out.println("n is 3");
        break;
    default:
        System.out.println("default output");
        break;
}

 위와 같이 코드를 구성하면

 switch문에 전달되는 정수가
1, 2, 3인 경우에

 실행되는 영역이 같아지는데,

 이러한 형태의 switch문 구성이
유용한 경우도 있다.


참고 및 출처

윤성우의 열혈 Java 프로그래밍
국내도서
저자 : 윤성우
출판 : 오렌지미디어 2017.07.05
상세보기