자바의 제어문에는 조건문, 반복문 등이 있습니다. 이번 포스팅에서는 조건문에 대해서만 정리해보겠습니다.
if문
if.. 영단어를 생각해주세요. 만약 ~한다면의 의미를 품고 있는 단어입니다. 자바 및 다른 프로그래밍 언어에서도 if문은 만약 조건이 충족한다면 함수 블록 내의 명령을 수행하라!로 사용됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
|
if(조건1)
{
}
else if(조건2)
{
}
else
{
}
|
cs |
만약 조건1이 true라면 if문 블록 내의 명령이 실행이 될 것이고, 조건1은 false인 반면 조건2가 충족될 경우에는 if문 블록은 스킵되며 else if문이 실행됩니다. 조건1가 조건2가 모두 false가 된 경우 else문으로 들어가게 됩니다.
조건에는 저번 시간에 다룬 연산자들이 들어갈 수 있습니다. 만약 num1이 num2보다 크다면?(num1>num2).. 등등으로 표현이 가능하죠. 일반 숫자 하나만 들어갈 경우 0을 제외한 모든 수는 참으로 판별되므로 이를 통한 조건문 제어도 가능합니다.
Switch-case문
switch case 문은 선택문으로 불린다고 합니다. 변수나 식의 값에 대한 다양한 분기를 표현하기에 적합한 조건문입니다.
// Traditional switch
private static int getValueBefore12(String mode) {
int result;
switch (mode) {
case "a":
case "b":
result = 1;
break;
case "c":
result = 2;
break;
case "d":
case "e":
case "f":
result = 3;
break;
default:
result = -1;
}
return result;
}
|
오라클 공식에서 가져온 예제입니다. 자바 버전 12 이전까지는 위의 방식으로 사용합니다. mode라는 하나의 변수에 다양한 분기점이 생길 수 있습니다. if문처럼 맨 위의 조건을 충족하면 해당 케이스로 가고, 아니라면 다음 케이스로 쭉쭉 넘어갑니다. 그 모든 경우가 아니라면 default 문이 실행됩니다. 다만 주의해주셔야 할 부분은 break라는 구문입니다. break문을 걸지 않으면 위에서부터 좌르륵 전부 실행하게 됩니다.
switch case문이 자바 12버전 이후로 변경이 되었습니다.
// Java 13, switch expression returns a value via yield
private static int getValueViaYield(String mode) {
int result = switch (mode) {
case "a", "b":
yield 1;
case "c":
yield 2;
case "d", "e", "f":
// do something here...
System.out.println("Supports multi line block!");
yield 3;
default:
yield -1;
};
return result;
}
|
저는 자바 13버전의 예시를 가져왔습니다. 일단 전통적인 방식에서는 multi case를 case a: case b: 로 표현했다면, case a,b로 묶어서 표현이 가능하도록 바뀌었습니다.(12 버전부터 도입) 또한, yield문을 통한 값의 return이 가능해졌습니다. 위의 코드랑 동일한 내용인데 확실히 코드 길이도 줄고 그렇다고 복잡하지도 않습니다. 이 외에도 화살표 연산자 활용이나 괄호를 통한 스코프 표시등 변화가 생겼습니다.
if vs switch case
switch case문이 케어할 수 없는 부분들만 if문으로 처리하는 것이 더 좋습니다. switch case문에서는 정수형이나 문자형,enum형만 케어가 가능합니다. 복잡하게 a의 값은 true면서 0.01 <=b <0.4 범위 내에 있을 때만 실행해야 된다면 if문이 적절합니다. 사실 b의 값이 실수형인 포인트에서 이미 if문으로 표현해야 했습니다.
multiple 조건의 경우 if문이 switch 문에 비해서 느립니다. 그러나 또 switch case문의 경우 break를 매번 작성해줘야 했으므로 번거로움이 존재했습니다. 최근에는 변화가 생겼으니 경우들을 잘 고려해서 사용하시는 것을 추천드립니다.
제가 차마 다 다루지 못한 내용은 링크를 걸어둘테니 참고해주세요.
www.javatpoint.com/if-else-vs-switch
'Java' 카테고리의 다른 글
[JAVA] JUnit 5 기초 (0) | 2021.04.14 |
---|---|
[JAVA] 자바 제어문 - 반복문 (0) | 2021.04.13 |
[JAVA] 자바 연산자에 대하여 (0) | 2021.04.10 |
[JAVA] 배열 선언하기 및 타입 추론 (0) | 2021.04.09 |
[JAVA] 타입 변환 (0) | 2021.04.08 |