
당신은 회원 등급에 따라 다른 쿠폰을 발급하는 프로그램을 작성해야 한다.
이 프로그램은 int grade라는 변수를 사용하며, 회원 등급(grade)에 따라 다음의 쿠폰을 발급해야 한다.
각 쿠폰이 할당된 후에는 “발급받은 쿠폰 ” + 쿠폰값을 출력해야 한다.
2등급 사용자 출력 예)
발급받은 쿠폰 2000
if문을 사용해서 코드를 작성해보자.
package cond;
public class Switch1 {
public static void main(String[] args) {
// grade 1: 1000, 2: 2000, 3: 3000, 나머지: 500
int grade = 2;
int coupon;
if (grade == 1) {
coupon = 1000;
} else if (grade == 2) {
coupon = 2000;
} else if (grade == 3) {
coupon = 3000;
} else {
coupon = 500;
}
System.out.println("발급받은 쿠폰 : " + coupon);
}
}

switch문은 앞서 배운 if문을 조금 더 편리하게 사용할 수 있는 기능이다.
참고로 if문은 비교 연산자를 사용할 수 있지만, switch문은 단순히 값이 같은지만 비교할 수 있다.
switch문은 조건식에 해당하는 특정 값으로 실행할 코드를 선택한다.
switch (조건식) {
case value1:
// 조건식의 결과 값이 value1일 때 실행되는 코드
break;
case value2:
// 조건식의 결과 값이 value2일 때 실행되는 코드
break;
default:
// 조건식의 결과 값이 위의 어떤 값에도 해당하지 않을 때 실행되는 코드
}
case의 값과 일치하면 해당 case의 코드를 실행한다.break 문은 현재 실행 중인 코드를 끝내고 switch문을 빠져나가게 하는 역할을 한다.break문이 없으면, 일치하는 case 이후의 모든 case 코드들이 순서대로 실행된다.default는 조건식의 결괏값이 모든 case의 값과 일치하지 않을 때 실행된다. if문의 else와 같다. default 구문은 선택이다.if, else-if, else 구조와 동일하다.package cond;
public class Switch2 {
public static void main(String[] args) {
// grade 1: 1000, 2: 2000, 3: 3000, 나머지: 500
int grade = 2;
int coupon;
switch (grade) {
case 1:
coupon = 1000;
break;
case 2:
coupon = 2000;
break;
case 3:
coupon = 3000;
break;
default:
coupon = 500;
}
System.out.println("발급받은 쿠폰 : " + coupon);
}
}

만약 break 문이 없으면 어떻게 되는지 확인하기 위해 조건을 변경해보자.
비즈니스 요구사항이 변경되었다. 2등급도 3등급과 같이 3000원 쿠폰을 준다고 해보자.
package cond;
public class Switch3 {
public static void main(String[] args) {
// grade 1: 1000, 2: 3000(변경), 3: 3000, 나머지: 500
int grade = 2;
int coupon;
switch (grade) {
case 1:
coupon = 1000;
break;
case 2:
case 3:
coupon = 3000;
break;
default:
coupon = 500;
break;
}
System.out.println("발급받은 쿠폰 : " + coupon);
}
}
grade가 2등급이면 먼저 case 2가 실행된다.case 2에는 break 문이 없다. 그러면 중단하지 않고 바로 다음에 있는 case 3의 코드를 실행한다. 여기서 coupon = 3000;을 수행하고 break 문을 만나서 swich 문 밖으로 빠져나간다.발급받은 쿠폰 : 3000이 출력된다.switch문의 조건식을 넣는 부분을 잘 보면 x > 10과 같은 참 거짓의 결과가 나오는 조건이 아니라, 단순히 값만 넣을 수 있다.
switch문은 조건식이 특정 case와 같은지만 체크할 수 있다. 쉽게 이야기해서 값이 같은지 확인하는 연산만 가능하다. (문자도 가능)
반면에 if문은 참 거짓의 결과가 나오는 조건식을 자유롭게 적을 수 있다.
예) x > 10, x == 10
정리하자면 switch문 없이 if문만 사용해도 된다. 하지만 특정 값에 따라 코드를 실행할 때는 switch문을 사용하면 if문 보다 간결한 코드를 작성할 수 있다.
switch문은 if문 보다 조금 덜 복잡한 것 같지만, 그래도 코드가 기대보다 깔끔하게 나오지는 않는다. 이런 문제를 해결하고자 자바 14부터는 새로운 switch문이 정식 도입되었다.
기존 코드를 새로운 switch문으로 개발하면 다음과 같다.
package cond;
public class Switch4 {
public static void main(String[] args) {
// grade 1: 1000, 2: 2000, 3: 3000, 나머지: 500
int grade = 2;
int coupon = switch (grade) {
case 1 -> 1000;
case 2 -> 2000;
case 3 -> 3000;
default -> 500;
};
System.out.println("발급받은 쿠폰 : " + coupon);
}
}
기존 switch문과 차이는 다음과 같다.
->를 사용한다.