[Java] if vs switch

왔다 정보리·2025년 4월 13일
2
post-thumbnail

개발을 진행하면서 if문과 switch문을 각각 언제 사용하는 게 좋은지에 대한 고민이 항상 있었다. 사실 내가 짜는 코드에서는 그렇게 복잡하고 다양한 조건을 사용할 일이 없기 때문에 둘 중 어떤 것을 사용해도 큰 의미가 없겠지만, 한 번 알아보면 좋을 것 같다는 생각이 들어 정리를 하게 되었다.
참고로 나는 그동안 주로 if문을 사용하다가, 단일 값 조건이 많은 경우에는 가독성을 위해 switch문을 사용했었다. 특히 ->로 break문 없이 switch문을 종료할 수 있게 되면서 더 편리하게 사용할 수 있게 되었던 것 같다.

if문


if문

if (조건식) {
    명령문;
}

가장 기본적인 조건문으로, 단일 조건을 검사할 때 사용한다.
조건에 따라 코드의 실행 흐름을 제어할 수 있으며 주어진 조건이 true일 때만 코드 블록이 실행된다. 조건식은 반드시 boolean 값이어야 한다.

if-else문

if (조건식) {
    명령문1;
} else {
    명령문2;
}

조건에 따라 두 가지 중 하나를 선택할 때 사용한다.
조건이 true면 if 블록을 실행하고, 그렇지 않으면 else 블록을 실행한다.

if-else-if문

if (조건1) {
    명령문1;
} else if (조건2) {
    명령문2;
} else {
    명령문3;
}

여러 개의 조건을 순차적으로 검사해야 할 때 사용한다.
조건이 true이면 해당 블록만 실행되고 그 뒤는 무시된다. else는 생략할 수 있다.

switch문


switch문

switch (변수) {
    case1:
        명령문;
        break;
    case2:
        명령문;
        break;
    default:
        명령문; // 모든 case와 일치하지 않을 때 실행
}

하나의 변수값에 따라 여러 경우를 처리할 때 사용하는 조건문이다.
특정 값들과 정확히 일치하는지 비교할 때 유용하다. break를 쓰지 않으면 다음 case로 연속 실행되며, (fall-through 현상) default는 모든 case와 일치하지 않을 경우 실행된다.
int, char, String, enum 등의 고정 값만 사용 가능하다.

fall-through

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에서 같은 처리를 할 때 사용할 수 있다.

Java 14+ switch 표현식

String result = switch (day) {
    case 1, 2, 3 -> "평일";
    case 4 -> "목요일";
    default -> "기타";
};

Java 14부터는 switch문에서 값을 바로 반환할 수 있게 되었다.
->를 사용하면 break 없이 간결하게 작성할 수 있다.

성능 비교


if vs switch

일반적으로 switch문이 성능적으로 더 유리하나, 조건의 개수와 특성에 따라 달라진다.

  1. 조건이 일정 개수를 넘으면 컴파일러가 switch 최적화 (jump table or hash table) 를 적용한다.
  2. if-else-if는 순차적으로 조건을 평가하므로 case가 많을수록 성능 저하가 있다.
  3. 작은 분기 수에서는 성능 차이 거의 없기 때문에 가독성과 용도에 따라 선택하는 것이 좋다.

switch문 최적화 기법

최적화 방식설명
Jump Tableint/enum 값이 연속적일 때 빠르게 분기 가능
Hash TableString 값일 때 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

profile
왔다 정보리

0개의 댓글