241205 if-else문과 case문 비교

Jongleee·2024년 12월 5일
0

TIL

목록 보기
748/786

1. if-else 문

  • 구조: 조건문을 순차적으로 평가
  • 효율성:
    • 조건이 많아질수록 모든 조건을 하나씩 검사해야 하므로 평균적인 시간 복잡도가 증가
    • 각 조건문은 독립적이기 때문에 다양한 복잡한 표현식을 사용가능
  • 적합한 경우:
    • 조건이 많지 않거나, 복잡한 조건식이 필요한 경우
    • 비교 대상이 특정한 범위에 국한되지 않는 경우 (예: x > 10 && x < 50)

2. switch 문

  • 구조: 특정 값(보통 정수, 열거형, 문자)에 대해 직접 분기
  • 효율성:
    • 컴파일러는 switch 문을 내부적으로 테이블 조회 (jump table) 또는 이진 탐색으로 최적화할 수 있음
      • Jump Table: 조건 값이 연속적일 경우, 고정된 위치로 바로 점프할 수 있어 O(1) 성능.
      • 이진 탐색: 값이 연속적이지 않으면 O(log n) 성능.
    • 조건이 많을수록 switch 문이 더 효율적일 가능성이 큼
  • 적합한 경우:
    • 조건이 단순히 값 비교일 때 (==)
    • 비교 값이 정수, 열거형, 문자 등으로 제한적일 때

3. 효율성 비교

조건if-else 문switch 문
조건의 개수적을수록 효율적많을수록 효율적
비교 방식복잡한 조건 사용 가능단순한 값 비교만 가능
컴파일러 최적화순차적 검사로 최적화 가능 (O(n))Jump Table 또는 이진 탐색으로 최적화 (O(1) 또는 O(log n))
가독성조건식이 복잡하면 가독성이 떨어질 수 있음분기 처리가 깔끔하게 분리됨

4. 실제 사용 예

  • if-else 추천 사례:

    if (x > 10 && x < 50) {
        // 조건이 복잡한 경우
    } else if (x == 75 || x == 90) {
        // 또 다른 조건
    } else {
        // 기본 처리
    }

    switch 추천 사례:

    switch (x) {
        case 10: 
            // 특정 값 처리
            break;
        case 20: 
            // 또 다른 값 처리
            break;
        default: 
            // 기본 처리
    }

5. 결론

  • 조건이 많거나 정수/문자 값 비교에 적합한 경우, switch 문이 효율적이고 깔끔함
  • 조건이 적거나 복잡한 논리 조건을 사용해야 한다면, if-else 문이 유연함
  • 현대 컴파일러는 if-else 문도 상당히 최적화하므로 차이가 미미할 수 있으나, 큰 코드에서는 switch가 더 효율적일 가능성이 높다

0개의 댓글