C#제어 흐름

고급 pattern과 list pattern

`and`, `or`, `not`, property pattern, list pattern처럼 현대 C#에서 분기 로직을 더 선언적으로 만드는 패턴들을 정리합니다.

마지막 수정 2026년 3월 22일

기본 패턴

csharp
string label = input switch
{
    [1, 2, ..] => "starts with 1,2",
    { Count: > 0 } and not null => "non-empty collection",
    _ => "other"
};

설명

  • 현대 C#의 pattern matching은 단순 타입 검사 문법을 넘어, "값의 구조와 특징"으로 분기하는 도구가 됐습니다. 그래서 if-else를 줄이는 수준이 아니라 데이터 해석 방식을 더 선언적으로 바꾸는 역할을 합니다.
  • and, or, not 패턴은 여러 조건을 조합해 읽기 좋은 규칙으로 만들고, property pattern은 객체의 속성 구조를 직접 분기문 안에서 확인하게 해 줍니다.
  • list pattern은 배열이나 리스트 같은 시퀀스의 앞부분, 길이, 특정 위치의 값을 기준으로 분기할 수 있게 해 줍니다. 파서, 명령 토큰, 입력 패턴 구분에서 특히 유용합니다.
  • 중요한 것은 문법 화려함보다 의도 표현입니다. 패턴이 잘 맞는 경우는 "데이터 구조 자체가 분기의 근거"일 때이고, 절차가 더 중요한 경우에는 전통적인 코드가 더 읽기 쉬울 수 있습니다.
  • 이 기능은 records, tuples, switch expression과 같이 쓸 때 특히 힘이 커집니다. 즉 C#의 현대 문법들은 서로 따로가 아니라 함께 조합될 때 더 가치가 큽니다.

빠른 정리

패턴잘 맞는 상황
and / or / not조건 조합
property pattern객체 속성 기반 분기
positional pattern분해 가능한 값 분기
list pattern시퀀스 형태 분기
핵심 기준데이터 구조가 곧 분기 근거일 때

주의할 점

pattern 하나에 너무 많은 규칙을 밀어 넣으면 "짧지만 해석이 어려운 식"이 되기 쉽습니다. 분기 규칙이 길어질수록 helper 메서드나 더 작은 패턴으로 쪼개는 편이 좋습니다.

참고 링크

1 sources