잡은 예외를 다시 던질 땐 rethrow를 써요

잡은 예외를 다시 던질 땐 rethrow를 써요

use_rethrow_when_possible 규칙에 대해 알아볼게요.

출처: Use rethrow to rethrow a caught exception.

본문

catch로 예외를 잡았는데, 그 예외를 내가 처리할 수 없는 경우라면 그대로 다시 던져야 할 때가 있어요. 이럴 때 **throw 대신 rethrow**를 쓰는 게 좋답니다.

Dart에는 rethrow라는 기능이 마련되어 있어요. 코드를 더 간결하게, 그리고 더 읽기 좋게 만들기 위해 rethrow를 활용하는 거예요.

BAD:

try {
  somethingRisky();
} catch(e) {
  if (!canHandle(e)) throw e;
  handle(e);
}

GOOD:

try {
  somethingRisky();
} catch(e) {
  if (!canHandle(e)) rethrow;
  handle(e);
}

활성화

use_rethrow_when_possible 규칙을 켜려면 analysis_options.yaml 파일의 linter > rules 아래에 추가해요:

linter:
  rules:
    - use_rethrow_when_possible

YAML map 구문으로 lint 규칙을 설정하는 경우엔 linter > rules 아래에 use_rethrow_when_possible: true를 넣으면 돼요:

linter:
  rules:
    use_rethrow_when_possible: true

더 알아보기

  • rethrow는 원래 예외가 가진 스택 트레이스를 그대로 유지해요. 반면 throw e로 다시 던지면 스택 트레이스가 초기화된답니다.
  • 이 규칙은 Effective Dart의 예외 처리 지침에서 나왔어요.