예외 처리, 오류 이해, 그리고 라이브러리 사용법을 학습했다.
프로그램 실행 중 발생하는 “비정상적인 상황”
처리하지 않으면 프로그램이 멈추지만,
try–catch 구조로 적절히 처리하면 프로그램은 계속 정상 실행됨.
FormatException – 문자열을 숫자로 변환할 때처럼 데이터 형식이 잘못된 경우
IOException – 파일/입출력 관련 문제
TimeoutException – 비동기 작업이 일정 시간 안에 끝나지 않을 때
DeferredLoadException – 지연 로딩된 라이브러리 로드 실패 등
→ Dart가 이미 여러 상황을 대비한 예외 타입을 만들어둬서 필요할 때 바로 가져다 쓰는 구조.
프로젝트 상황에 맞는 예외가 필요할 때는
Exception 클래스를 상속해서 직접 만들 수 있다.
예:
class AgeException implements Exception {
final String? message;
AgeException(this.message);
@override
String toString() => message ?? 'AgeException 발생!';
}
예외가 발생할 수 있는 코드를 넣는 블록
발생한 예외를 처리하는 블록
여러 개 사용 가능
특정 타입의 예외만 골라서 처리할 때 사용
예:
try {
int.parse("abc");
} on FormatException catch (e) {
print("형식 오류!");
} catch (e) {
print("그 외 오류");
}
예외 발생 여부와 관계없이 무조건 실행
예: 파일 닫기, 네트워크 종료, DB 연결 종료 등 cleanup 용도로 사용
예:
void checkAge(int age) {
if (age < 0) throw Exception("나이는 음수가 될 수 없습니다.");
}
상황을 확실히 차단할 때 사용.
예외와 다르게 Error는 시스템 레벨 문제, 즉:
개발자가 미리 방지하기 어렵고
발생하면 프로그램을 계속 돌릴 수 없는 경우가 대부분
RangeError / IndexError
StackOverflowError
OutOfMemoryError
TypeError
UnsupportedError
AssertionError
에러는 try-catch로 잡는 개념이 아니라, 애초에 발생하지 않도록 설계하는 것이 핵심.
자주 쓰는 기능들을 미리 코드로 만들어 놓은 “도구 모음집”
→ import로 불러오기만 하면 바로 사용 가능.
dart:core – 기본 타입, 컬렉션(자동 포함)
dart:math – sqrt, pow, pi, Random()
dart:async – Future, Stream
dart:convert – JSON 변환
dart:io – 파일/네트워크
dart:html – 웹 전용
shared_preferences
dio
google_fonts
firebase_core
url_launcher 등
import 'dart:math';
import 'package:http/http.dart' as http;
import 'package:lib/lib.dart' show A, B;
import 'package:lib/lib.dart' hide C;
필요할 때만 라이브러리를 로딩해서 성능을 높이는 방식
내일도 화이팅!