-
switch 문, switch문의 제약조건Java/조건문 & 반복문 2020. 10. 22. 15:40
switch 문
if문은 조건식의 결과가 참과 거짓, 두 가지 밖에 없기 때문에 경우의 수가 많아질수록 else - if를 계속 추가해야된다. 그러면 조건식이 많아지고, 그 구조가 복잡해져서 여러개의 조건식을 계산해야 할 때 처리시간도 많이 소요된다.
그래서 이러한 문제점을 피할 수 있는 방법은 switch문을 사용하는 것이다. switch문은 if문과 달리 단 하나의 조건식으로 많은 경우의 수를 처리할 수 있고, 표현도 간결하기 때문에 알아보기도 쉽다. 그래서 처리할 경우의 수, 조건이 많을 때에는 if문보다 switch문으로 작성하는 것이 좋다. 하지만 switch문은 제약조건이 있어서, 경우의 수가 많아도 어쩔 수 없이 if문으로 작성해야 하는 경우도 있다.
switch문은 조건식을 먼저 계산한 다음, 그 결과와 일치하는 case문으로 이동한다. 이동한 case문 아래에 있는 문장들을 수행하면서 break문을 만나면 전체 switch문을 빠져나가게 된다.
switch ( 조건식 1 ) {
case 값1 :
// 조건식의 결과가 값1과 같을 경우 수행될 문장들
// ...
break;
case 값2 :
// 조건식의 결과가 값2와 같을 경우 수행될 문장들
// ...
break;
case 값3 :
// 조건식의 결과가 값3과 같을 경우 수행될 문장들
// ...
break; //switch문을 벗어난다.
default :
// 조건식의 결과와 일치하는 case문이 없을 때 수행될 문장들
// ...
}
만일 조건식의 결과와 일치하는 case문이 하나도 없을 경우에는 default문으로 이동하게된다.
default문은 if문의 else { }과 같은 역할을 한다고 보면 이해하기 쉽다. default문의 위치는 어디에 와도 상관없지만 보통 마지막에 놓기 때문에 break문을 쓰지 않아도 된다.
switch문에서 break문은 각 case 영역을 구분하는 역할을 한다. 만일 break문을 생략하면 case문 사이의 구분이 없어지므로 다른 break문을 만나거나 switch문 { }의 끝을 만날 때 까지 나오는 모든 문장들을 수행해야 된다. 그래서 이러한 이유 때문에 각 case문의 마지막에 break문을 빼먹는 실수를 하지 않도록 꼭 주의해야 된다.
switch문의 제약조건
switch문의 조건식은 결과값이 반드시 정수이어야 한다. 이 값과 일치하는 case문으로 이동하기 때문에 case문의 값 또 한 정수이어야 한다. 그리고 중복되는 정수가 오면 안 된다.
같은 값의 case문이 여러개가 되면, 어디로 이동해야되는지를 알 수 없기 때문이다.
정리>
1. switch문의 조건식 결과는 정수 or 문자열이어야 한다.
2. case문의 값은 정수, 상수(문자 포함), 문자열만 가능하고, 중복이 되면 안 된다.
case문의 몇 가지 예를 아래의 코드를 통해 살펴보자.
package com.jy.controlstatement; import java.util.Scanner; public class Ex4_6 { public static void main(String[] args) { int num, result; final int ONE = 1; Scanner scanner = new Scanner(System.in); result = scanner.nextInt(); switch (result) { case '1': System.out.println("OK 문자 리터럴 - 정수 49와 동일하다."); break; case ONE: System.out.println("OK 정수 상수"); break; case "YES": System.out.println("OK 문자열 리터럴 - JDK 1.7부터 허용한다."); break; case num: System.out.println("error 변수는 불가"); break; case 1.0: System.out.println("error 실수는 불가"); break; default: System.out.println("default"); } } }
위의 코드를 보면 문자 '1'은 정수 49와 동등하므로 문제가 없다. ONE은 정수가 아닌 것처럼 보이지만 'final'을 붙여서 상수로 만들어 놨으므로 case문의 값으로 적합하다. 그러나 변수, 실수 리터럴은 case문의 값으로 적합하지 않다!
[참고 도서 Java의 정석_기초편] http://www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9788994492049&orderClick=LEa&Kc=
'Java > 조건문 & 반복문' 카테고리의 다른 글
임의의 정수 만들기 - Math.random( ), Scanner로 입력받아서 for문을 통해 랜덤으로 숫자 출력해보기 (0) 2020.10.22 switch 문의 제약조건, switch문을 if - else if문으로 변경해보기 (0) 2020.10.22 중첩 if문 (0) 2020.10.22 if - else if 문 (0) 2020.10.22 if - else 문 (0) 2020.10.21