1. switch문은 무엇일까?
switch문은 Java에서 다중 선택 제어문이다. if-else문의 연속체와 비슷하지만, 주로 선택지가 많은 때 사용한다.
switch (표현식) {
case 값1:
// 값1일 때 실행될 코드
break;
case 값2:
// 값2일 때 실행될 코드
break;
// ...
default:
// 위의 어느 case에도 해당하지 않을 때 실행될 코드
}
사용은 이렇게 하는데 표현식은 주로 변수가 들어가게 된다. 이 변수의 값에 따라 실행될 코드 블록을 결정하기 때문이다.
각 case 뒤에는 해당 값일 때 실행될 코드가 위치하며, break; 문을 통해서 현재 switch문을 빠져 나오지 않으면 코드 작성의 의도와는 다른 동작이 일어날 수 있기 때문에 꼭 break문을 사용해주어야만 한다. default는 case문 중 어느 것에도 해당이 되지 않을 경우 실행되는 코드인데 if-else문의 else와 비슷한 역할을 해준다.
2. switch문의 특징
switch문에는 다중 분기, 정수 또는 문자 값 사용, 비교 연산자 사용, 일치하는 분기 실행 , dafault 분기 이러한 특징들을 가지고 있는데 주로 다양한 경우에 따라 분기를 처리해야 할 경우에 사용된다.
2-1. 다중 선택 가능
switch문은 여러 개의 case를 한 번에 확일할 수 있어, 여러 개의 if-else문을 사용하는 것보다 간결하고 가독성이 좋다.
int num = 2;
switch (num) {
case 1:
System.out.println("1입니다.");
break;
case 2:
System.out.println("2입니다.");
break;
case 3:
System.out.println("3입니다.");
break;
default:
System.out.println("그 외의 숫자입니다.");
}
num이 1,2,3 중 어느 것인지 판단하고 num 값이 참이 되면 break문을 통해서 switch문을 탈출한다.
여러 가지 case를 가독성 좋게 확인할 수 있다는 장점이 있다.
2-2. 다양한 타입 지원
switch문의 표현식은 byte, short, char, int, enum, String 타입을 사용할 수 있다(long타입은 사용 불가)
char grade = 'A';
switch (grade) {
case 'A':
System.out.println("Excellent!");
break;
case 'B':
case 'C':
System.out.println("Well done");
break;
case 'D':
System.out.println("You passed");
break;
case 'F':
System.out.println("Better try again");
break;
default:
System.out.println("Invalid grade");
}
switch문은 char 타입의 grade를 표현식으로 사용하여, 학점에 따라 다른 메세지를 출력시켜 주는데 이처럼 switch문은 if-else문보다 더 다양한 타입의 표현식을 지원해준다.
2-3. 상수 사용
case의 값은 상수여야만 하고 중복은 불가능하다.
잘못된 예
int value = 2;
int valueToCompare = 1;
switch (value) {
case valueToCompare:
System.out.println("It's 1");
break;
default:
System.out.println("It's not 1");
}
이 코드에서 valueToCompare는 case 값으로 사용이 불가능하다. 왜냐면 valueToCompare는 변수이므로 그 값이 변할 수 있기 때문이다. 그렇기 때문에 case문은 반드시 상수가 들어와야한다.
올바른 예
int value = 2;
switch (value) {
case 1:
System.out.println("It's 1");
break;
case 2:
System.out.println("It's 2");
break;
default:
System.out.println("It's not 1 or 2");
}
이 코드에서 case의 값은 상수 1과, 2로, 해당 값들은 변하지 않기 때문에 switch문을 작성할 때는 case의 값이 반드시 상수가 와야한다.
2-4. 풀스루(Fall Through)
break; 문이 없으면, 해당 case 이후의 모든 코드가 실행된다. 이를 풀스루(Fall Through)라고 한다.
int num = 1;
switch (num) {
case 1:
System.out.println("1입니다.");
case 2:
System.out.println("2입니다.");
break;
default:
System.out.println("그 외의 숫자입니다.");
}
이 코드에는 case 1에서는 break;문이 없어서 num이 1인 경우 "1입니다." 탈출하면서 출력해야 하는데 case 2까지 출력 시킨뒤 break문을 통해서 탈출하기 때문에 "1입니다." 와 "2입니다" 모두 출력되게 된다. 이런 경우를 Fall Through 라고 한다.
2-5. default 옵션
default 블록은 선택 가능한 case 중 어느 것에도 해당하지 않을 때 실행되는 부분이다. 이는 if-else문의 else와 비슷한 역할을 해준다.
int num = 4;
switch (num) {
case 1:
System.out.println("1입니다.");
break;
case 2:
System.out.println("2입니다.");
break;
case 3:
System.out.println("3입니다.");
break;
default:
System.out.println("그 외의 숫자입니다.");
}
case 1,2,3,4 모두 해당되지 않기 때문에 default 값을 출력해주는데 if문의 else와 역할이 거의 비슷핟.
default에는 break문을 걸지 않는 이유는 뒤에 더 이상 실행할 case가 없으면 생략이 가능하다고 한다.
default가 중간에 올 경우
int num = 5;
switch (num) {
case 1:
System.out.println("1입니다.");
break;
default:
System.out.println("1 혹은 3이 아닙니다.");
break;
case 3:
System.out.println("3입니다.");
}
이런 경우에는 default에도 break문을 걸어주어야 한다. default 자체가 break문의 성질을 가진 것이 아니기 때문이라고 생각하면 좋다.
3. 마치며
switch문은 막연하게 요일이나 학점 출력할 때 쓰는거? 이런 정도로 알고 있었는데 각각의 특징과 사용처를 알고나니 조금 새롭다.
재정비 겸 기초 문법에 대해서 다시 공부하게 되면서 이건 왜 안될까? 이건 어떨까 했던 것들을 찾아가며 공부하니 느낌이 굉장히 새롭다.
그리고 왜 회사에서 면접 시 언어에 대한 이해도를 중요시 여기는지 알게 되었다.(맞겠지...?)
'Language > Java' 카테고리의 다른 글
반복문 for (0) | 2023.12.13 |
---|---|
반복문 for-each (0) | 2023.12.12 |
반복문 while (0) | 2023.12.11 |
조건문 if (0) | 2023.12.09 |
String과 StringBuilder (0) | 2023.12.04 |
쓰임 있는 사람이 되기 위해 노력 중입니다.