byte fingersOut = 2;
// 💡 switch : 괄호 안에 기준이 될 변수를 받음
// 가능한 자료형: byte, short, int, char, String, enum(이후 배움)
// boolean을 쓸거면 그냥 if문을 쓴다.
switch (fingersOut) {
// 💡 case : 기준에 일치하는 case로 바로 이동
// 💡 break : switch문 실행을 종료
// 💡 default: 해당하는 case가 없을 때 - 마지막에 작성
case 2:
System.out.println("가위");
break;
case 0:
System.out.println("바위");
break;
case 5:
System.out.println("보");
break;
default:
System.out.println("무효");
}
case 뒤에 오는 자료형은 위에 switch(자료형) 에 들어있는 자료형과 일치시켜줘야 한다.
만약 case에 break를 걸어주지 않으면 break를 걸어주지 않은 부분이 모두 실행되는 것을 볼 수 있다.
case에 각각의 경우에 대응하는 값과 실행될 코드를 넣어주고, 그 경우가 아닌 경우에 실행할 코드를 default에 넣어주는 방식이다.
String direction = "north";
String dirKor;
// break 제거하고 실행해 볼 것
switch (direction) {
case "north":
dirKor = "북";
break;
case "south":
dirKor = "남";
break;
case "east":
dirKor = "동";
break;
case "west":
dirKor = "서";
break;
default:
dirKor = null;
}
System.out.println(
dirKor != null ? dirKor : "무효"
);
// 💡 break 관련 동작방식을 이용
char yutnori = '도';
switch (yutnori) {
case '모': System.out.println("앞으로");
case '윷': System.out.println("앞으로");
case '걸': System.out.println("앞으로");
case '개': System.out.println("앞으로");
case '도': System.out.println("앞으로"); break;
default:
System.out.println("무효");
}
만약 위에 코드에서 char가 '도'면 앞으로가 한번 출력될 것이다. 만약 char가 '개'면 앞으로가 두 번 출력될 것이다. 왜냐하면 '개'의 case 부분에 break가 없으므로 '개'의 case부분과 '도'의 case 부분이 모두 출력되는 것이다. 똑같은 로직으로 char가 '윷'이 된다면 앞으로가 네 번 출력될 것이다.
byte month = 1;
byte season;
switch (month) {
case 1: case 2: case 3:
season = 1;
break;
case 4: case 5: case 6:
season = 2;
break;
case 7: case 8: case 9:
season = 3;
break;
case 10: case 11: case 12:
season = 4;
break;
default:
season = 0;
}
System.out.println(
season > 0
? "지금은 %d분기입니다.".formatted(season)
: "무효한 월입니다."
);
다음과 같은 코드 작성도 가능하다. case1, case2, case3이 붙어있는 것을 볼 수 있는데, 이 경우 1,2,3일때 모두 같은 코드를 실행한다는 것을 의미한다.
byte startMonth = 1;
String holidays = "";
switch (startMonth) {
case 1:
holidays += "설날, ";
case 2:
case 3:
holidays += "3·1절, ";
break;
case 4:
case 5:
holidays += "어린이날, ";
case 6:
holidays += "현충일, ";
break;
case 7:
case 8:
holidays += "광복절, ";
case 9:
holidays += "추석, ";
break;
case 10:
holidays += "한글날, ";
case 11:
case 12:
holidays += "크리스마스, ";
break;
default:
holidays = null; // 휴일이 없는 분기와 구분
}
String result = holidays == null
? "(잘못된 월입니다)"
: "분기 내 휴일: " + holidays
.substring(0, holidays.lastIndexOf(", "));