C# 8.0에서 switch 표현식이 추가 되었습니다.
기본 Switch 표현식
먼저, 기본적인 switch 표현식부터 살펴보겠습니다. 이 표현식은 기존의 switch문과 비슷하지만, 더 간단하게 작성할 수 있다는 장점이 있어요.
var result = someValue switch
{
caseValue1 => result1,
caseValue2 => result2,
_ => defaultValue
};
위 예제에서는 someValue
를 조건으로 하여 각각의 caseValue
에 매칭되는 값을 result
에 할당합니다. _
는 기본값을 의미해요.
람다와 Switch 표현식 결합하기
이제 람다와 switch 표현식을 결합해보겠습니다. 특정 숫자에 따라 다른 람다 함수를 반환하고 싶다고 가정해볼게요.
Func<int, int> operation = number => number switch
{
1 => x => x + 1, // 1일 때는 입력값에 1을 더하는 람다 함수
2 => x => x * 2, // 2일 때는 입력값을 2배하는 람다 함수
_ => x => x // 그 외의 경우에는 입력값을 그대로 반환하는 람다 함수
};
int result1 = operation(1)(5); // 6 (5 + 1)
int result2 = operation(2)(5); // 10 (5 * 2)
int result3 = operation(3)(5); // 5 (입력값 그대로 반환)
위 코드에서는 숫자에 따라 다른 연산을 수행하는 람다 함수를 반환하고 있어요. 예를 들어, 숫자가 1이면 입력값에 1을 더하고, 2이면 입력값을 2배로, 그 외의 경우에는 입력값을 그대로 반환합니다.
조건 기반의 람다 Switch 예제
좀 더 복잡한 조건을 사용하는 경우, when
절을 사용할 수 있습니다. 특정 조건에 따라 다른 연산을 수행하는 람다 함수를 반환하는 예제를 살펴볼게요.
Func<int, int, int> operation = (number, value) => number switch
{
_ when number > 0 && number <= 10 => value * 2, // number가 0보다 크고 10 이하일 때는 value를 2배
_ when number > 10 && number <= 20 => value + 10, // number가 10보다 크고 20 이하일 때는 value에 10을 더함
_ => value // 그 외의 경우는 value를 그대로 반환
};
int result1 = operation(5, 3); // 6 (3 * 2)
int result2 = operation(15, 3); // 13 (3 + 10)
int result3 = operation(25, 3); // 3 (입력값 그대로 반환)
위 예제에서는 number
값에 따라 value
를 다르게 처리하는 람다 함수를 반환합니다. number
가 0보다 크고 10 이하일 때는 value
를 2배로 만들고, 10보다 크고 20 이하일 때는 value
에 10을 더합니다. 그 외의 경우에는 value
를 그대로 반환합니다.