
개발을 진행하면서 if문과 switch문을 각각 언제 사용하는 게 좋은지에 대한 고민이 항상 있었다. 사실 내가 짜는 코드에서는 그렇게 복잡하고 다양한 조건을 사용할 일이 없기 때문에 둘 중 어떤 것을 사용해도 큰 의미가 없겠지만, 한 번 알아보면 좋을 것 같다는 생각이 들어 정리를 하게 되었다.
참고로 나는 그동안 주로 if문을 사용하다가, 단일 값 조건이 많은 경우에는 가독성을 위해 switch문을 사용했었다. 특히 ->로 break문 없이 switch문을 종료할 수 있게 되면서 더 편리하게 사용할 수 있게 되었던 것 같다.
if (조건식) {
명령문;
}
가장 기본적인 조건문으로, 단일 조건을 검사할 때 사용한다.
조건에 따라 코드의 실행 흐름을 제어할 수 있으며 주어진 조건이 true일 때만 코드 블록이 실행된다. 조건식은 반드시 boolean 값이어야 한다.
if (조건식) {
명령문1;
} else {
명령문2;
}
조건에 따라 두 가지 중 하나를 선택할 때 사용한다.
조건이 true면 if 블록을 실행하고, 그렇지 않으면 else 블록을 실행한다.
if (조건1) {
명령문1;
} else if (조건2) {
명령문2;
} else {
명령문3;
}
여러 개의 조건을 순차적으로 검사해야 할 때 사용한다.
조건이 true이면 해당 블록만 실행되고 그 뒤는 무시된다. else는 생략할 수 있다.
switch (변수) {
case 값1:
명령문;
break;
case 값2:
명령문;
break;
default:
명령문; // 모든 case와 일치하지 않을 때 실행
}
하나의 변수값에 따라 여러 경우를 처리할 때 사용하는 조건문이다.
특정 값들과 정확히 일치하는지 비교할 때 유용하다. break를 쓰지 않으면 다음 case로 연속 실행되며, (fall-through 현상) default는 모든 case와 일치하지 않을 경우 실행된다.
int, char, String, enum 등의 고정 값만 사용 가능하다.
int day = 1;
switch (day) {
case 1:
case 2:
case 3:
System.out.println("평일입니다.");
break;
case 4:
System.out.println("목요일입니다.");
break;
}
switch문에서 break를 사용하지 않았을 때 발생한다.
break를 쓰지 않으면 다음 case로 연속 실행되기 때문에, 의도적으로 여러 case에서 같은 처리를 할 때 사용할 수 있다.
String result = switch (day) {
case 1, 2, 3 -> "평일";
case 4 -> "목요일";
default -> "기타";
};
Java 14부터는 switch문에서 값을 바로 반환할 수 있게 되었다.
->를 사용하면 break 없이 간결하게 작성할 수 있다.
일반적으로 switch문이 성능적으로 더 유리하나, 조건의 개수와 특성에 따라 달라진다.
if-else-if는 순차적으로 조건을 평가하므로 case가 많을수록 성능 저하가 있다.| 최적화 방식 | 설명 |
|---|---|
| Jump Table | int/enum 값이 연속적일 때 빠르게 분기 가능 |
| Hash Table | String 값일 때 hashCode() 기반 분기 최적화 |
| 상황 | 추천 조건문 |
|---|---|
| 범위 조건 혹은 복합 조건 (x > 10 && x < 20) | if |
| 단일 값 비교 | switch |
| 많은 case로 인해 성능 최적화 필요 | switch |
| 읽기 쉬운 코드 필요 | switch |
| 조건 우선순위가 중요한 경우 | if-else-if |
| 목적 | 추천 |
|---|---|
| Enum 상태 분기 처리 | switch |
| 복잡한 인증 조건, 사용자 권한 판단 | if-else-if |
| 단순 메뉴나 명령어 처리 | switch |
| 조건 순서에 따라 로직 우선순위 부여 | if-else-if |
[Java] 조건문_if문, switch문
Is "else if" faster than "switch() case"?
switch vs if 어떤 때 어느게 효율적인가요? | KLDP