다음은 switch문의 예시이다.
int n = scanner.nextInt();
// 사용자가 입력하는 수를 n으로 정의할 때
switch(n) {
case 1: // n = 1일 때
System.out.println("사용자가 1을 입력했습니다.");
break;
case 2: // n = 2일 때
System.out.println("사용자가 2를 입력했습니다.");
break;
default: // case 1, 2 외의 경우일 때
System.out.println("사용자가 1, 2 외의 다른 수를 입력했습니다.");
break;
}
-
Nested if-else(다중 if문)에서 조건이 많은 경우, 더 편리하게 사용할 수 있는 switch문이다.
다중 if문보다 가독성이 좋지만, 비교적 표현 가능한 범위가 좁다.
예를 들어, switch문에서 int, byte 타입은 argument(인자)로 가능하나 long 타입은 불가능하다. (다중 if문은 가능)
-
switch문에서 각각의 case가 끝날 때 break를 작성해주어야 한다.
break를 작성하지 않으면 자동으로 다음 case로 넘어가게 된다.
case에 아무 명령어도 작성하지 않는 경우에는,
그 다음 case로 넘어가는 'fall through' 현상이 발생한다.
int n = scanner.nextInt();
// 사용자가 입력하는 수를 n으로 정의할 때
switch(n) {
case 1:
case 2:
default:
System.out.println("모든 case의 결과가 이 출력문으로 동일합니다.");
}
-
컴퓨터가 case 1을 읽으려 했으나 break도 없으니 다음의 case 2로 넘어간다.
하지만 case 2에도 명령어가 없으니 명령어가 있는 default까지 넘어가 실행한다.
이를 'fall through'라고 하며,
이 현상을 이용하여 상이한 값의 case문에 일부러 명령어를 비워두어 동일한 결과를 내게 할 수 있다.
-
default에는 정의된 case 외의 모든 경우에 실행할 동작을 작성하면 된다.
default는 마지막 줄이기 때문에 break를 굳이 작성하지 않아도 된다.
break를 작성하지 않으면 다음 case로 넘어가게 되는데, 마지막 줄이라 그대로 완료되기 때문이다.