switch 조건문
switch문
switch ~ case 문이라고도 하고
if 문과 마찬가지로 특정 조건에 대한 결과에 따라 각각 다른 문장을 실행한다.
<문법 구조>
-switch 문에 판별할 식(또는 값)을 기술하고 일치하는 값을 case 문으로 판별한다.
switch문에 올 수 있는 식 또는 값은 결과값이 정수 or 문자열 or Enum상수다 (int, spring)
=> case 문의 값에 올 수 있는 것은 리터럴(정수,문자열,실제데이터) 뿐이다
=> case 문의 값은 중복될 수 없으며, case 문끼리의 순서는 무관하다.
-판별식과 일치하는 case 문을 실행 후 break 문을 만나면 switch문을 종료한다.
그러나 break문이 없으면 끝까지 간다 .. switch문이 종료될 때까지 아래쪽 모든 case와 default를 실행한다.
-case 문에서 일치하는 값이 없을 경우 default 문을 찾아서 문장을 실행한다
=> if문의 else문의 역할과 동일하다.
=>단, default문은 생략할 수 있음!
<기본 문법>
switch(식 또는 값) {
case 값1 : //식의 판별 결과가 값1과 일치할 때 실행되는 문장; break;
case 값2 : //식의 판별 결과가 값2과 일치할 때 실행되는 문장; break;
case 값3 : //식의 판별 결과가 값3과 일치할 때 실행되는 문장; break;
case 값4 : //식의 판별 결과가 값4과 일치할 때 실행되는 문장; break;
default :
}
int num = 10;
if 문처럼 num > 5 같은 boolean타입은 불가하다. 반드시 정수 또는 문자열만 가능함. (Enum예외)
==>
switch(num) {
case 10 :
System.out.println("num=10"); break;
System.out.println("브레이크를 만나면 멈춰라"); break;
case 9 : System.out.println("num=9"); break;
case 8 : System.out.println("num=8"); break;
case 7 : System.out.println("num=7"); break;
}
break를 사용안하고 실행하면 그냥 10,9,8,7 다 나온다..
case 문 내부에는 여러 줄의 문장이 올 수 있다.
num이 5고 default코드가 들어있다면 일치하는 case문이 없기에 default문을 실행하게 된다.(필수는 아님)
switch문에서 사용 가능한 데이터 형식은?
int num = 10;
switch(num){}
switch(num - 5) {} => 가능 결과값이 중요하다
switch(5) {}
int와 string char 가능합니다
switch문의 장점
- 번역(컴파일) 시점에서 실행할 문장이 이미 결정되므로
if 문에 비해 실행 속도가 빠르다.
switch문의 단점
-if문에 비해 제약 사항이 많으므로 문장 작성에 대한 유연성이 부족하다.
=> if 문을 switch 문으로 전환은 불가능하지만 (범위 값을 넣을 수 없기 때문에)
반대는 가능하다.
int score = 88;
switch(score) {
// 성적 계산을 위해 점수 범위에 따른 학점 출력
//case score >= 90 && score <= 100 : // 오류 발생!
// => 결과값이 int 또는 String 이 아닌 연산식 사용 불가!
// 따라서, 점수 범위 대신 각각의 점수를 직접 입력해야함
case 100 : System.out.println("A학점!"); break;
case 99: System.out.println("A학점!"); break;
case 98: System.out.println("A학점!"); break;
// ......... 생략 ........
case 89: System.out.println("B학점!"); break;
case 88: System.out.println("B학점!"); break;
}
이렇게 하나하나 써야하는 불편함이 존재하기 때문에 if문으로 코드를 짜는게 더 쉽지만
switch문도 약간의 편법을 쓰면 가능하다.
score = 100;
if(score >= 0 && score <= 100) { 100 이상의 값을 넣었을 때 점수 입력 오류를 만들기 위해서 중첩
switch(score / 10) {
case 10 :
case 9 : System.out.println("A학점!"); break;
case 8 : System.out.println("B학점!"); break;
case 7 : System.out.println("C학점!"); break;
case 6 : System.out.println("D학점!"); break;
default : System.out.println("F학점!");
}
} else {
System.out.println("점수 입력 오류!");
}