푸터 콘텐츠로 바로가기
.NET 도움말

Try/Catch in C# (개발자를 위한 작동 방식)

C# 프로그래밍에 익숙하지 않은 경우 'try catch' 문구를 많이 들어보았을 것입니다. 이 튜토리얼에서는 예외 처리에 대한 내용을 다루며, catch 블록에 중점을 두고 try 및 catch 문을 사용하여 코드가 오류에 더 강하게 대처하도록 하는 방법을 탐구할 것입니다. 이해를 강화하기 위해 현실적인 예를 많이 제공할 것입니다.

예외란 무엇이며, 왜 처리해야 하는가?

C#에서 예외는 프로그램이 실행되는 동안 발생하여 프로그램의 지시 실행의 표준 진행을 방해하는 사건을 나타냅니다. 예외가 발생하면 프로그램의 흐름이 변경되며, 해당 예외가 처리되지 않으면 프로그램이 갑자기 종료될 것입니다.

예외 처리는 이러한 방해 사건을 예측하고 관리하여 프로그램이 예기치 않은 문제에서 복구하고 의도대로 계속 실행할 수 있도록 하는 방법입니다. try 및 catch 블록을 사용하면 코드는 오류를 우아하게 처리하고 사용자에게 의미 있는 피드백을 제공할 수 있습니다.

Try 블록

try 블록은 예외가 발생할 것으로 예상되는 코드 구간입니다. 코드를 try 블록에 래핑하면 해당 블록 내에서 발생할 수 있는 잠재적 예외를 처리하겠다는 컴파일러에게 의사를 전달합니다.

다음은 try 블록을 사용하는 기본 예입니다:

try
{
    // Code that may generate an exception
}
catch (Exception ex)
{
    // Handle the exception
}
try
{
    // Code that may generate an exception
}
catch (Exception ex)
{
    // Handle the exception
}
Try
	' Code that may generate an exception
Catch ex As Exception
	' Handle the exception
End Try
$vbLabelText   $csharpLabel

Catch 블록을 통한 예외 처리

catch 문은 try 블록과 함께 사용하여 예외를 처리합니다. try 블록 내에서 예외가 발생하면 프로그램 실행이 적절한 catch 블록으로 이동하며, 거기서 프로그램이 예외에 반응하여 해야 할 일을 명시할 수 있습니다.

예외를 잡기 위해서는 try 블록 바로 뒤에 catch 블록을 생성해야 합니다. catch 블록은 일반적으로 잡힌 예외를 나타내는 매개 변수를 포함합니다.

다음은 catch 문이 작동하는 예입니다:

try
{
    int result = 10 / 0;
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
try
{
    int result = 10 / 0;
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
Try
	Dim result As Integer = 10 \ 0
Catch ex As DivideByZeroException
	Console.WriteLine("An error occurred: " & ex.Message)
End Try
$vbLabelText   $csharpLabel

이 예제에서, try 블록 안의 코드는 0으로 나누려 시도하여 DivideByZeroException을 생성합니다. catch 블록은 예외를 처리하여 사용자에게 메시지를 표시합니다.

다중 Catch 블록으로 다른 예외 처리

때로는 try 블록이 다양한 유형의 예외를 발생시킬 수 있습니다. 이러한 경우 각각의 예외 유형을 별도로 처리하기 위해 여러 catch 블록을 사용할 수 있습니다.

다음 예제는 여러 catch 블록의 사용을 보여줍니다:

try
{
    int[] numbers = new int[7];
    numbers[12] = 70; // This line will throw an exception
}
catch (IndexOutOfRangeException ex)
{
    Console.WriteLine("An index out of range error occurred: " + ex.Message);
}
catch (Exception e)
{
    Console.WriteLine("An unexpected error occurred: " + e.Message);
}
try
{
    int[] numbers = new int[7];
    numbers[12] = 70; // This line will throw an exception
}
catch (IndexOutOfRangeException ex)
{
    Console.WriteLine("An index out of range error occurred: " + ex.Message);
}
catch (Exception e)
{
    Console.WriteLine("An unexpected error occurred: " + e.Message);
}
Try
	Dim numbers(6) As Integer
	numbers(12) = 70 ' This line will throw an exception
Catch ex As IndexOutOfRangeException
	Console.WriteLine("An index out of range error occurred: " & ex.Message)
Catch e As Exception
	Console.WriteLine("An unexpected error occurred: " & e.Message)
End Try
$vbLabelText   $csharpLabel

이 예제에서, try 블록 안의 코드는 존재하지 않는 배열 인덱스에 값을 할당하려 시도하며 IndexOutOfRangeException을 생성합니다. 첫 번째 catch 블록은 이 특정 예외를 처리하며, 두 번째 catch 블록은 발생할 수 있는 다른 모든 예외를 잡습니다.

다중 catch 블록을 사용할 때, 항상 가장 특정한 예외 유형부터 가장 일반적인 예외 유형으로 순서를 정하시기 바랍니다.

Exception 필터로 조건을 추가한 Catch 블록

Exception 필터를 사용하면 catch 블록에 조건을 추가하여 특정 조건이 충족되는 경우에만 예외를 잡을 수 있습니다. 예외 필터를 사용하려면 catch 문에 when 키워드 뒤에 조건을 추가하세요.

다음 예제는 Exception 필터의 사용 방법을 보여줍니다:

try
{
    int result = 10 / 0;
}
catch (DivideByZeroException ex) when (ex.Message.Contains("divide"))
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("A different divide by zero error occurred: " + ex.Message);
}
try
{
    int result = 10 / 0;
}
catch (DivideByZeroException ex) when (ex.Message.Contains("divide"))
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("A different divide by zero error occurred: " + ex.Message);
}
Try
	Dim result As Integer = 10 \ 0
Catch ex As DivideByZeroException When ex.Message.Contains("divide")
	Console.WriteLine("An error occurred: " & ex.Message)
Catch ex As DivideByZeroException
	Console.WriteLine("A different divide by zero error occurred: " & ex.Message)
End Try
$vbLabelText   $csharpLabel

위의 예제에서 첫 번째 catch 블록은 예외 메시지에 'divide'라는 단어가 포함된 경우에만 DivideByZeroException을 처리할 것입니다. 조건이 충족되지 않으면 두 번째 catch 블록이 예외를 처리합니다.

Finally 블록으로 코드 실행 보장

특정 코드 조각을 예외 발생 여부와 관계없이 실행되도록 보장하고자 할 때가 있습니다. 이를 달성하려면 finally 블록을 사용할 수 있습니다.

finally 블록은 try 및 catch 블록 뒤에 배치되며, 예외 발생 여부에 관계없이 항상 실행됩니다.

여기엔 finally 블록 사용을 시연하는 예제가 있습니다:

try
{
    int result = 10 / 2;
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
finally
{
    Console.WriteLine("This line will always be executed.");
}
try
{
    int result = 10 / 2;
}
catch (DivideByZeroException ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
finally
{
    Console.WriteLine("This line will always be executed.");
}
Try
	Dim result As Integer = 10 \ 2
Catch ex As DivideByZeroException
	Console.WriteLine("An error occurred: " & ex.Message)
Finally
	Console.WriteLine("This line will always be executed.")
End Try
$vbLabelText   $csharpLabel

위의 예제에서 try 블록 내의 코드가 예외를 생성하지 않더라도, finally 블록은 여전히 실행될 것입니다.

커스텀 예외: 필요에 맞춘 예외 조정

때로는 코드에서 특정 예외를 처리하기 위해 직접 커스텀 예외를 만들고 싶을 수 있습니다. 이를 수행하려면 Exception 클래스를 상속받는 새 클래스를 생성할 수 있습니다.

다음은 커스텀 예외를 만드는 예입니다:

public class CustomException : Exception
{
    public CustomException(string errorMessage) : base(errorMessage)
    {
    }
}
public class CustomException : Exception
{
    public CustomException(string errorMessage) : base(errorMessage)
    {
    }
}
Public Class CustomException
	Inherits Exception

	Public Sub New(ByVal errorMessage As String)
		MyBase.New(errorMessage)
	End Sub
End Class
$vbLabelText   $csharpLabel

이제 이 커스텀 예외를 다음과 같이 try와 catch 블록에서 사용할 수 있습니다:

try
{
    throw new CustomException("This is a custom exception.");
}
catch (CustomException ex)
{
    Console.WriteLine("A custom exception occurred: " + ex.Message);
}
try
{
    throw new CustomException("This is a custom exception.");
}
catch (CustomException ex)
{
    Console.WriteLine("A custom exception occurred: " + ex.Message);
}
Try
	Throw New CustomException("This is a custom exception.")
Catch ex As CustomException
	Console.WriteLine("A custom exception occurred: " & ex.Message)
End Try
$vbLabelText   $csharpLabel

이 예제에서, try 블록은 CustomException 인스턴스를 던지며, 이는 catch 블록에 의해 잡히고 처리됩니다.

IronPDF: 예외 처리를 통합한 PDF 기능

IronPDF 알아보기는 C#에서 PDF 파일을 생성, 편집, 추출할 수 있는 인기 있는 라이브러리입니다. 이 섹션에서는 IronPDF를 try-catch 예외 처리 방법과 통합하여 잠재적인 오류를 우아하게 처리하는 방법을 탐구합니다.

IronPDF 설치 중

시작하려면 먼저 IronPDF NuGet 패키지를 설치해야 합니다. 패키지 관리자 콘솔을 사용하여 이를 수행할 수 있습니다:

Install-Package IronPdf

또는 Visual Studio의 "NuGet 패키지 관리" 대화 상자에서 "IronPDF"를 검색할 수 있습니다.

IronPDF로 PDF 생성 및 예외 처리

IronPDF로 HTML 문자열에서 PDF 파일을 생성하고자 한다면. PDF 생성 과정에서 예외가 발생할 가능성이 있으므로, 이를 처리하기 위해 try-catch 블록을 사용할 수 있습니다. IronPDF를 사용하여 PDF를 생성하고 try-catch을 통해 예외를 처리하는 방법의 예가 있습니다:

using IronPdf;
using System;

try
{
    var renderer = new ChromePdfRenderer();
    string html = "Hello, World!";
    PdfDocument PDF = renderer.RenderHtmlAsPdf(html);
    PDF.SaveAs("output.PDF");
    Console.WriteLine("PDF created successfully.");
}
catch (Exception ex)
{
    Console.WriteLine("An unexpected error occurred: " + ex.Message);
}
using IronPdf;
using System;

try
{
    var renderer = new ChromePdfRenderer();
    string html = "Hello, World!";
    PdfDocument PDF = renderer.RenderHtmlAsPdf(html);
    PDF.SaveAs("output.PDF");
    Console.WriteLine("PDF created successfully.");
}
catch (Exception ex)
{
    Console.WriteLine("An unexpected error occurred: " + ex.Message);
}
Imports IronPdf
Imports System

Try
	Dim renderer = New ChromePdfRenderer()
	Dim html As String = "Hello, World!"
	Dim PDF As PdfDocument = renderer.RenderHtmlAsPdf(html)
	PDF.SaveAs("output.PDF")
	Console.WriteLine("PDF created successfully.")
Catch ex As Exception
	Console.WriteLine("An unexpected error occurred: " & ex.Message)
End Try
$vbLabelText   $csharpLabel

이 예제에서는 try 블록에 IronPDF로 PDF를 생성하는 코드가 포함되어 있습니다. 과정 중에 예외가 발생하면, catch 블록이 오류를 처리하여 사용자에게 관련 오류 메시지를 표시합니다.

PDF에서 텍스트 추출 및 예외 처리

또한 IronPDF를 사용하여 PDF 파일에서 텍스트를 추출하고 싶을 수 있습니다. 이전 예제와 마찬가지로, 잠재적인 예외를 처리하기 위해 try-catch 블록을 사용할 수 있습니다.

이 예제는 IronPDF를 사용하여 PDF 파일에서 텍스트를 추출하고 예외를 처리하는 방법입니다:

using IronPdf;
using System;
using System.IO;

try
{
    string pdfPath = "input.PDF";
    if (File.Exists(pdfPath))
    {
        PdfDocument PDF = PdfDocument.FromFile(pdfPath);
        string extractedText = PDF.ExtractAllText();
        Console.WriteLine("Text extracted successfully: " + extractedText);
    }
    else
    {
        Console.WriteLine("The specified PDF file does not exist.");
    }
}
catch (Exception ex)
{
    Console.WriteLine("An unexpected error occurred: " + ex.Message);
}
using IronPdf;
using System;
using System.IO;

try
{
    string pdfPath = "input.PDF";
    if (File.Exists(pdfPath))
    {
        PdfDocument PDF = PdfDocument.FromFile(pdfPath);
        string extractedText = PDF.ExtractAllText();
        Console.WriteLine("Text extracted successfully: " + extractedText);
    }
    else
    {
        Console.WriteLine("The specified PDF file does not exist.");
    }
}
catch (Exception ex)
{
    Console.WriteLine("An unexpected error occurred: " + ex.Message);
}
Imports IronPdf
Imports System
Imports System.IO

Try
	Dim pdfPath As String = "input.PDF"
	If File.Exists(pdfPath) Then
		Dim PDF As PdfDocument = PdfDocument.FromFile(pdfPath)
		Dim extractedText As String = PDF.ExtractAllText()
		Console.WriteLine("Text extracted successfully: " & extractedText)
	Else
		Console.WriteLine("The specified PDF file does not exist.")
	End If
Catch ex As Exception
	Console.WriteLine("An unexpected error occurred: " & ex.Message)
End Try
$vbLabelText   $csharpLabel

C#에서의 Try/Catch (개발자에게 작동 방식) 그림 1

이 예제에서는 try 블록에 IronPDF로 PDF에서 텍스트를 추출하는 코드가 포함되어 있습니다. 과정 중에 예외가 발생하면, catch 블록이 오류를 처리하여 사용자에게 관련 메시지를 표시합니다.

결론

IronPDF를 try-catch 예외 처리 방법과 결합함으로써, PDF 파일 작업 시 오류를 우아하게 처리하는 견고한 애플리케이션을 만들 수 있습니다. 이는 애플리케이션의 안정성을 향상시킬 뿐만 아니라, 전체적인 사용자 경험을 개선합니다.

IronPDF와 같은 외부 라이브러리를 사용할 때는 항상 잠재적인 예외를 고려하고, 이를 try와 catch 문을 사용하여 적절히 처리해야 합니다. 이 방법으로, 예기치 않은 문제에 직면하더라도 애플리케이션이 탄력적이고 사용자 친화적으로 유지되도록 할 수 있습니다.

IronPDF는 라이브러리의 무료 체험판을 제공하여, 이를 탐색할 수 있는 기회를 드립니다. 체험판 기간 후 IronPDF 사용을 계속하기로 결정하셨다면, 라이선스는 $799부터 시작됩니다.

자주 묻는 질문

C#에서 try-catch 블록의 목적은 무엇인가요?

C#에서 try-catch 블록은 프로그램 실행 중 발생하는 예외를 처리하는 데 사용됩니다. try 블록에는 예외를 발생시킬 수 있는 코드가 포함되고, catch 블록에는 오류를 처리하는 코드가 포함되어 프로그램이 원활하게 계속 실행될 수 있도록 합니다.

C#에서 PDF를 다룰 때 예외 처리를 어떻게 구현할 수 있나요?

C#에서 PDF를 다룰 때, PDF 생성 또는 조작을 포함하는 작업 주위에서 try-catch 블록을 사용하여 예외 처리를 구현할 수 있습니다. 이렇게 하면 파일을 찾을 수 없음, 잘못된 형식과 같은 잠재적 오류를 처리하여 애플리케이션의 안정성을 보장할 수 있습니다.

예외 처리에서 finally 블록을 사용하는 것이 중요한 이유는 무엇인가요?

finally 블록은 예외가 발생하든 발생하지 않든 특정 코드가 실행되도록 보장하기 때문에 중요합니다. 특히 파일 스트림이나 데이터베이스 연결을 닫는 등의 자원을 해제하거나 정리 작업을 수행하는 경우 유용합니다.

C#에서 여러 catch 블록을 사용하는 예시를 제공해 주시겠습니까?

네, C#에서 여러 catch 블록을 사용하여 다양한 유형의 예외를 처리할 수 있습니다. 예를 들어, FileNotFoundException을 처리하는 catch 블록 하나와 FormatException을 처리하는 또 다른 블록이 있을 수 있습니다. 이를 통해 특정 예외 유형에 맞춤화된 보다 정확한 오류 처리가 가능합니다.

IronPDF는 C#의 예외 처리와 어떻게 통합되나요?

IronPDF는 HTML을 PDF로 변환하거나 PDF 파일에서 텍스트를 추출하는 작업을 수행할 때 try-catch 블록을 사용하여 C#의 예외 처리와 통합됩니다. 이 통합은 잠재적 오류를 관리하고 애플리케이션의 견고성을 향상시키는 데 도움이 됩니다.

IronPDF를 사용할 때 발생할 수 있는 일반적인 예외는 무엇인가요?

IronPDF를 사용할 때 일반적으로 발생할 수 있는 예외로는 파일 경로가 잘못된 경우의 FileNotFoundException이나 PDF 콘텐츠가 올바르게 렌더링되지 않는 경우의 InvalidOperationException이 있습니다. 이러한 예외를 try-catch 블록으로 처리하면 애플리케이션 충돌을 방지할 수 있습니다.

C# 프로젝트에서 IronPDF를 설치하는 방법은?

C# 프로젝트에서 IronPDF를 설치하려면 패키지 관리자 콘솔에서 Install-Package IronPdf 명령을 사용하거나 Visual Studio의 'NuGet 패키지 관리' 대화 상자에서 'IronPDF'를 검색하세요. 이렇게 하면 프로젝트에 필요한 라이브러리 참조가 추가됩니다.

catch 블록과 예외 필터의 차이점은 무엇인가요?

catch 블록은 try 블록에서 발생하는 예외를 처리하는 데 사용되며, 예외 필터는 catch 블록이 실행되어야 하는 조건을 지정할 수 있도록 해줍니다. 이는 when 키워드를 사용하여 보다 세밀한 예외 처리를 가능하게 합니다.

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

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

제이콥은 맨체스터 대학교에서 토목공학 학사 학위(BEng)를 최우등으로 취득했습니다(1998~2001). 1999년 런던에서 첫 소프트웨어 회사를 설립하고 2005년 첫 .NET 컴포넌트를 개발한 후, 마이크로소프트 생태계 전반에 걸쳐 복잡한 문제를 해결하는 데 전문성을 발휘해 왔습니다.

그의 대표 제품인 IronPDF 및 Iron Suite .NET 라이브러리는 전 세계적으로 3천만 건 이상의 NuGet 설치 수를 기록했으며, 그의 핵심 코드는 전 세계 개발자들이 사용하는 다양한 도구에 지속적으로 활용되고 있습니다. 25년의 실무 경험과 41년의 코딩 전문성을 바탕으로, 제이콥은 차세대 기술 리더들을 양성하는 동시에 기업 수준의 C#, Java, Python PDF 기술 혁신을 주도하는 데 주력하고 있습니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해