본문 바로가기
Dart (Flutter)

[Dart] Exception Handling

by llHoYall 2023. 2. 9.

이번에는 견고한 프로그램을 만들기 위해 필수적인 예외 처리에 대해 다뤄보겠습니다.

역시 이 부분도 다른 언어들과 별다른 차이가 없어 쉽게 아실 것 같네요.

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

댓글