기본 패턴
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