[C#] 패턴 매칭 (var, 무시)

Learning 

When: 1학년 8월 31일

 

How:

최근에 패턴 매칭을 접하게 되었는데 예전에 너무 어려워서 넘겼던 생각이 나서 지금은 어떨지 확인도 할 겸 다시 한번 공부하게 되었습니다.

 

Understanding:

  • var 패턴 : var 패턴은 비교할 식이 무엇이든 전부 성공시켜서 변수에 담습니다.
    if (a is var s) 이런 코드를 쓴다면 a가 null, int, string, class, 등등 아무런 신경도 쓰지 않고 s에 담아버립니다.
    좀 극단적으로 예시를 들자면 MyClass.Instance.GetValue(3) * MathF.PI 라는 값에
    추가적인 연산이나 복사가 필요할 때 사용할 수 있습니다.
int a = 10;
int b = 20;
if (a * b is var s)
{
    int c = s++;
    for (int i = s; i < c; i++)
    {
        //코드를 이해하려고 하지 마세요. 이렇게 캐싱하여 
        //사용할 수도 있다는 것을 보여주기 위한 억지 코드입니다.
    }
}
  • 무시 패턴 : 무시 패턴은 var 패턴처럼 모든 검사를 성공시키는데, switch 식에서는
    default를 쓰지 못하기 때문에 '_' 라는 키워드를 사용해서 위의 패턴에서 걸러지지 않은 패턴을
    처리할 수 있도록 합니다. 무시 패턴은 맨 마지막에 검사하지 않으면 컴파일 에러가 납니다.
    무시 패턴이 아니기는 하지만 튜플에서도 (a, _, b) = (10, 20, 40); 이렇게 discard 키워드로 분해할 때
    원치 않는 패턴을 무시할 수 있습니다.
var action = (int a) => a switch
{
    > 10 => "10보다 큼",
    _ => "10보다 작음"
};

 

Result: 패턴 매칭이 코드를 짧게 하는 것을 중점으로 만들어진 코드이기도 하고, 익숙하지 않은 문법과 많은 사전 지식이 필요해서 의외로 어렵기는 했지만 쓸모는 많을 것 같습니다.

'C#' 카테고리의 다른 글

[C#] switch 식  (0) 2025.09.02
[C#] 패턴 매칭 (목록 패턴)  (0) 2025.09.01
[C#] 패턴 매칭 (위치)  (0) 2025.08.30
[C#] 패턴 매칭 (관계, 논리)  (0) 2025.08.29
[C#] 패턴 매칭 (프로퍼티, 괄호)  (0) 2025.08.28