switch
if문은 조건식의 결과가 true, false 두 가지밖에 없기 때문에 경우의 수가 많아질수록 else if를 반복적으로 추가해야 하므로 코드가 복잡해진다. 그러나 switch문은 변수의 값에 따라 실행문이 결정되기 때문에 같은 기능의 if문보다 코드가 간결해진다.
switch(입력변수) {
case 입력값1: ...
break;
case 입력값2: ...
break;
...
default: ...
break;
}
괄호 안의 변수값에 따라 해당 case로 가서 실행문을 실행시킨다.
변수값과 동일한 값을 갖는 case가 없다면 default로 가서 실행문을 실행시키며, default는 생략 가능하다.
case 끝에 있는 break는 다음 case를 실행시키지 않고 switch문을 빠져나간다.
break가 없다면 다음 case가 연달아 실행되지만 case 값과는 상관 없이 실행된다.
break 문이 없는 예제 코드
package ch04.sec03;
public class SwitchNoBreakCaseExample {
public static void main(String[] args) {
int time = (int) (Math.random() * 4) + 8;
System.out.println("현재시간" + time);
switch (time) {
case 8:
System.out.println("출근");
case 9:
System.out.println("회의");
case 10:
System.out.println("업무");
default:
System.out.println("외근");
}
}
}
출력 결과
switch 문의 괄호에는 정수 타입(byte, char, short, int, long)과 문자열 타입(String) 변수를 사용할 수 있다.
char 타입 변수를 이용해서 대소문자에 관계 없이 처리하는 예제 코드
public static void main(String[] args) {
char grade = 'a';
switch (grade) {
case 'A':
case 'a':
System.out.println("우수 회원");
break;
case 'B':
case 'b':
System.out.println("일반 회원");
break;
default:
System.out.println("손님");
}
}
switch Expressions(표현식)
Java 12 이후부터 사용 가능하며, break 문을 없애는 대신에 화살표와 중괄호를 사용하여 표현 가능하다.
예제 코드1
public static void main(String[] args) {
char grade = 'B';
switch (grade) {
case 'A', 'a' -> {
System.out.println("우수 회원");
}
case 'B', 'b' -> {
System.out.println("일반 회원");
}
default -> {
System.out.println("손님");
}
}
}
예제 코드2
public static void main(String[] args) {
char grade = 'B';
switch (grade) {
case 'A', 'a' -> System.out.println("우수 회원");
case 'B', 'b' -> System.out.println("일반 회원");
default -> System.out.println("손님");
}
}
중괄호 안에 실행문이 하나만 있을 경우에는 중괄호 생략이 가능하다.
switch Expressions을 사용하면 스위치된 값을 변수에 바로 대입 가능하다. 단일 값인 경우는 화살표 오른쪽에 값을 기술하고, 중괄호를 사용하는 경우는 yield(Java 13부터 사용 가능) 키워드로 값을 지정하면 된다. 이런 경우에는 반드시 default가 존재해야 한다.
yield 예제 코드
public static void main(String[] args) {
String grade = "B";
// Java 12부터 가능
int score = switch (grade) {
case "A" -> 100;
case "B" -> {
int result = 100 - 20;
// Java 13부터 가능
yield result;
}
default -> 60;
};
System.out.println("score = " + score);
;
}
JavaScript의 화살표 함수랑 비슷하다...
'IT > Java' 카테고리의 다른 글
[Java] while / do-while (0) | 2024.02.23 |
---|---|
[Java] for문 (0) | 2024.02.22 |
[Java] Math.random() (0) | 2024.02.21 |
[Java] 연산의 방향과 우선순위 (0) | 2024.02.21 |
[Java] 삼항(조건) 연산자 (0) | 2024.02.21 |