[Snack Java] 9. 자바의 조건문 (SWITCH문)
이전 글 보기
2022.06.05 - [JAVA] - [Snack Java] 8. 자바의 조건문 (If문)
[Snack Java] 8. 자바의 조건문 (If문)
이전 글 보기 2022.06.05 - [JAVA] - [Snack Java] 7. 자바의 콘솔 입력(Console Input) [Snack Java] 7. 자바의 콘솔 입력(Console Input) 이전 글 보기 2022.06.04 - [JAVA] - [Snack Java] 6. 자바의 콘솔 출력..
yunjuniverse.tistory.com
SWITCH문도 IF문과 같이 조건문입니다. 하지만 분명한 차이가 있는데, SWITCH문은 조건문 안의 내용을 맞다 / 아니다로 판별하는 것이 아니라 변수가 어떤 값을 갖느냐에 따라 실행문이 선택됩니다.
그럼 IF문이 있는데 왜 SWITCH문이 쓰일까요? 조금 어려운 말로 하자면 IF문은 true/false라는 두가지 경우만 판별합니다. 이는 마치 이진트리 구조의 알고리즘과 같습니다.
그러나 switch문은 변수의 값에 따라서 실행문이 결정되기 때문에 같은 기능의 if문보다 코드가 간결할 수 있습니다. 일단 형태를 확인해보죠
IF문 보다는 아주 조금 복잡해보이지만 별게 아닙니다. SWITCH문에서는 조건을 두고자하는 변수 즉, 데이터에 case 키워드로 분기를 나눠 실행 결과를 나누고 각 실행 결과는 break라는 키워드를 이용해 구분합니다. 그러나 모든 case를 고려할 수는 없겠죠. 따라서 IF문의 ELSE처럼 case로 지정한 분기에 해당하지 않는 경우에 실행할 수 있는 기본 분기점인 default 분기를 지정합니다. 아래 예시를 보시죠
public class Switchs {
public static void main(String[] args) {
int month = 3;
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: day = 0; System.out.println("달은 1월부터 12월까지입니다."); break;
}
System.out.println(month + "월은 " + day + "일까지입니다.");
}
}
//출력값: 3월은 31일까지입니다.
SWITCH문은 case 키워드 뒤에 조건을 간단하게 지정하여 각 월의 일 수를 출력합니다. 다만, 이렇게 중복되는 실행 결과가 있는 경우 각 조건을 한번에 통합할 수 있습니다. 더 간단한 코드 예시를 보시죠.
public class Switchs {
public static void main(String[] args) {
int month = 3;
int day =0;
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;
}
System.out.println(month + "월은 " + day + "일까지입니다.");
}
}
위와 같이 같은 결과물을 가진 case는 조건문을 한번에 모아 써서 코드를 조금 더 간단하게 만들 수 있습니다. 그리고 default 문과 마지막 case에 있는 break는 생략할 수 있습니다. 위의 코드를 보면 default와 마지막 break는 빠져있는 걸 확인할 수 있습니다.
분기구조를 그려보면 차이가 더 명확하겠군요
* JAVA14부터 지원되는 Swtich Expression으로 더욱 간단하게 만들 수도 있습니다. 하지만 Yield 키워드에 대한 설명이 필요하므로 이후 과정에서 다시 설명하겠습니다.