자바에서 조건문 중 switch 구문이 있다.
정해진 어떤 값을 비교하여 프로그램의 흐름이나 또는 값을 가공하는 역할을 한다.
if 조건문이 2개 이상의 값을 비교하는 것과는 다르게
switch 조건문은 1개의 조건값을 비교하고 항상 같다는 조건을 가진다.
간단한 예로 특정 코드 또는 상태값에 대해 어떤 값을 얻거나, 프로그램의, 흐름을 변경하기도 한다.
주로 년,월,일에 대한 특정 동작 또는 어떤 코드값에 대한 특정 동작을 하도록 지정할 수 있다.
자바 코딩 / 조건문 프로그래밍 /
switch ~ case ~ default 사용 방법
자바 코딩의 switch 구문은 조건문이다.
if 조건문이 비교연산자를 사용하는 것과 다르게 switch 조건문은 항상 같은 값을 비교하고 처리한다.
자바의 기본 실행은 다음과 같이 설명할 수 있다.
switch에 어떤 값이 설정되면
case 구문에 설정되어 있는 값과 비교하여 같다면 실행한다.
만약, 어떤 case라도 일치하는 값이 없다면 default 구문에 있는 코드를 실행한다.
- switch( 설정값 )
- switch에 설정값이 설정된다. - case 비교값: 실행될 코드 break;
- switch의 설정값과 case의 비교값이 같다면 코드를 실행한다.
- break; 코드 실행 후 switch 조건문을 중단하고, 다음 case가 실행되는 것을 방지한다. - default :
- 설정값과 비교값이 맞는 case가 없다면 실행된다.
표현식의 경우 자바 14 버전 이상이라면 사용이 가능하다.
자바 조건문 switch case default 문법
switch 조건문의 전통적인 문법 사용 방법은 다음과 같다.
자바 뿐만 아니라 다른 언어도 마찬가지로 사용법은 같다.
switch에 사용된 value 값과 case 에 설정된 값이 동일하게 설정하면, case에 설정된 코드가 실행된다.
switch (value) {
case A:
/* A일 때 실행 코드 */
break;
case B:
/* B일 때 실행 코드 */
break;
default:
/* 위의 case에 일치하는 것이 없는 경우 실행 코드 */
break;
}
자바 버전 14이상이라면 switch 표현식을 사용할 수 있다.
생소하게 보이지만 코드는 간결하다.
차이가 있다면 break; 구문이 없다는 것이다.
전통적인 switch 와 동작방식은 같다.
switch (value) {
case A -> /* A일 때 실행 코드 */;
case B -> /* B일 때 실행 코드 */;
default -> /* 위의 case에 일치하는 것이 없는 경우 실행 코드 */
};
버전확인
switch 조건문을 사용하기 위한 자바 버전을 먼저 확인해 보도록 한다.
여기서 사용하는 자바 버전은 17이다.
여러가지 switch 조건문
swith 조건문을 사용할 때 궁금했던 것은 switch에 들어가는 비교값의 종류이다.
심각하게 생각할 필요는 없지만, 보통 숫자 또는 문자형태의 데이터를 사용할 수 있다.
구체적으로는 int, String, char, enum 객체 등 다양하게 사용이 가능하다.
다만, 중요한 점은 switch(비교값) 과 case 설정값 은 동일해야 한다는 점에 있다.
이제 하나씩 코드를 보자. 코드의 형태는 다양하지만, 요점은 간단하다.
switch (설정값 ) 을 기준으로 어떤 값을 얻고 싶거나 프로그램의 흐름을 지정하고 싶다면 case 비교값 을 설정값과 같도록 하면 된다.
int 사용 switch 조건문
기본적으로 많이 사용되는 방법일 것이다.
숫자형 int 정수를 사용하여 switch 조건문을 사용하는 것이다.
어떤 숫자에 대한 어떤 값을 얻거나 또는 프로그램의 흐름을 지정할 수 있다.
아래는 int 숫자형 정수를 사용해 switch 조건문을 사용한 예제를 보여준다.
랜덤으로 1부터 4까지 숫자를 만들고 해당 숫자를 화면에 표시하도록 하였다.
( 랜덤은 언제나 재미있다. ㅋ )
import java.util.concurrent.ThreadLocalRandom;
public class App_02_Java_Version_int {
public static void main(String[] args) throws Exception {
System.out.println("\n---------- Start\n");
/* 1 ~ 4 랜덤 */
int rnd = ThreadLocalRandom.current().nextInt(1, 5);
/* switch ~ case ~ default */
switch (rnd) {
case 1:
System.out.println("숫자: " + rnd);
break;
case 2:
System.out.println("숫자: " + rnd);
break;
case 3:
System.out.println("숫자: " + rnd);
break;
default:
System.out.println("기타 숫자: " + rnd);
}
System.out.println("\n---------- End\n");
}
}
위의 코드를 보자.
1부터 4까지 int형 숫자를 랜덤으로 생성한다.
case 에 해당하는 숫자의 코드를 실행한다.
만약, case에 해당하는 숫자가 없다면 default 에 있는 코드를 실행한다.
결과는
1부터 3까지는 case로 지정된 코드가 실행되고,
4인 경우 default에 지정된 코드가 실행된다.
아래는 실행 결과를 보여준다.
char[] 사용 switch 조건문
switch 조건문은 데이터 형태과 값이 맞으면 된다.
char[] 배열을 사용할 수도 있는데, 만약 코드로써 사용하면 유용하다.
아래의 코드를 보면 이해가 될 것이다.
char[] 배열을 하나 만들고 알파벳을 설정했다.
랜덤으로 배열의 위치를 선택한다.
그리고, 선택된 배열의 알파벳을 읽고, case 에 조건이 맞는 코드를 실행하도록 하였다.
이제 코드를 보자.
import java.util.concurrent.ThreadLocalRandom;
public class App_03_Java_Version_char {
public static void main(String[] args) throws Exception {
System.out.println("\n---------- Start\n");
/* char 배열 */
char[] arrChar = new char[] { 'A', 'B', 'C', 'D' };
/* 0 ~ 3 랜덤 */
int rnd = ThreadLocalRandom.current().nextInt(0, 4);
/* switch ~ case ~ default */
char valChar = arrChar[rnd];
switch (valChar) {
case 'A':
System.out.println("선택된 문자: " + valChar);
break;
case 'B':
System.out.println("선택된 문자: " + valChar);
break;
case 'C':
System.out.println("선택된 문자: " + valChar);
break;
default:
System.out.println("default - 기본 문자: " + valChar);
}
System.out.println("\n---------- End\n");
}
}
어렵지 않다.
배열에서 알파벳을 읽고, case의 조건이 맞는 알파벳 값의 코드를 읽는다.
만약, case에 설정된 값이 없다면 default 에 있는 코드를 실행한다.
결과를 보면 다음과 같다.
String[] 사용 switch 조건문
switch 조건문은 String[] 배열을 사용하여 조건에 맞는 코드를 실행할 수 있다.
앞서 언급한 char[] 배열을 사용하는 것과 마찬가지이다.
코드는 같으며, char[] 배열을 String[]로 변경한 정도이다.
String[] 배열을 사용한 switch 조건문을 사용하는 보편적인 예제는 보통 요일에 대한 선택일 것이다.
코드를 보자.
import java.util.concurrent.ThreadLocalRandom;
public class App_04_Java_Version_string {
public static void main(String[] args) throws Exception {
System.out.println("\n---------- Start\n");
/* String 배열 */
String[] arrString = new String[] { "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN" };
/* 0 ~ 7 랜덤 */
int rnd = ThreadLocalRandom.current().nextInt(0, 7);
/* switch ~ case ~ default */
String valString = arrString[rnd];
switch (valString) {
case "MON":
System.out.println("선택된 요일 MON: " + valString);
break;
case "TUE":
System.out.println("선택된 요일 TUE: " + valString);
break;
case "WED":
System.out.println("선택된 요일 WED: " + valString);
break;
case "THU":
System.out.println("선택된 요일 THU: " + valString);
break;
case "FRI":
System.out.println("선택된 요일 FRI: " + valString);
break;
case "SAT":
System.out.println("선택된 요일 SAT: " + valString);
break;
default:
System.out.println("기본 요일: " + valString);
break;
}
System.out.println("\n---------- End\n");
}
}
랜덤으로 숫자를 만들고, String[] 배열에 있는 요일 문자열을 검색하여 읽는다.
읽은 요일 문자열은 case 구문의 값을 비교하고, 코드를 실행한다.
case 에 맞는 요일 문자열이 없다면, default 에 있는 코드를 실행한다.
아래는 위의 코드에 대한 실행 결과를 보여준다.
String[] 사용 switch 집합 조건문
switch 조건문은 집합 개념이 존재한다.
개념이라고 하지만, break 구문을 제거하면 된다.
만약, switch에 설정된 값이 여러 가지 case에 동일하게 되는 경우 필요하다.
아래의 코드를 보자.
월요일부터 금요일까지는 주중이고, 토요일과 일요일은 주말이다.
주중이란 메세지를 출력할 때 월요일부터 금요일까지의 설정값은 다르지만, 동일하게 동작하기 때문에 break 구문을 없애면 된다.
break 구문을 코드를 실행한 후 switch 조건문을 중단하는 역할을 한다.
break 구문이 없다면 다음 case 구문을 비교하고 실행하게 될 것이다.
import java.util.concurrent.ThreadLocalRandom;
public class App_05_Java_Version_case_set {
public static void main(String[] args) throws Exception {
System.out.println("\n---------- Start\n");
/* char 배열 */
String[] arrString = new String[] { "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN" };
/* 0 ~ 7 랜덤 */
int rnd = ThreadLocalRandom.current().nextInt(0, 7);
/* switch ~ case ~ default */
String valString = arrString[rnd];
switch (valString) {
case "MON":
case "TUE":
case "WED":
case "THU":
case "FRI":
System.out.println("주중: " + valString);
break;
case "SAT":
case "SUN":
System.out.println("주말: " + valString);
break;
default:
System.out.println("기본 요일: " + valString);
break;
}
System.out.println("\n---------- End\n");
}
}
String[] 배열에서 랜덤으로 설정한 월요일부터 금요일까지의 어떤 문자열을 읽었을 때 case 구문을 비교할 것이며, 월요일부터 금요일까지의 문자열은 break 있는 금요일까지 비교하고 실행된다.
토요일과 일요일도 마찬가지.
break 구문이 금요일과 일요일에 있는 것에 주목하자.
enum 사용 switch 조건문
코딩을 하다보면 enum을 자주 사용하게 될 수도 있다.
특정 코드를 모아두고 특정 단어 또는 문자에 대해 프로그램의 흐름을 지정하거나 어떤 값을 가공할 수 있다.
enum을 간단히 언급하면 상수들의 집합 정도라 생각하자.
상수를 자주 사용하는 경우들은 많은데, 비슷한 것들을 enum에 넣어두고 사용할 수 있다.
enum에 설정된 값들은 static final 로 한 번 설정되면 변경이 불가하다.
이제 enum을 사용한 switch case 조건문을 살펴보자.
import java.util.concurrent.ThreadLocalRandom;
public class App_06_Java_Version_case_enum {
public static void main(String[] args) throws Exception {
System.out.println("\n---------- Start\n");
/* enum */
enum Day {
MON, TUE, WED, THU, FRI, SAT, SUN
}
/* random 선택 */
Day[] days = Day.values();
Day today = days[ThreadLocalRandom.current().nextInt(days.length)];
System.out.println(today);
switch (today) {
case MON:
case TUE:
case WED:
case THU:
case FRI:
System.out.println("주중입니다.");
break;
case SAT:
case SUN:
System.out.println("주말입니다.");
break;
default:
break;
}
System.out.println("\n---------- End\n");
}
}
enum을 Day[] 배열로 만들고, 랜덤으로 생성된 숫자를 이용해 Day[] 배열에서 요일 문자열을 읽는다.
이 후 case 구문을 비교하여 해당하는 요일 문자가 있다면 코드를 실행한다.
이번에도 break 구문이 없다는 것에 주목하자.
데이터형태가 변경되었을 뿐 위의 String[] 배열을 사용한 switch 집합 코드와 다른 점은 없다.
아래는 코드가 실행된 결과 화면을 보여준다.
switch 표현식 조건문
자바 버전이 14이상이라면 표현식을 사용할 수 있다.
표현식은 기존의 방식이 아닌 -> 기호를 사용하여 case 조건을 구분하는 것이다.
전통적인 방식의 switch 조건문보다 사용 편의성이 좋다.
코드를 보자.
import java.util.concurrent.ThreadLocalRandom;
public class App_06_Java_switch_expression {
public static void main(String[] args) throws Exception {
System.out.println("\n---------- Start\n");
/* 1 ~ 5 랜덤 */
int rnd = ThreadLocalRandom.current().nextInt(1, 6);
System.out.println("랜덤 값: " + rnd);
String result = switch (rnd) {
case 1 -> "일";
case 2 -> "이";
case 3 -> "삼";
case 4 -> "사";
default -> "몰?루?";
};
System.out.println("선택된 값: " + result);
System.out.println("\n---------- End\n");
}
}
switch 조건 표현식을 사용했으며 -> 기호는 코드를 단순화 시켜준다.
위의 코드에서 문자열 변수에 값을 설정하고 있지만, 굳이 사용은 안해도 되며, 코드의 간편한 사용을 위해 굳이 작성했다.
표현식을 사용하면 break 구문이 없다는 것에 주목하자.
아래는 switch 조건문 표현식 코드에 대한 실행결과를 보여준다.
switch 집합 표현식 조건문
switch 표현식 조건문 또한 집합 개념을 사용할 수 있다.
전통적으로 break 구문을 사용하는 경우 break 구문을 지우면 집합처럼 사용할 수 있지만,
switch 표현식은 break 구문이 없다.
break 구문이 없기 대문에 case 구문에 비교값을 여러 개 나열하여 집합 개념을 사용할 수 있다.
코드를 보자.
import java.util.concurrent.ThreadLocalRandom;
public class App_06_Java_switch_expression_set {
public static void main(String[] args) throws Exception {
System.out.println("\n---------- Start\n");
/* enum */
/* 1 ~ 5 랜덤 */
int rnd = ThreadLocalRandom.current().nextInt(1, 6);
System.out.println("랜덤 값: " + rnd);
String result = switch (rnd) {
case 1, 2 -> "일,이";
case 3, 4 -> "삼,사";
default -> "몰?루?";
};
System.out.println("선택된 값: " + result);
System.out.println("\n---------- End\n");
}
}
case에 비교문이 여러 개 나열하여 사용한다.
그리고, case에 맞는 값는 비교값이 있다면 코드를 실행한다.
break 구문이 없기 때문에 이러한 방식을 사용하지만, 다르게 보면 간편해 보인다.
하지만, 가끔은 전통적인 방식이 더 편할 때도 있는 것은 함정이다.
아래는 위의 자바 코드를 실행한 결과 화면이다.
댓글
댓글 쓰기