반응형
is 패턴 매칭
C# 패턴 매칭(Pattern Matching)은 "값의 타입이나 구조를 검사하면서 동시에 추출" 할 수 있게 해주는 기능이다.
- 타입 체크 + 캐스팅을 한 번에 실행
- is not 패텀 매칭은 C# 9.0 이상에서 사용 가능
is 패턴
- obj가 string 타입이면 true
- 동시에 s라는 이름으로 형변환된 값을 바로 사용 가능
if (obj is string s)
{
Console.WriteLine($"문자열 길이: {s.Length}");
}
is not 패턴
- obj가 string 타입이 아니면 true
- 아닐 경우에만 countryString 사용이 가능하다.
var country = "";
if (country is not string countryString)
{
// country가 문자열이 아니면 이 블록 실행
Console.WriteLine($"");
}
else
{
// country는 문자열 타입이고 countryString으로 접근 가능
Console.WriteLine($"countryString 문자열 길이: {countryString.Length}");
}
패턴 매칭 vs if-cast 비교
패턴 매칭
- 실행 성능 : 거의 동일하거나 조금 더 빠름
- 코드 최적화 : 컴파일러가 최적화 쉽게 가능
- 가독성 / 안정성 : 훨씬 좋음 (명확한 타입 체크)
기존 if + cast
- 실행 성능 : 표준적인 방식이지만 약간 느릴 수 있음
- 코드 최적화 : 명시적 캐스팅이 별도로 발생
- 가독성 / 안정성 : 타입 변환 오류 위험 존재
왜 성능이 비슷하거나 패턴 매칭이 더 좋은가?
- 패턴 매칭은 단 한 번의 타입 검사와 안전한 캐스팅을 동시에 수행
- 기존 방식은 두 번 작업한다:
- is로 타입 체크
- 타입으로 명시적 캐스팅
- 중복 연산 + 컴파일러 최적화 어렵게 만듦
- 즉, 패턴 매칭은 한 번에 검사 + 캐스팅이 최적화된다.
기존 방식(if + 타입 캐스팅)
- is 연산 + 명시적 (string) 캐스팅 두 번 수행
- 만약 코드 수정 실수로 obj 타입이 다르면 런타임 에러 위험
object obj = "호랑";
if (obj is string)
{
var str = (string)obj; // 명시적 캐스팅
Console.WriteLine(str.Length);
}
패턴 매칭 방식
- 타입 검사와 변수 추출을 한 번에 처리
- 컴파일러 최적화 쉬움(JIT에서 타입 체크 + 추출 병합 가능)
- 타입 체크 (isinst)와 언박싱이 결합되어 최적화 진행
object obj = "호랑";
if (obj is string str)
{
Console.WriteLine(str.Length);
}
패턴 매칭이 필요한 이유
- 타입 변환 간결화 : as + null 체크 조합 필요 없이 한 번에 가능
- switch 가독성 향상 : 타입별, 값별 분기를 훨씬 명확하게 작성
- 복합 조건 표현 : and/or/not 조합으로 복잡한 논리를 간단하게 표현
- 객체 내부 검사 : 내부 속성 검사도 switch 패턴으로 가능
정리하자면
- 패턴 매칭은 타입체크, 값 검사, 변수 추출을 한 번에 깔끔하게 처리하는 현대적 문법
- 성능 걱정 말고, 패턴 매칭을 사용하자. 오히려 코드 품질까지 이득이다.
함께 읽으면 좋은 글
C# 패턴 매칭 7.0부터 10.0까지 알아보기
쓰면 쓸 수록 이쁘고 가독성 높은 C# 패턴매칭 문법, 그 시작부터 현재까지 시간 순서대로 알아보기! tags: CSharp, Pattern Matching, Basic Introduction, FSharp, Haskell
blog.juho.kim
'프로그래밍 > C#' 카테고리의 다른 글
C# record에 대해서 알아보자 (0) | 2025.04.26 |
---|---|
Entity Framework에서 [NotMapped] 속성 (0) | 2025.04.26 |
JWT를 활용해서 C# 서버에서 사용자 인증 처리하기 (0) | 2025.04.23 |
ASP.NET Core HTTP 요청 처리 흐름 알아보기 (0) | 2025.04.23 |
C# 환경변수로 appsettings.json 값 덮어쓰기 (0) | 2025.04.12 |
댓글