Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# if/else vs switch-case, 무엇이 다를까? 핵심 차이점 완벽 정리

C#에서 if/else와 switch-case의 차이점

C#에서 조건에 따라 실행 흐름을 분기할 때 if/else 문과 switch 문을 모두 사용할 수 있습니다. 두 구문은 비슷한 목적을 가지지만, 내부 동작 방식과 성능, 가독성 측면에서 뚜렷한 차이가 있습니다.

switch 문이란?

switch 문은 매칭 표현식(match expression)과의 패턴 일치를 기준으로 여러 후보 중 하나의 switch 섹션을 선택하여 실행하는 선택(selection) 문입니다. 특히 하나의 표현식을 세 개 이상의 조건과 비교해야 할 때 if-else 구문보다 간결하고 명확한 대안으로 자주 사용됩니다.

핵심 차이점

1. 성능
switch 문이 일반적으로 더 빠릅니다. 컴파일러가 switch 문을 점프 테이블(jump table) 형태로 최적화하기 때문에 case의 개수와 무관하게 평균 비교 횟수가 1회로 유지됩니다. 즉, 임의의 case 조회가 O(1) 시간 복잡도로 수행됩니다. 반면 if/else는 조건을 위에서부터 순차적으로 검사하므로 분기가 많아질수록 평균 비교 횟수가 증가하여 O(n)에 가까워집니다.

2. 가독성
하나의 변수를 여러 고정값과 비교하는 경우 switch 문이 코드의 의도를 더 명확하게 드러냅니다. 반대로 범위 비교(>, <)나 복합 논리 조건(&&, ||)이 필요하다면 if/else가 더 자연스럽습니다.

3. 적합한 사용 조건
전통적인 switch 문은 상수 패턴(constant pattern) 비교에 적합하며, C# 7.0부터 도입된 패턴 매칭을 활용하면 타입 검사 등 더 폭넓은 분기 처리도 가능합니다.

switch 문 사용 예제

class Program {
    public enum Fruits { Red, Green, Blue }

    public static void Main() {
        Fruits c = (Fruits)(new Random()).Next(0, 3);

        switch (c) {
            case Fruits.Red:
                Console.WriteLine("과일 색상은 빨간색입니다");
                break;
            case Fruits.Green:
                Console.WriteLine("과일 색상은 초록색입니다");
                break;
            case Fruits.Blue:
                Console.WriteLine("과일 색상은 파란색입니다");
                break;
            default:
                Console.WriteLine("알 수 없는 과일 색상입니다.");
                break;
        }
        Console.ReadLine();
    }
}

if/else 문 사용 예제

동일한 로직을 if/else로 작성하면 다음과 같습니다.

class Program {
    public enum Fruits { Red, Green, Blue }

    public static void Main() {
        Fruits c = (Fruits)(new Random()).Next(0, 3);

        if (c == Fruits.Red)
            Console.WriteLine("과일 색상은 빨간색입니다");
        else if (c == Fruits.Green)
            Console.WriteLine("과일 색상은 초록색입니다");
        else if (c == Fruits.Blue)
            Console.WriteLine("과일 색상은 파란색입니다");
        else
            Console.WriteLine("알 수 없는 과일 색상입니다.");

        Console.ReadLine();
    }
}

언제 무엇을 사용해야 할까?

  • 단일 표현식을 3개 이상의 고정된 값과 비교할 때 → switch 문 권장
  • 범위 조건이나 복잡한 논리식(&&, ||)을 판단할 때 → if/else 문 권장
  • 분기 수가 많고 성능이 중요한 경우 → switch 문 권장
  • 조건이 1~2개로 단순한 경우 → if/else 문으로 충분

결론

정리하면, 단일 값을 여러 상수와 비교할 때는 switch 문이 성능과 가독성 면에서 유리하고, 범위 조건이나 복합적인 논리 판단이 필요할 때는 if/else 문이 적합합니다. 상황과 목적에 맞게 두 구문을 선택하는 것이 좋은 C# 프로그래밍 습관입니다.