은 if-else if 같은 기능을 하지만 조건의 값이 정수 혹은 문자열이어야 사용할 수 있다는 제약이 있어 if -else if 보다는 한정적으로 사용되는 조건문입니다. 하지만 다음 예제를 통해서 알 수 있듯이 if-else if 문보다 코드를 깔끔하게 정리할 수 있다는 장점이 있어서 가끔 활용되는 조건문입니다.
위의 예제는 rank의 값에 따라 medalColor가 달라지는 조건문인데 조건인 rank가 정수이기 때문에 if - else if와 switch-case문 모두 사용 할 수 있습니다.
if - else 문과는 다르게 switch -case에는 조건식이 아닌 조건이 되는 변수가 들어가게 되고 중괄호 아래에 변수의 값을 case뒤에 두어 조건을 설정합니다. 그리고 마지막에 default는 else와 비슷한 역할을 하여 조건에 맞지 않는 값들의 수행문을 결정 합니다.
import java.util.Scanner;
public class SwitchCase {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int rank = scanner.nextInt();
char medalColor;
switch(rank) {
case 1: medalColor = '금';// char은 '' String은 ""
System.out.println("금메달");
break; // 중괄호를 빠져나가라. 안쓰면 금은동메달 다나오고 마지막에 A라고나옴..
case 2: medalColor = '은';
System.out.println("금메달");
break;
case 3: medalColor = '동';
System.out.println("금메달");
break;
default : medalColor = 'A'; //default 값을 안넣어도 되는데 안낳을거면 초기값을 줘야함- medalcolor : 'A'
}
System.out.println(rank + "등은" +medalColor +"메달 입니다."); //1, 금메달 1등은금메달 입니다.
정수를 입력받아 조건에 맞는 메달을 출력해주는 예제입니다. 정수의 값이 1~3인경우 해당 case의 수행문을 수행하고 그외의 값이면 default 값을 출력합니다.
case 마다 break;를 사용하는 이유는 break;는 switch-case문을 빠져나가라는 뜻으로 if-else if 문은 조건이 만족해서 수행문을 수행하면 자동으로 조건문 밖으로 빠져나가지만 switch-case문은 그렇지 않고 다음 수행문들도 수행하기 때문에 break;로 빠져나가라고 수동으로 안내해 주는 것 입니다.
default 값은 생략 가능 하며, 생략할 경우 medalColor의 지정된 기본 값을 출력합니다. 만약 medalColor 비어있는 변수라면 에러가 나기 때문에 medalColor에 기본값을 대입하거나 default를 조건을 설정해 주어야 합니다.
switch - case문에 조건에는 문자열이 올 수 있고 위의 예제에서 rank를 medal로 바꾸어 case "Gold": 이런식으로 변경하여 적용 할 수 도 있습니다.
Q. 각 월에 따른 한달 날짜 수를 day 변수 값으로 출력하세요. 단 2월은 28일 까지 입니다.
import java.util.Scanner;
public class SwitchCaseCase {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int month;
System.out.println("몇월이 궁금하신가요?"); month = scanner.nextInt();
int day = 31 ;
switch(month) {
case 1: case 3: case 5: case 7: case 8: case 10:
day+=0;
break;
case 2:
day-=3;
break;
case 4: case 6: case 9: case 11:
day-=1;
break;
default:
System.out.println("error");
day = 0;
break;
}
System.out.println(month+"월은"+day+"까지 있습니다."); //3, 3월은31일까지 있습니다.
조건은 다르지만 같은 수행문이 출력된다면 위의 예제처럼 여러개의 케이스를 모아 case 1: case3: case5: 이런 식으로 표현 할 수 있습니다.
풀이에서 day는 값이 주어져 있지만 default 값을 설정하면 조건에 맞지 않는 값은 default의 수행문을 수행하게 됩니다.