Switch문
기본 문법 (Syntax)
if문의 조건 부분은 불린 결과값을 내는 식이었죠? 그런데 switch문의 조건 부분은 숫자, 문자열 등의 결과값을 내는 식입니다. 그리고 그 결과값에 따라 실행 되는 코드가 정해지는 거죠.
int i = 10;
if (i % 3 == 0) {// i < 20 : 불린 식, 변수, 메소드
System.out.println("C 구역입니다.");
} else if (1 % 3 == 1) {
System.out.println("A 구역입니다.");
} else {
System.out.println("B 구역입니다.");
}
switch (i % 3) {// i : 불린이 아닌 식, 변수, 메소드case 0:
System.out.println("C 구역입니다.");
break;
case 1:
System.out.println("A 구역입니다.");
break;
default:
System.out.println("B 구역입니다.");
break;
}
합격-불합격, 옳다-그르다 등과 같은 방식으로 흐름을 나누는 것보다 여러 개의 동등한 조건의 나열에는 switch문이 더 편리합니다.
예제 1
/*
* A+: 100
* A : 90-99
* B : 80-89
* C : 70-79
* D : 60-69
* F : 0-59
*/// 시험 점수int score = 97;
// 성적
String grade;
위의 기준에 따라 점수를 주는 프로그램을 짜봅시다. 정수 score를 가지고 이 여섯가지 경우를 잘 표현하려면 어떻게 할 수 있을까요?
지난 시간에 정수 나누기 정수는 소수부분이 버려진다고 배웠습니다. score / 10 하면 9.7이었는데 소수 부분이 버려지고 9가 되겠죠? 이 점을 이용하면 score가 90-99일 때를 score / 10이 9와 같을 때로 얘기할 수 있겠죠? 마찬가지로 score가 80-89일 때 score / 10은 8이고, score가 70-79일 때 score / 10은 7입니다.
자, 그럼 스위치 문의 조건부에 score 나누기 10을 넣어봅시다.
switch (score / 10) {
...
}
그리고 switch문의 내용을 적어야 하는데 score / 10이 각각 10, 9, ..., 6인 경우를 적고, 모두 아닐 경우의 default도 적어봅시다.
switch (score / 10) {
case 10:
grade = "A+";
break;
case 9:
grade = "A";
break;
case 8:
grade = "B";
break;
case 7:
grade = "C";
break;
case 6:
grade = "D";
break;
default:
grade = "F";
break;
}
어떻게 진행되는지 볼까요?
score / 10이 10이면 case 10:의 수행 부분으로 들어가서 "A+"가 grade에 지정됩니다. 그리고 break 때문에 바로 switch문은 끝납니다.
마찬가지로 score / 10이 9면 case 9:의 수행 부분으로 들어가서 "A"가 grade에 지정되고, break 때문에 switch문이 끝납니다.
이런 식으로 score / 10이 8, 7, 6인 경우도 비슷하게 동작하겠죠? 그런데 만약에 score / 10이 10, 9, 8, 7, 6 중에 해당되는 값이 없으면 default의 수행 부분으로 들어가서 "F"가 grade에 지정되고 switch문은 끝납니다.
switch문이 끝나고 grade의 값이 뭔지 출력해봅시다.
System.out.println("성적: " + grade);
성적: A
정수 97 나누기 정수 10은 정수 9이기 때문에 "A"가 나오네요.
score를 75로 바꾸고 실행해보면:
// 시험 점수int score = 75;
성적: C
"C"가 출력됩니다.
40으로 바꾸고 실행해보면:
// 시험 점수int score = 40;
성적: F
default로 들어가서 "F"가 출력됩니다.
첫번째 예시를 봤는데요. 이렇게 몇 가지 경우로 딱딱 나누어지는 경우에는 if, else if를 쓰는 것보다 switch를 쓰는 게 훨씬 직관적이죠?
예시를 하나만 더 봅시다.
예제 2
이번에는 switch의 조건 변수를 앞에서 사용했던 문자열 변수 **grade**로 합니다.
switch (grade) {
case "A+":
case "A":
case "B":
System.out.println("참 잘했어요!");
break;
case "C":
case "D":
System.out.println("조금만 더 노력해 볼까요?");
break;
case "F":
System.out.println("Fail입니다.");
default:
System.out.println("다시 수강해주세요.");
break;
}
두 번째 예시는 break문를 주의 깊게 보겠습니다. case "A", case "B"사이에 아무런 명령도 없고 break문도 없죠? 만약 grade가 "A+"면 case "A+"로 들어왔다가, 바로 case "A"로 넘어가고, 또 바로 case "B"로 넘어갑니다. break가 없기 때문이죠.
즉, 이 switch문은 grade가 "A+" 또는 "A" 또는 "B"이면 "참 잘했어요."가 출력되고, "C" 또는 "D"이면 "조금만 더 노력해 볼까요?"가 출력되는 것이죠.
만약 "F"면? 여기 case "F"로 들어와서 "Fail 입니다."가 출력되고, break가 없으니 default로 넘어가서 "다시 수강해 주세요" 까지 출력이 됩니다.
'Programming > Java' 카테고리의 다른 글
자바 기초부터 ABC (11) - For (0) | 2021.11.16 |
---|---|
자바 기초부터 ABC (10) - While (0) | 2021.11.15 |
자바 기초부터 ABC (8) - if, else (0) | 2021.11.14 |
자바 기초부터 ABC (7) - 형변환 (0) | 2021.11.13 |
자바 기초부터 ABC (6) - 연산자 (0) | 2021.11.13 |