C#/제어문

[C#] 예외처리 try-catch-finally

도도돋치 2025. 3. 24. 17:23
Contents 접기
728x90

기본 개념

try-catch-finally 예외(오류) 처리를 위한 문법
✔ 프로그램이 예상치 못한 오류로 중단되지 않도록 보호
 try 블록에서 예외 발생 시 catch에서 처리
 finally 블록은 예외 발생 여부와 관계없이 실행 (선택 사항)

 

기본 구조

try
{
    // 예외가 발생할 가능성이 있는 코드
}
catch (Exception ex)
{
    // 예외 발생 시 실행되는 코드
}
finally
{
    // 항상 실행되는 코드 (선택 사항)
}

 

try-catch 예제

try
{
    int a = 10;
    int b = 0;
    int result = a / b; // 0으로 나누기 → 예외 발생
    
    Console.WriteLine(result); // 실행되지 않음
}
catch (DivideByZeroException ex)
{
    Console.WriteLine($"오류 발생: {ex.Message}");
}

💡 결과

오류 발생: 0으로 나눌 수 없습니다.

📌 b = 0  DivideByZeroException 발생
📌 catch 블록이 실행되어 예외 메시지 출력

 

finally 블록 사용

try
{
    Console.WriteLine("파일을 엽니다.");
    throw new Exception("파일을 찾을 수 없습니다."); // 예외 강제 발생
}
catch (Exception ex)
{
    Console.WriteLine($"오류 발생: {ex.Message}");
}
finally
{
    Console.WriteLine("파일을 닫습니다."); // 예외 발생 여부와 관계없이 실행됨
}

💡 결과

파일을 엽니다.  
오류 발생: 파일을 찾을 수 없습니다.  
파일을 닫습니다.

📌 finally 블록은 항상 실행
📌 파일 닫기, 데이터 정리 등에 사용

📌 예외가 발생하지 않아도 finally는 실행됨 (try-finally만 써도 try, finally둘 다 실행)

 

여러 개의 catch 블록 사용

try
{
    string str = null;
    Console.WriteLine(str.Length); // NullReferenceException 발생
}
catch (NullReferenceException ex)
{
    Console.WriteLine("널 값에 접근할 수 없습니다!");
}
catch (Exception ex) // 모든 예외 처리
{
    Console.WriteLine($"오류 발생: {ex.Message}");
}

💡 결과

널 값에 접근할 수 없습니다!

📌 특정 예외 먼저 처리하고, 일반 예외는 마지막에 처리

 

📖 정리

 try  예외가 발생할 가능성이 있는 코드 실행
 catch  예외 발생 시 실행 (예외 정보 처리 가능)
 finally  예외 발생 여부와 관계없이 실행 (선택 사항, 정리 작업에 사용)
✔ 여러 개의 catch 블록을 사용해 다양한 예외 처리 가능

 

 

728x90

'C# > 제어문' 카테고리의 다른 글

[C#] foreach문  (0) 2025.04.15
[C#] 예외처리 throw  (0) 2025.03.24
[C#] 분기문 return  (0) 2025.03.24
[C#] 분기문 continue  (0) 2025.03.24
[C#] 분기문 break  (0) 2025.03.24