예외 클래스
예외 클래스 (Exception Classes)
예외를 던질 때 사용하는 객체는 아무 타입이나 될 수 있지만, Free Pascal은 예외를 다루기 위한 기본 클래스 Exception을 제공해요. 이 기본 클래스를 이해하면 SysUtils가 제공하는 각종 예외를 제대로 활용할 수 있습니다.
본문
sysutils 유닛은 예외 처리를 위한 많은 기능을 담고 있어요. 그중에서 기본 예외 클래스인 Exception을 정의하죠.
Exception = class(TObject)
private
fmessage : string;
fhelpcontext : longint;
public
constructor create(const msg : string);
constructor createres(indent : longint);
property helpcontext : longint read fhelpcontext write fhelpcontext;
property message : string read fmessage write fmessage;
end;
ExceptClass = Class of Exception;
그리고 이 선언을 바탕으로 수많은 예외들을 정의해요. 예를 들면 다음과 같죠.
{ mathematical exceptions }
EIntError = class(Exception);
EDivByZero = class(EIntError);
ERangeError = class(EIntError);
EIntOverflow = class(EIntError);
EMathError = class(Exception);
SysUtils 유닛은 또한 예외 핸들러도 설치해요. 어떤 예외 처리 블록에서도 처리되지 않은 예외가 있으면, 이 핸들러가 런타임 라이브러리에 의해 호출돼요. 기본적으로 예외 주소와 Exception 객체의 메시지를 출력하고, 종료 코드 217로 종료해요. 만약 예외 객체가 Exception 객체의 하위 클래스가 아니라면, 예외 메시지 대신 클래스 이름이 출력돼요.
모든 raise 문에는 Exception 객체나 그 하위 클래스를 사용하는 것이 권장돼요. 그래야 예외 객체의 message 필드를 사용할 수 있기 때문이에요.
더 알아보기
try...except/try...finally블록 동작은 "try...finally 문" 문서를 참고해요.- 예외가 처리되지 않았을 때의 런타임 오류는 "예외 처리 블록의 중첩" 문서에서 확인해요.