pattern matching으로 조건문을 더 간결하고 직관적으로 표현하기

C#의 Pattern Matching(패턴 매칭) 은 is, switch, when 구문을 활용하여
값과 타입을 동시에 비교하는 기능입니다.
기존의 다중 if-else 문을 대체해 코드 가독성과 유지보수성을 높이며,
타입 검사와 조건 검사를 하나로 통합할 수 있습니다.
C# 9 이후에는 논리 패턴, 관계 패턴, 조합 패턴까지 지원되어
훨씬 강력해졌습니다.
string GetAccessLevel(object user) => user switch
{
Admin a when a.Level > 5 => "최고 관리자",
Admin => "일반 관리자",
Guest => "게스트 사용자",
null => "로그인 필요",
_ => "일반 사용자"
};
패턴이 누락되면 런타임 예외가 발생할 수 있으므로
_(default) 패턴은 항상 추가하는 것이 좋습니다.
복잡한 조건 로직을 모두 switch로 옮기면 오히려
가독성이 떨어질 수 있습니다.
.NET Framework 4.x에서는 C# 7까지의 기본 패턴만 지원되므로,
최신 문법은 .NET 5 이상 환경에서만 동작합니다.
사용자 권한/역할 분기, API 응답 코드 처리,
UI 상태 전환 등 다중 조건 로직에 최적.
형태 기반 처리(Shape-based) 로 객체 타입별
분기 처리 시 깔끔한 구조 유지.
보안/로깅 시 특정 타입이나 속성 조합별 예외 처리 로직에 활용 가능.
논리 패턴 (and/or/not)
bool IsValid(int age) => age is >= 18 and < 65;
튜플 패턴 (복합 조건)
string GetWeather((bool isRainy, bool isCold) w) => w switch
{
(true, true) => "춥고 비 오는 날",
(true, false) => "따뜻한 비",
(false, true) => "쌀쌀하지만 맑음",
_ => "좋은 날씨"
};
관계 패턴 (<, >, <=, >=) 로 숫자 조건도 명확하게 표현 가능.

#CSharp #패턴매칭 #switch표현식 #is패턴 #when조건 #dotnet #조건분기
#가독성향상 #CSharp9 #논리패턴
'CSharp > CShap Tip' 카테고리의 다른 글
| 구조적 로깅(Structured Logging)과 ILogger<T> 활용하기 (0) | 2025.11.19 |
|---|---|
| ValueTuple로 여러 값을 간단하고 효율적으로 반환하기 (0) | 2025.11.17 |
| async streams로 비동기 데이터 스트림을 효율적으로 처리하기 (0) | 2025.11.10 |
| Expression-bodied 멤버로 코드 간결하게 작성하기 (0) | 2025.11.07 |
| string.Equals와 == 연산자의 차이 이해하기 (0) | 2025.11.05 |
댓글