develop/Java

switch 조건문

마스카포네치즈 2021. 1. 19. 22:26

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("점수 입력 오류!");
}