티스토리 뷰

조건이 여러개일때 간다히 표현되는
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문이 사라진다.

'자바(Java)학습 > 1_Java 기초' 카테고리의 다른 글

1.자바 프로그래밍 시작하기  (0) 2021.08.19
0.자바(java)의 기초- 목차  (0) 2021.08.19
15-3. 조건문 최종 실습  (0) 2021.08.18
15-2. 조건문(if-if문)  (0) 2021.08.18
15-1.조건문(if-else if문)  (0) 2021.08.18