본문 바로가기
프로그래밍/C#

C# is 패턴 매칭(Pattern Matching)에 대해서 알아보자

by bantomak 2025. 4. 26.
반응형

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

댓글