CLOSE SEARCH

Exception in C#

프로그램 실행도중 발생한 오류를 처리하고, 이 오류에 의해서 프로그램이 비정상적으로 종료되는 것을 방지하기 위해서 예외처리 기능을 사용하며 C# 에서는 Exception 클래스를 통해 이 기능을 제공한다.

C#의 모든 예외 클래스들은 SystemException 클래스와 ApplicationException 클래스로부터 파생되는데 전자의 경우 CLR에 의해 발생된 예외에 대한 클래스들이 상속을 받으며, 후자의 경우 개발자가 직접 작성한 예외 클래스가 상속을 받는다.

예외처리는 try..catch 구문을 통해 이루어진다. 기본적인 구조는 아래와 같다.

①번 구역에는 예외가 발생될 것으로 예상되는 코드를 작성한다. 만약 ①에 포함된 코드에서 에외가 발생한다면 catch { } 사이의 코드(②)가 수행이 된다. 이 부분에는 주로 발생된 예외에 대한 처리코드가 들어간다. try{}와 catch{}는 필수 요소이며 두 요소의 순서가 바뀌면 안된다. catch {}는 필요한 수 만큼 작성될 수 있다. finally{}의 경우 예외 발생 유무에 상관없이 항상 실행된다.

위의 코드를 실행하게 되면 빈 배열에 접근하는 예외(ArgumentOutOfRangeException)가 발생하게 되고 “프로그램 정상 종료”라는 문자열은 화면에 표시되지 못한채 프로그램이 비정상 종료되게 된다.

 

아래와 같이 예외처리 코드를 추가해주면 catch{} 문에서 발생한 예외를 처리하므로 프로그램이 마지막까지 정상적으로 동작하게 된다.

 

– 다중 catch 문

catch{} 는 필요한 수만큼 사용할 수 있지만 반드시 try{} 뒤에 위치해야 되며 서로 다른 종류의 예외를 처리해야 한다. 그리고 작성된 순서대로 예외가 처리되기 때문에 반드시 하위 예외를 먼저 처리한 후에 상위 예외를 처리해야 한다. 그렇지 않으면 컴파일시 오류가 발생한다.

 

– 특수한 catch 문 형식

catch 를 사용할때 매개변수의 객체명을 생략할 수도 있는데 이경우 해당 예외는 정상적으로 잡히지만 내부에서 해당 예외 객체를 사용할 수 없다.

두번째 catch문과 같이 단순히 catch만 써주는 경우 catch(Exception ex)와 같은 의미로 해석된다.

 

– 예외 정보

Exception 클래스는 예외에 대한 정보를 보여주는 멤버들을 가지고 있다.

  • StackTrace : 예외가 발생된 지점에 대한 스택추적정보를 가지고 있다.
  • Message : 예외데 대한 설명을 가지고 있다.
  • HelpLink : 도움말 파일에 대한 URL을 가지고 있다.
– throw
throw는 사용자가 직접 예외를 발생시킬때 사용되는 명령어이다.

위의 코드는 새로운 ArgumentNullException을 생성한 후 이를 발생시킨다. 일반적으로 이러한 과정을 “예외를 던진다”라고 표현한다.

Filed under: Programming Languages