예외
예외는 예상한 상황과 다른 상황이 진행되는 것을 말한다.예외 상황이 발생하면 프로그램이 비정상적으로 종료가 되기 때문에 예외상황을 예상하고 처리해야 정상적으로 구동되게 된다.
try~catch~finally
try { //구동되는 코드를 짠다
String invalidNumber = "abc";
int result = int.parse(invalidNumber);
print(result);
// on은 오류중에서 특정한 형식의 오류만 골라내서 특정한 오류 구문을 사용
} on FormatException catch (e) {
print(e);
// 오류구문이 발생하면 실행되는 부분
} catch (e) {
print(e);
// 예외 구문이 끝난 후 무조건 실행된는 구문
} finally {
print('예외 처리 끝 -');
}
오류 구문은 위에 4가지로 간단히 정리 할 수 있다.
throw라는 것도 있는데 이건 나중에 다뤄야겠다.
오류
오류는 주로 프로그램 외부의 환경이나 시스템 레벨에서 발생하는 심각한 문제라고 하는데 예외 상황과 다르게 갑자기 하드웨어가 멈춤다던지 튕긴다던지 하는 프로그램이 구동될 수 없는 상황을 말한다. 이 경우에는 프로그램이 멈추는 것이 아니라 갑자기 꺼져서 프로그램에 문제가 발생할 수 있어서 주의가 필요하다.
오류상황이 종류가 많이 상황이 다양하기 때문에 이를 컴퓨터에서 정의해놓은 오류상황이 있다. 그리고 이를 제외하고 개발자가 정의해서 오류를 대처할 수 도 있다.
class AgeError extends Error {
final String message;
AgeError(this.message);
}
class AgeError extends Error {
final String? message;
AgeError(this.message);
@override
String toString() => message ?? 'AgeError 가 발생했어요 !';
}
위와 같이 Error 클래스를 상속 받아서 정의를 할 수 있다.
예외 | 오류 | |
발생원인 | 프로그래밍 로직 문제(ex. 논리적 오류, 비정상적인 입력 | 주로 시스템 문제(ex. 메모리 부족) |
예상 가능 여부 | O | X |
처리 가능 여부 | O(try-catch) | X |
프로그램 정상 실행 가능 여부 | O | X(비정상적인 종료 |
위의 표로 간단히 비교할 수 있다.