반응형
"앱이 에러로 꺼졌어요..." 이런 경험 있나요?
Flutter 앱을 만들다 보면, 가끔 예기치 못한 에러 때문에 앱이 뻥! 하고 꺼질 때가 있어요.
사용자는 당황하고, 우리는 디버깅도 어렵고 속상하죠.
이럴 때 등장하는 슈퍼 히어로가 바로 runZonedGuarded()입니다!
🧠 runZonedGuarded()란?
Dart의 "Zone" 기능을 이용해
"앱 전체"를 안전한 울타리 안에서 실행시키고,
예외가 발생해도 앱이 꺼지지 않도록 보호하는 함수입니다.
📦 쉽게 말하면?
- "앱을 안전한 감싸기(wrapper)" 안에서 실행한다
- 에러가 나도 앱이 뻗지 않고, 내가 지정한 코드에서 에러를 잡아 처리할 수 있다
✅ 사용 방법
Flutter 앱 시작 코드를 아래처럼 바꿔보세요.
import 'dart:async';
import 'package:flutter/material.dart';
void main() {
runZonedGuarded(() {
runApp(MyApp());
}, (error, stackTrace) {
// 여기에 에러 처리 코드!
print('❗ 앱에서 에러 발생: $error');
print('📌 스택 트레이스: $stackTrace');
// 예: 에러를 서버에 전송하거나 로컬에 저장할 수도 있어요
});
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'runZonedGuarded Demo',
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("runZonedGuarded 테스트")),
body: Center(
child: ElevatedButton(
child: Text("에러 발생시키기"),
onPressed: () {
// 일부러 에러를 발생시켜봅니다!
throw Exception("테스트용 예외입니다!");
},
),
),
);
}
}
🔍 코드 설명
코드설명
runZonedGuarded(() { ... }) | 이 안에 앱 실행 코드를 넣어요. |
runApp(MyApp()) | 평소처럼 앱을 실행시켜요. |
(error, stackTrace) => {} | 에러가 나면 이곳에서 에러를 처리해요. 콘솔에 출력하거나 서버 전송 가능. |
✅ 언제 사용하면 좋을까?
- 앱 전체의 예외를 한 곳에서 관리하고 싶을 때
- 앱이 갑자기 종료되지 않게 하고 싶을 때
- 에러를 로깅(logging) 하거나 버그 리포트 전송 기능을 만들 때
🚨 주의할 점
- UI에서 발생하는 모든 예외가 다 잡히는 건 아니에요.
예: FlutterError.onError 도 함께 설정해야 할 수도 있어요.
FlutterError.onError = (FlutterErrorDetails details) {
FlutterError.presentError(details);
// 여기서도 로그 전송이나 사용자 알림 가능
};
🧁 정리하자면
runZonedGuarded()는 앱 전체를 감싸 안전하게 실행시켜주는 보호막 같은 함수입니다.
초보자라도 main() 함수에 적용하면 앱의 안정성을 높일 수 있어요!
✨ 마무리 한 줄 요약
Flutter 앱이 갑자기 죽는 걸 막고 싶다면?
main()을 runZonedGuarded()로 감싸세요!
째깍째깍...흘러가는 시간 붙잡고 싶다면?
Study Duck 학습 타이머 즉시 ON! 랭킹 경쟁 참여하고 학습 습관 만들 기회, 놓치지 마세요!
Study Duck팟빵
https://www.podbbang.com/channels/1792491
반응형
'Flutter > Study' 카테고리의 다른 글
플러터에서 폴백 메커니즘(Fallback Mechanism) 구현하기 (0) | 2025.05.23 |
---|---|
Flutter 앱에서 Firebase 프로필 이미지를 로컬에 저장해서 빠르게 불러오는 방법 (0) | 2025.05.20 |
Xcode에서 Runner.xcworkspace 빌드 설정 수정하기 (0) | 2025.05.12 |
Flutter 앱에 Firebase 연결 후 빌드 에러 발생? clang: error: unsupported option '-G' for target 'arm64-apple-ios13-simulator' 문제 해결 방법! (0) | 2025.05.12 |
Hive 데이터 포맷 변경으로 인한 크래시 방지 방법 (AppSetting, UserSetting 안전 마이그레이션) (1) | 2025.05.07 |