C#에서는 하나의 switch 문 안에 또 다른 switch 문을 넣어 사용할 수 있습니다. 이를 중첩 switch(nested switch)라고 부르며, 외부(outer) switch의 case 문 시퀀스 내부에 내부(inner) switch를 배치하는 형태로 작성합니다.
흥미로운 점은 외부 switch와 내부 switch의 case 상수 값이 서로 같더라도 충돌이 발생하지 않는다는 것입니다. 컴파일러가 각 switch 블록을 독립적으로 처리하기 때문입니다.
중첩 switch 문 기본 문법
중첩 switch 문의 기본적인 문법 구조는 다음과 같습니다.
switch(ch1) {
case 'A':
Console.WriteLine("This A is part of outer switch");
switch(ch2) {
case 'A':
Console.WriteLine("This A is part of inner switch");
break;
case 'B': /* 내부 B case 코드 */
}
break;
case 'B': /* 외부 B case 코드 */
}중첩 switch 문 예제
아래는 C#에서 중첩 switch 문을 실제로 사용한 예제입니다. 먼저 간단한 형태부터 살펴보겠습니다.
switch (a) {
case 100:
Console.WriteLine("This is part of outer switch ");
switch (b) {
case 200:
Console.WriteLine("This is part of inner switch ");
break;
}
break;
}이제 전체 코드를 포함한 완성된 예제를 확인해 보겠습니다.
전체 예제 코드
using System;
namespace Demo {
class Program {
static void Main(string[] args) {
int a = 100;
int b = 200;
switch (a) {
case 100:
Console.WriteLine("This is part of outer switch ");
switch (b) {
case 200:
Console.WriteLine("This is part of inner switch ");
break;
}
break;
}
Console.WriteLine("Exact value of a is : {0}", a);
Console.WriteLine("Exact value of b is : {0}", b);
Console.ReadLine();
}
}
}실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
This is part of outer switch This is part of inner switch Exact value of a is : 100 Exact value of b is : 200
정리 및 활용 팁
변수 a의 값이 100이므로 외부 switch의 첫 번째 case가 실행되고, 이어서 변수 b를 평가하는 내부 switch가 동작하여 두 번째 메시지가 출력됩니다. 이처럼 중첩 switch는 여러 조건을 계층적으로 검사해야 할 때 유용하게 활용할 수 있습니다.
다만 중첩이 깊어질수록 코드 가독성이 떨어질 수 있으므로, 가능하다면 논리 연산자(&&, ||)를 활용한 조건문이나 C# 8.0 이상에서 지원되는 switch 식(switch expression)과 패턴 매칭을 대안으로 고려하는 것이 좋습니다.