switch-case문
조건식의 결과가 정수 혹은 문자열 값일 때 결과에 따라서 코드를 실행하게 해주는 문법입니다. if문도 조건에 따라 코드를 실행하지만 조건의 결과가 참인지 거짓인지로 문장을 진행시켰다면 switch는 정확히 0, 1, 2 등과 같은 숫자의 결과나 a, b, c등과 같이 문자의 결과로 나왔을 때 각 숫자 혹은 문자에 맞는 case를 찾아 case 안의 문장을 실행 합니다.
switch(input_ranking){
case 1 : System.out.println("1등입니다.");
break;
case 2 : System.out.println("2등입니다.");
break;
case 3 : System.out.println("3등입니다.");
break;
default : System.out.println("순위에 들지 못했습니다.");
}
위의 예시는 switch문을 이용하여 input_ranking의 값에 따라 결과의 값이 달라지는 코드입니다. input_ranking이 1인경우 "1등입니다."라는 문장이 나오게 되고 2인경우 "2등입니다."라는 문장이 나옵니다. default의 경우는 case에 맞는 조건이 없는 경우 작동하는 문장입니다. case마다 break를 적어주어야 하는데 break의 역할은 지금 진행하고 있는 문법을 빠져나오는 명령어이므로 break를 적어주지 않는다면 case의 값과 상관없이 실행된 case이후의 내용이 다 실행되기 때문에 break를 적어주어야 합니다.
int year;
int month;
int day;
switch(month){
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10 :
case 12 :
day = 31;
break;
case 2 : day?(year%4)28:29;
break;
case 4 :
case 6 :
case 9 :
case 11 :
day = 30;
break;
default : System.out.println("다시 입력해주세요.");
}
위와같은 예시는 break를 의도적으로 작성하지 않은 문장입니다. break를 만나야 문장을 나오기 때문에 각 달의 날짜를 입력을 해야하는 경우 day=31;이라는 문장이 공통으로 실행할 수 있도록 break를 작성하지 않고 case가 연속적으로 작성되었습니다. month의 값이 1인경우 break를 만나지 않기에 case3, case5...case12를 다 거쳐서 day=31;을 실행하고 break를 만나서 빠져나오게 됩니다. case3의 경우는 case5...case12를 거치게 됩니다. 이러한 식으로 같은 내용을 실행할 경우 break를 의도적으로 제외하여 코드를 간소화 할 수 있습니다.
switch(job_name){
case "전사" : System.out.println("전사를 고르셨습니다.");
break;
case "궁수" : System.out.println("궁수를 고르셨습니다.");
break;
case "마법사" : System.out.println("마법사를 고르셨습니다.");
break;
default : System.out.println("잘못 고르셨습니다.");
}
위의 예시와 같이 숫자가 아닌 문자가 조건이 될 수도 있습니다.