자바(Java)학습/1_Java 기초
16. 조건문(Switch-case문)
thespeace
2021. 8. 18. 21:53
조건이 여러개일때 간다히 표현되는
Switch-case
switch - 선택하다.
*switch( 식X ), 조건이 특정값이나 문자열로 표현될 수 있을때 많이 사용된다.
구문이 깔끔해보여서 많이 사용한다.
조건에 매치되는 변수나 값이 들어간다.
- if ‐ else if ‐ else 문을 사용할 때 복잡하고 번거로운 부분(if, else 계속해서 삽입되는 중괄호들)을 가독성 좋게 구현.
- 비교 조건이 특정 값이나 문자열인 경우 사용
- break 문을 사용하여 각 조건이 만족되면 switch 블 럭 을 빠져나오도록 함
- 자바 14부터 좀 더 간결해진 표현식이 지원 됨 ( break 사용하지 않음 )
switch(입력변수,문자열) {
case 입력값 1 : ...
break;
case입력값2 : ...
break; ...
default :
break;
}
break; 를 만나면 그 다음 조건식은 통째로 생략하고 탈출한다.
package 16;
import java.util.Scanner;
public class SwitchCaseTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//한달이 몇일인지 알려주는 프로그램을 구현해보자
int month = scanner.nextInt();
int day;
switch(month) {
case 1: day = 31;
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 kr.or.kh16;
import java.util.Scanner;
public class SwitchCaseTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//한달이 몇일인지 알려주는 프로그램을 구현해보자
int month = scanner.nextInt();
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+"입니다.");
}
}
//31일 30일 28일 각 각 끝나는 케이스를 묶어주니 가독성이 좋아졌다.
Switch- case (문자열)
자바의 버전 UP이 되어서 문자열도 지원하게 되었다.
package 16;
import java.util.Scanner;
public class SwitchCaseTest2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("매달을 입력하세요.");
String medal = scanner.next();
switch(medal) {
case "gold" : case "GOLD" :
System.out.println("금메달 입니다.");
break;
case "silver" : case "SILVER" :
System.out.println("은메달 입니다.");
break;
case "bronze" : case "BRONZE" :
System.out.println("동메달 입니다.");
break;
default:
System.out.println("메달이 없습니다");
break;
}
}
}
-Switch case는 단독으로 사용하는것이 최상이다.
겹으로 사용하면 상당히 안좋다. 복잡해지고 가독성도 안좋아진다.
Switch Expression
- Java 14 version부터 지원된다.
- 간단하게 쉼표(,)로 조건 구분.
- 식으로 표현 하여 반환 값을 받을 수 있음. 리턴 값이 없는 경우는 오류가 생김.
- yield 키워드 사용.
package kr.or.kh16;
import java.util.Scanner;
public class SwitchCaseUpTest {
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 ->
day = 31;
case 2->
day = 28;
case 4,6,9,11->
day = 30;
default->{
System.out.println("존재하지 않는 달입니다.");
day=-1;
}*///전통적인 방법
day = switch(month) { //리턴타입사용
case 1,3,5,7,8,10,12 ->{
System.out.println("이번달은 31까지입니다.");
yield 31; // 중괄호가 쓰였다면 yield라는 키워드가 있어야 반환이 된다.
}
case 2 ->
28;
case 4,6,9,11 ->
30;
default ->{ //수행문이 두개일때는 중괄호{ } 를 써준다.
System.out.println("존재하지 않는 달입니다.");
yield -1; //반환, day로 리턴
}
};//문장의 끝임으로 ; 사용해준다.
System.out.println(month+"월은"+day+"입니다.");
}
}
//Java 14 version이전은 전통적인 방법, 이후는 함수처럼 사용할 수 있다.
// : 대신 ->
//break문이 사라진다.