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# 프로그래밍 습관입니다.