Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 시스템 수준 예외와 애플리케이션 수준 예외의 차이점 총정리

예외(Exception)란 무엇인가?

예외(Exception)란 프로그램이나 애플리케이션의 정상적인 실행 흐름을 중단시키는 이벤트를 의미합니다. 이러한 예기치 않은 사건은 코드 내부에 문제가 발생했음을 알려주는 신호 역할을 합니다. 특히 C#에서 예외는 크게 시스템 수준 예외(System-Level Exception)애플리케이션 수준 예외(Application-Level Exception) 두 가지로 나눌 수 있습니다.

두 예외의 주요 차이점을 아래 표를 통해 항목별로 자세히 살펴보겠습니다.

시스템 수준 예외 vs 애플리케이션 수준 예외 비교표

번호구분 기준시스템 수준 예외애플리케이션 수준 예외
1상속 구조기본 클래스인 System.SystemException에서 파생됩니다. SystemException 자체도 Exception 클래스로부터 파생된 클래스입니다.기본 클래스인 System.ApplicationException에서 파생되며, 이 클래스 역시 SystemException으로부터 파생된 클래스입니다.
2발생 상황일반적으로 데이터베이스 충돌, 범위 초과 오류 등과 같이 복구 불가능하거나 치명적인(fatal) 오류가 발생할 때 나타납니다.잘못된 형식의 입력 데이터, 산술 연산 예외 등과 같이 복구 가능한 오류가 발생할 때 나타납니다.
3처리 방식오류가 치명적이기 때문에 이러한 유형의 예외에 대한 별도의 처리 방법이나 사전 방지 메커니즘이 존재하지 않습니다.주로 코드 수준에서 try-catch 블록을 사용해 처리합니다. 만약 해당 예외에 대한 try-catch 블록이 없다면 예외는 페이지 수준까지 전파되며, Page_Error 루틴을 통해 처리할 수 있습니다.
4사용자 정의시스템 수준 예외는 사용자 정의(Customization)를 지원하지 않습니다.개발자가 직접 사용자 지정 애플리케이션 수준 예외를 정의하고 선언할 수 있습니다.
5생성 주체.NET 공용 언어 런타임(CLR)에 의해 throw되며, 거의 모든 .NET 애플리케이션에서 사용됩니다.비즈니스 메서드에 전달된 유효하지 않은 인수 값 등 복구 가능한 오류가 발생했을 때 throw됩니다. 애플리케이션 고유의 문제나 비즈니스 로직상의 문제를 클라이언트에게 알리는 역할을 합니다.

참고: 최신 .NET 개발 가이드라인

Microsoft의 공식 설계 지침에 따르면, 최신 .NET 환경에서는 ApplicationException에서 새로운 예외 클래스를 파생시키는 것이 권장되지 않습니다. 대신 사용자 지정 예외가 필요한 경우 Exception 클래스에서 직접 파생시키는 것이 일반적인 모범 사례로 자리 잡았습니다. 따라서 위의 구분은 C# 초기 설계 의도를 이해하는 데 유용하지만, 실제 프로젝트에서는 이 점을 함께 고려하는 것이 좋습니다.