IRONSOFTWAREHOME
개발자 업데이트

C# Switch 패턴 매칭 (개발자를 위한 동작 방식)

제이콥 멜러, 팀 아이언 최고기술책임자
Jacob Mellor
Updated: 2026년 4월 23일

C#에서 PDF 파일 작업은 종종 다양한 유형의 문서, 작업 또는 데이터 소스를 다루는 것을 포함합니다. 전통적으로 개발자는 다양한 입력 값과 유형 또는 출력 결정을 관리하기 위해 긴 if-else 체인이나 중첩된 switch 문에 의존할 수 있었습니다. 하지만 스위치 패턴 매칭과 같은 최신 C# 기능을 사용하면 코드가 훨씬 더 우아하고, 읽기 쉽고, 유지 관리가 용이해질 수 있습니다.

강력한 PDF 라이브러리인 IronPDF와 결합하면, 스위치 패턴 매칭을 통해 문서 처리에 대한 더 스마트하고 깔끔한 로직을 구축할 수 있습니다. 이 기사에서는 IronPDF와 함께 C#의 고급 패턴 매칭 기능(예: 타입 패턴, 속성 패턴, 관계 패턴)을 사용하여 PDF 생성 워크플로를 간소화하는 방법을 탐구합니다.

What is Switch Pattern Matching in C#?

스위치 패턴 매칭은 C# 7에서 도입되어 후속 버전에서 지속적으로 개선된 기능입니다. 상수 값만 일치시키는 전통적인 스위치 문과 달리, 패턴 매칭은 단일 표현식 내에서 타입, 속성, 조건을 평가할 수 있게 해줍니다. 다음 예제는 이 기능이 어떻게 작동하는지를 보여줍니다.

예제 문법

switch (input)
{
    case int i when i > 0:
        Console.WriteLine("Positive integer");
        break;
    case string s:
        Console.WriteLine($"It's a string: {s}");
        break;
    default:
        Console.WriteLine("Unknown type");
        break;
}

이 코드는 다양한 경우를 간결하게 처리하기 위해 타입 패턴, 관계 연산자, null 상수 패턴을 사용합니다. 이 기법은 더 간결한 구문으로 코드 가독성을 크게 개선하고 더 복잡한 논리도 지원합니다.

왜 IronPDF와 함께 스위치 패턴 매칭을 결합해야 하나요?

C# 스위치 패턴 매칭 (개발자에게 작동 방식 설명): 그림 1 - IronPDF 홈페이지

IronPDF는 HTML, 이미지, 원시 텍스트에서 PDF를 생성하고 조작하는 강력한 .NET 구성 요소입니다. 많은 실제 사용 사례는 다양한 입력 패턴 처리에 관여합니다: 몇몇 문서는 URL에서, 다른 문서는 HTML 문자열에서, 또 다른 문서는 파일 업로드에서 유래할 수 있습니다.

어설프게 if 조건으로 표현을 테스트하는 대신, 스위치 패턴 매칭을 사용하여 패턴 기반 논리를 효율적으로 지원할 수 있습니다. 이를 통해 애플리케이션이 다양한 객체 타입, 지정된 상수 또는 심지어 불리언 표현식에 어떻게 반응할지를 정의할 수 있으며, 입력 표현식을 사용하여 워크플로를 구동합니다.

IronPDF에서 패턴 매칭을 활용한 일반적인 사용 사례

이전 예제에서는 기본 구문이 어떻게 보이는지를 보았습니다. 이제 실제 작동 모습을 봅시다. 다음 코드 예제는 IronPDF와 C# 패턴 매칭을 결합하여 유리한 실제 PDF 작업입니다.

1. 타입 및 속성 패턴으로 여러 입력 형식 처리

메소드가 HTML, Uri, 또는 로컬 .html 파일과 같은 다양한 입력 형식을 수락한다고 가정해 봅시다. 타입 패턴, 속성 패턴, null 패턴을 사용하면 이러한 경우를 손쉽게 구분할 수 있습니다.

using System;
using System.IO;
using IronPdf;
class Program
{
    static void Main()
    {
        object input = new Uri("https://example.com"); // Try changing this to: "<html><body>Hello</body></html>" or new FileInfo("sample.html")
        var renderer = new ChromePdfRenderer();
        PdfDocument pdfDoc = input switch
        {
            string html when html.StartsWith("<html>") =>
                renderer.RenderHtmlAsPdf(html),
            Uri url =>
                renderer.RenderUrlAsPdf(url.ToString()),
            FileInfo { Extension: ".html" } file =>
                renderer.RenderHtmlAsPdf(File.ReadAllText(file.FullName)),
            null => throw new ArgumentNullException("Input was null."),
            _ => throw new ArgumentException("Unsupported input type for PDF conversion.")
        };
        pdfDoc.SaveAs("example-input-types.pdf");
        Console.WriteLine("PDF created: example-input-types.pdf");
    }
}

여기서 속성 패턴(FileInfo { Extension: ".html" }) 및 null 상수 패턴(case null)은 논리를 더 표현력 있고 강력하게 만듭니다.

2. 위치 및 선언 패턴으로 동적으로 PDF 포맷하기

PdfRequest 레코드가 형식 문자열을 포함한다고 가정합시다. 위치 패턴, 선언 패턴, 문자열 상수를 적용하여 PDF 포맷을 맞춤화할 수 있습니다.

using System;
using IronPdf;
public record PdfRequest(string Title, string Content, string Format);
class Program
{
    static void Main()
    {
        PdfRequest request = new("My Report", "<h1>Monthly Report</h1><p>Generated by IronPDF.</p>", "A4");
        var renderer = new ChromePdfRenderer();
        // Use fully qualified enum to avoid IronWord conflict
        renderer.RenderingOptions = request switch
        {
            PdfRequest { Format: "A4" } => new IronPdf.ChromePdfRenderOptions
            {
                PaperSize = IronPdf.Rendering.PdfPaperSize.A4
            },
            PdfRequest { Format: "Letter" } => new IronPdf.ChromePdfRenderOptions
            {
                PaperSize = IronPdf.Rendering.PdfPaperSize.Letter
            },
            _ => new IronPdf.ChromePdfRenderOptions
            {
                PaperSize = IronPdf.Rendering.PdfPaperSize.Legal // Fallback
            }
        };
        var pdf = renderer.RenderHtmlAsPdf(request.Content);
        pdf.SaveAs("example-formatted.pdf");
        Console.WriteLine("PDF created: example-formatted.pdf");
    }
}

이 사용법은 예상된 값에 기초하여 논리적 패턴을 따라 레코드 내의 해당 속성에 매칭되는 표현식을 보여줍니다.

출력 크기

C# 스위치 패턴 매칭 (개발자에게 작동 방식 설명): 그림 2 - PDF 출력의 크기 차이

3. Var 및 Not 패턴을 사용한 역할 기반 PDF

var 패턴과 not 패턴을 사용하여 사용자 역할을 처리하면서 null 또는 예상치 못한 상태를 피하십시오.

using System;
using IronPdf;
public abstract record UserRole;
public record Admin(string Email) : UserRole;
public record Viewer(string Email) : UserRole;
public record Guest() : UserRole;
class Program
{
    static void Main()
    {
        UserRole currentUser = new Admin("admin@example.com"); // Try changing to Viewer or Guest
        var pdf = currentUser switch
        {
            Admin { Email: var email } =>
                new ChromePdfRenderer().RenderHtmlAsPdf($"<h1>Admin Dashboard</h1><p>Email: {email}</p>"),
            Viewer =>
                new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Viewer Summary</h1><p>Access limited.</p>"),
            Guest =>
                new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Guest Mode</h1><p>Please sign in.</p>"),
            not null =>
                throw new UnauthorizedAccessException("Unknown role type."),
            null =>
                throw new ArgumentNullException("Role cannot be null.")
        };
        pdf.SaveAs("example-role.pdf");
        Console.WriteLine("PDF created: example-role.pdf");
    }
}

이 구조는 보안성과 코드 가독성을 향상시키며, var email과 같은 임시 변수 선언을 활용합니다. 다음 이미지는 다양한 입력 값에 따라 생성된 서로 다른 PDF 문서를 보여줍니다.

C# 스위치 패턴 매칭 (개발자에게 작동 방식 설명): 그림 3 - 역할 기반 출력

4. 사용자 데이터에 기반한 관계 패턴 매칭

사용자 레벨에 따라 다른 PDF를 생성해야 하나요? 입력이 특정 범위 내에 있는지를 테스트하기 위해 두 개의 관계 패턴을 사용할 시도해 보세요.

using System;
using IronPdf;
class Program
{
    static void Main()
    {
        int userScore = 85; // Try other values: 45, 70, 101
        string message = userScore switch
        {
            < 60 => "Needs Improvement",
            >= 60 and < 80 => "Satisfactory",
            >= 80 and <= 100 => "Excellent",
            _ => "Invalid score"
        };
        var html = $"<h1>Score Report</h1><p>Score: {userScore}</p><p>Result: {message}</p>";
        var pdf = new ChromePdfRenderer().RenderHtmlAsPdf(html);
        pdf.SaveAs("example-score.pdf");
        Console.WriteLine("PDF created: example-score.pdf");
    }
}

관계 연산자와 불리언 표현식은 코드를 간결하고 표현력 있게 유지합니다.

산출

C# 스위치 패턴 매칭 (개발자에게 작동 방식 설명): 그림 4 - 점수 기반 출력

이 패턴을 프로젝트에 구현하기 위한 팁

C# 스위치 패턴 매칭 (개발자에게 작동 방식 설명): 그림 5 - C# 패턴 매칭 치트 시트

  • 레코드 타입을 사용하여 깔끔하고 불변의 데이터 객체를 만드세요.
  • switch 표현식을 사용하여 if-else 구조를 지양하라, 이를 통해 더 깔끔한 논리를 구현하세요.
  • not 패턴discard 패턴 (_)을 사용하여 관련 없는 매치를 무시하세요.
  • 기본 케이스 추가를 통해 알 수 없는 입력을 조기에 잡아내세요.
  • 복잡한 케이스는 읽기 쉽게 헬퍼 메소드로 분리하세요.

실제 이점

  • 더 깔끔한 코드: 깊이 중첩된 if-else 또는 switch-case 블록을 더 이상 사용하지 않아도 됨
  • 더 쉬운 테스트: 격리된 패턴 케이스가 단위 테스트를 단순화합니다
  • 유연성: 새로운 입력 유형을 추가할 때 로직을 쉽게 확장할 수 있습니다
  • 우수한 관심사 분리: 입력/출력 변환에만 로직을 집중하십시오

결론: PDF 로직을 현대화하십시오

스위치 패턴 매칭은 단순한 구문 향상 그 이상으로 더 안전하고 표현력 있는 코드를 작성하기 위한 강력한 패러다임입니다. IronPDF의 유연한 렌더링 기능과 결합하면 최소한의 코드로 더 스마트하고 확장 가능한 문서 생성 파이프라인을 만들 수 있습니다.

보고서 생성기, 문서 미리 보기 또는 동적 템플릿 시스템을 구축하든 관계없이 IronPDF 구현에 패턴 매칭을 추가해 보세요. 명확성, 제어 및 유지보수성에서 이점을 빠르게 확인할 수 있습니다.

IronPDF를 직접 사용해 보시겠습니까?

무료 체험판 다운로드를 통해 IronPDF의 강력한 기능을 구매 전에 직접 사용해보세요.

제이콥 멜러, 팀 아이언 최고기술책임자
최고기술책임자

제이콥 멜러는 Iron Software의 최고 기술 책임자(CTO)이자 C# PDF 기술을 개척한 선구적인 엔지니어입니다. Iron Software의 핵심 코드베이스를 최초로 개발한 그는 창립 초기부터 회사의 제품 아키텍처를 설계해 왔으며, CEO인 캐머런 리밍턴과 함께 회사를 NASA, 테슬라, 그리고 전 세계 정부 기관에 서비스를 제공하는 50명 이상의 직원을 보유한 기업으로 성장시켰습니다.

...
더 읽어보기

관련 기사

Key in blue circle

무료 30일 체험 키를 즉시 받으세요.

Your trial license will be sent to your email address

제한 없음. 100% 무제한 이용. 신용카드 불필요.

bullet_checked신용카드나 계정 생성은 필요하지 않습니다.제한 없음. 100% 무제한 이용. 신용카드 불필요.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
무료 라이브 데모를 예약하세요
Booking Badge

전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.

Iron Software의 고객 로고
부담 없는 무료 상담을 받아보세요
아래 양식을 작성하시거나 sales@ironsoftware.com으로 이메일을 보내주세요.
고객님의 정보는 항상 비밀로 유지됩니다.
전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.
Iron Software의 고객 로고
지금 바로 30일 무료 체험판 키를 받으세요.
신용카드나 계정 생성은 필요하지 않습니다.