이번에는 견고한 프로그램을 만들기 위해 필수적인 예외 처리에 대해 다뤄보겠습니다.
역시 이 부분도 다른 언어들과 별다른 차이가 없어 쉽게 아실 것 같네요.
Throw
임의로 예외를 발생시킬 때는 throw를 사용합니다.
Exception 발생은 expression 이므로, expression이 허용되는 모든 곳에서 예외를 발생시킬 수 있습니다.
Exception object 혹은 임의의 object로 예외를 발생시킬 수 있습니다.
throw FormatException('Expected at least 1 section');
throw 'Out of range!';
try-catch
예외 처리는 많은 언어에서 사용하는 try-catch를 사용합니다.
발생한 예외를 catching하면, 더 이상의 propagation을 막습니다.
on keyword를 사용하여 처리할 예외 종류를 명시할 수 있습니다.
try {
statements
} on OutOfRangeException {
// A specific exception
statements
} on Exception catch (e) {
// Anything else that is an exception
print('Exception details:\n $e');
} catch (e) {
// No specified type, handles all
print('Exception details:\n $e');
}
Debugging을 위해 stack trace를 확인할 수도 있습니다.
...
} catch (e, s) {
print('Exception details:\n $e');
print('Stack trace:\n $s');
}
명시적으로 caller에게 예외를 propagation 시키려면, rethrow를 사용하면 됩니다.
...
} catch (e) {
print('Partially handled ${e.runtimeType}.');
rethrow;
}
finally
Dart 역시 finally를 지원합니다.
예외의 발생 여부와 상관없이 항상 실행되어야 하는 코드가 들어갑니다.
try {
statements
} catch (e) {
print('Exception: $e');
} finally {
// clean up
}
Wrap Up
보다 견고한 프로그램을 만들기 위해 예외 발생이 예상되는 곳에는 열심히 예외 처리를 해서 프로그램이 갑자기 죽어버리는 UX를 만들지 않길 바랍니다.
'Dart (Flutter)' 카테고리의 다른 글
[Dart] Generator (0) | 2023.02.10 |
---|---|
[Dart] Asynchronous (0) | 2023.02.10 |
[Dart] Generics (0) | 2023.02.08 |
[Dart] Enumerated Type (0) | 2023.02.08 |
[Dart] Classes (0) | 2023.02.08 |
댓글