Java/[패스트캠퍼스] Java & SpringBoot로 시작하는 웹 프로그래밍
Ch 01. 자바 기초 - 16. 조건이 여러 개 일 때 간단히 표현되는 switch-case 문
hinote
2022. 12. 29. 10:09
switch - case 문
- if - else if - else 문은 괄호 안에 조건 식이 들어갈 수 있다. 조건에 대한 복잡한 비교연산자가 들어감
if - else if - else 문을 사용할 때 복잡하고 번거로운 부분을 가독성 좋게 구현 - 비교 조건이 특정 값이나 문자열인 경우 사용
- break 문을 사용하여 각 조건이 만족되면 switch 블럭을 빠져나오도록 함
- 자바 14부터 좀 더 간결해진 표현식이 지원 됨 ( break 사용하지 않음 )
--한 달이 며칠인지 알려주는 프로그램 구현
package ch16;
public class SwitchCaseTest {
public static void main(String[] args) {
int month = 10;
int day;
switch(month){
case 1:
day = 31;
break; //switch-break문을 빠져나오기 위해서 break를 사용해야 함.
//사용하지 않을 시 아래부분도 계속 체크가 됨
case 2:
day = 28;
break;
case 3:
day = 31;
break;
case 4:
day = 30;
break;
case 5:
day = 31;
break;
case 6:
day = 30;
break;
case 7:
day = 31;
break;
case 8:
day = 31;
break;
case 9:
day = 30;
break;
case 10:
day = 31;
break;
case 11:
day = 30;
break;
case 12:
day = 31;
break;
default:
System.out.println("존재하지 않는 달 입니다.");
day = -1;
}
System.out.println(month + "월은 " + day + "일입니다.");
}
}
-위의 방법을 가독성 좋게 줄인 예제
package ch16;
public class SwitchCaseTest {
public static void main(String[] args) {
int month = 10;
int day;
switch(month){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
day = 31;
break;
case 4: case 6: case 9: case 11:
day = 30;
break;
case 2:
day = 28;
break;
default:
day = 0;
System.out.println("존재하지 않는 달 입니다.");
}
System.out.println(month + "월은 " + day + "일입니다.");
}
}
//결과값은 모두 10월은 31일입니다.
문자열 지원되는 switch - case 문
package ch16;
public class SwitchCaseTest2 {
public static void main(String[] args) {
String medal = "Gold";
switch(medal) {
case "Gold":
System.out.println("금메달 입니다.");
break;
case "Silver":
System.out.println("은메달 입니다.");
break;
case "Bronze":
System.out.println("동메달 입니다.");
break;
default:
System.out.println("메달이 없습니다.");
break;
}
}
}
-> 금메달 입니다.
Java 14 부터 지원 되는 Switch Expression
- switch-case는 원래 구문이었는데 자바 14부터 식으로 제공 되고있음
- 간단하게 쉼표(,)로 조건 구분 = case 1: case 3: case 5: case 7: case 8: case 10: case 12: -> case 1, 3, 5, 7, 8, 10,12
- 식으로 제공되기 때문에 값을 반환받을 수 있다.
int day = switch (month) { ==>리턴값을 받을 수 있음 - 반환값은 yield를 사용(대부분 return을 씀)
package ch16;
public class SwitchCaseUpTest {
public static void main(String[] args) {
int month = 3;
int day = switch (month) {
case 1, 3, 5, 7, 8, 10,12 -> {
System.out.println("한 달은 31일입니다.");
yield 31;
}
case 4,6,9,11 -> {
System.out.println("한 달은 30일입니다.");
yield 30;
}
case 2 ->{
System.out.println("한 달은 28일입니다.");
yield 28;
}
default->{
System.out.println("존재하지 않는 달 입니다.");
yield 0;
}
};
System.out.println(month + "월은 " + day + "일입니다.");
}
}
-> 한 달은 31일입니다.
10월은 31일입니다.
대신
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int month = scanner.nextInt();
int day = switch (month) {
case 1, 3, 5, 7, 8, 10,12 ->
31;
case 4,6,9,11 ->
30;
case 2 ->
28;
default->{
System.out.println("존재하지 않는 달 입니다.");
yield = 0; //수행과 반환값이 같이 들어가기 때문에 반환의 의미로 yield를 써야 함, 다른 수행문이 있는 경우엔 yield를 꼭 써야함
}
};
System.out.println(month + "월은 " + day + "일입니다.");
}