
다트에서는 오류를 나타내는 방식으로 Exception(예외)와, Error(에러)를 사용한다. 이 두 가지 개념에는 분명한 차이점이 있다.
Exception은 예상 가능한 오류 상황을 나타낸다. 예를 들어, 파일을 열 때 해당 파일이 없는 경우에 발생하는 오류를 들 수 있다. 개발자는 이러한 상황을 미리 파악하여 적절히 처리할 수 있는데, 다트에서는 try-catch 구문을 이용하여 이러한 예외 상황을 처리할 수 있다.
void main() {
try {
var result = 10 ~/ 0; // 여기서 DivisionByZeroException 발생
} catch (error) {
print('예외 발생: $error');
} finally {
print('항상 실행되는 코드');
}
}
예외는 개발자가 처리할 수 있는 상황이기에, throw 키워드를 통해 일부러 발생시킬 수도 있고, 사용자 정의 예외 상황 또한 만들 수 있다.
class CustomException implements Exception {
final String message;
CustomException(this.message);
String toString() => message;
}
사용자 정의 예외를 발생시킬 때는 throw 키워드를 사용한다.
void someFunction() {
throw CustomException('Something went wrong!');
}
예기치 않은 오류 상황을 나타낸다. 프로그램의 버그나 심각한 문제로 인해 발생하는 오류 상황으로 개발자는 이러한 에러를 대부분 예측할 수 없고, 또 처리하지 않아야 한다. 예를 들어, 메모리 부족이나 스택 오버플로우와 같은 상황이 이에 해당한다. 에러는 잡는다 하더라도 프로그램 진행의 근본적인 문제를 해결하지 않는다.
요약하면, 예외는 예측 가능한 오류로서, 개발자가 사전에 try-catch 구문 등을 통해 적절히 처리할 수 있지만, 에러는 개발자가 예측할 수 없는 오류로서, 일반적으로 처리할 수 있는 방법이 거의 없다고 할 수 있다.