잡은 예외를 다시 던질 땐 rethrow를 써요
잡은 예외를 다시 던질 땐 rethrow를 써요
use_rethrow_when_possible 규칙에 대해 알아볼게요.
본문
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의 예외 처리 지침에서 나왔어요.