본문 바로가기
카테고리 없음

C#에서 람다와 Switch 표현식 사용하기

by blacknabis 2024. 5. 14.

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를 그대로 반환합니다.