switch(변수){
case 값1: /* 실행할 코드 */
case 값2: /* 실행할 코드 */
case 값3: /* 실행할 코드 */
...
default: /* 실행할 코드 */
}
switch 구문은 if문과 다르게 변수의 값을 이용하여 이동 지점을 탐색하는 구문이다.
변수 자리에는 byte, short, char, int, String 형태의 변수만 사용할 수 있다.
데모 1 : 홀짝 판정 프로그램
import java.lang.*;
public class SwitchExample01 {
public static void main(String[] args){
int number = 50;
switch(number % 2){
case 0:
System.out.println("짝수");
break;
case 1:
System.out.println("홀수");
break;
}
}
}
if구문으로도 구현이 가능한 홀짝 판정 프로그램이다. switch의 경우 값을 기준으로 이동 위치를 판정하기 때문에 논리식이 아닌 number % 2와 같은 값이 나오는 식을 작성하였으며, 각각의 나올 수 있는 값들의 경우를 case라는 키워드 뒤에 정의하여 이동 지점을 명시하였다.
break가 없을 경우 구문이 끝나지 않고 계속 실행되며, 원치 않는 결과가 나올 수 있으므로 case가 종료된 뒤 사용하여 탈출을 지시하였다.
import java.lang.*;
public class SwitchExample02{
public static void main(String[] args){
int month = 11;
switch(month){
case 12: case 1: case 2:
System.out.println("겨울");
break;
case 3: case 4: case 5:
System.out.println("봄");
break;
case 6: case 7: case 8:
System.out.println("여름");
break;
case 9: case 10: case 11:
System.out.println("가을");
break;
default:
System.out.println("잘못된 입력");
}
}
}
월을 3개씩 묶어 계절을 판정하는 프로그램이다. 별도의 처리를 하지 않을 경 다음과 같이 12개의 case를 모두 구현해야 한다.
switch(month){
case 1:
System.out.println("겨울");
break;
case 2:
System.out.println("겨울");
break;
case 3:
System.out.println("봄");
break;
case 4:
System.out.println("봄");
break;
case 5:
System.out.println("봄");
break;
case 6:
System.out.println("여름");
break;
case 7:
System.out.println("여름");
break;
case 8:
System.out.println("여름");
break;
case 9:
System.out.println("가을");
break;
case 10:
System.out.println("가을");
break;
case 11:
System.out.println("가을");
break;
case 12:
System.out.println("겨울");
break;
default:
System.out.println("잘못된 입력");
break;
}
위의 코드는 중복된 내용이 너무 많기 때문에, 탈출에 사용되는 break를 의도적으로 없에 다음과 같이 바꿀 수 있다.
switch(month){
case 12:
case 1:
case 2:
System.out.println("겨울");
break;
/* 이하 생략 */
}
switch 구문은 break가 없을 경우 계속 실행된다는 특징을 이용하여 몇 개의 case를 그룹처럼 묶을 수 있다.
모든 코드는 가로로 늘어놓을 수 있으므로 가독성을 위하여 다음과 같이 변경한다.(하지 않아도 좋다)
switch(month){
case 12: case 1: case 2:
System.out.println("겨울");
break;
/* 이하 생략 */
}
마지막 break는 생략이 가능하므로 코드가 많이 감소되어 예제처럼 구현된다.
데모 3 : 월별 날짜 계산 프로그램
import java.lang.*;
public class SwitchExample03{
public static void main(String[] args){
int month = 5;
switch(month){
case 2:
System.out.println("28일");
break;
case 4: case 6: case 9: case 11:
System.out.println("30일");
break;
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
System.out.println("31일");
break;
default:
System.out.println("잘못된 입력");
}
}
}