Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- 단축키
- nodejs
- scss
- java 출력
- 자바 포맷 출력
- riverpod
- java 콘솔 출력 차이
- abap
- DART
- println
- 배포
- unity
- Clean Architecture
- 엡
- firebase
- ListView
- LLM
- 자바스크립트
- develop
- JQ
- 앱심사
- Flutter
- react
- printf
- JS
- 자바 출력 방식
- java
- npm
- UI/UX
- lifecycle
Archives
- Today
- Total
guricode
Dart - 예외 처리 본문
Dart에서 예외(Exception)는 프로그램 실행 중 문제가 발생했을 때 이를 알려주는 메커니즘이다. 예외를 처리하지 않으면 프로그램은 종료되지만, 적절히 처리하면 문제 없이 정상적으로 실행을 이어갈 수 있다.
예외란 무엇인가
- 예외는 프로그램 실행 중 발생하는 비정상 상황을 나타낸다.
- 처리하지 않으면 프로그램이 중단된다.
- Dart에서는 Exception 클래스를 상속받아 예외를 정의한다.
- Exception("에러 메시지")처럼 예외 객체를 생성할 수도 있지만, 어떤 종류의 예외인지 알 수 없다.
var exception = Exception("이렇게 하면 어떤 예외인지 모름");
Dart에서 정의한 주요 예외들
▶ DeferredLoadException
필요한 시점에 로드되도록 설정된 라이브러리를 로드하지 못했을 때 발생한다.
DeferredLoadException(String message)
▶ FormatException
데이터가 처리 가능한 형식이 아닐 때 발생한다. (예: 문자열을 int.parse()로 정수로 바꿀 수 없을 때)
FormatException([String message = "", dynamic source, int? offset])
▶ IOException
입출력 동작 중 문제가 발생했을 때 던져진다.
IOException()
▶ OSError
운영체제 관련 예외이다.
OSError([String message = "", int errorCode = noErrorCode])
- message에는 운영체제가 제공하는 예외 설명이 들어가며, 없으면 빈 문자열이다.
- errorCode에는 운영체제 오류 코드가 들어간다.
▶ TimeoutException
비동기 작업 중 일정 시간 동안 결과를 받지 못했을 때 발생한다.
TimeoutException(String? message, [Duration? duration])
사용자 정의 예외
직접 예외 클래스를 만들어서 특정 상황에 맞는 예외를 만들 수 있다.
Exception 클래스를 구현(implements)하거나 상속받아 작성한다.
class AgeException implements Exception {
final String? message;
AgeException(this.message);
@override
String toString() => message ?? 'AgeException이 발생했어요!';
}
사용자 정의 예외 사용 예시
class AgeException implements Exception {
final String? message;
AgeException(this.message);
}
void printAge(int age) {
if (age < 0) {
throw AgeException(null);
}
print(age);
}
void main() {
try {
printAge(-8);
} catch (e) {
print(e);
}
}
- printAge()에서 음수일 경우 예외를 던지고,
- main()에서 이를 catch로 받아 출력한다.
예외 처리 키워드
▶ try
예외가 발생할 수 있는 코드를 감싸는 블록이다. 예외가 발생하면 catch 또는 on 블록으로 이동한다.
▶ catch
try 블록 안에서 예외가 발생했을 때 실행되는 블록이다.
try {
// 예외 발생 가능 코드
} catch (e) {
print(e);
}
▶ on
특정 타입의 예외만 따로 처리하고 싶을 때 사용한다. catch와 함께 쓰는 것이 일반적이다.
on IOException catch (e) {
print('입출력 예외: $e');
}
▶ finally
예외 발생 여부와 상관없이 항상 실행되는 블록이다. 리소스 정리나 종료 로그 출력 등에 사용된다.
try-catch-finally 예제
try {
String validNumber = "123";
int result = int.parse(validNumber);
print(result);
} catch (e) {
print(e);
} finally {
print('예외 처리 끝 -');
}
try {
String invalidNumber = "abc";
int result = int.parse(invalidNumber);
print(result);
} on FormatException catch (e) {
print(e);
} catch (e) {
print(e);
}
예외 강제로 발생시키기 - throw
예외를 명시적으로 발생시킬 수 있다.
Exception, Error, 혹은 이를 상속한 객체를 throw 한다.
void printAge(int age) {
if (age < 0) {
throw Exception('나이는 0 이상이어야 해요!');
}
print(age);
}
void main() {
try {
printAge(8);
} on Exception catch (e) {
print(e);
}
}
정리
키워드 설명
| try | 예외가 발생할 수 있는 코드 블록 |
| catch | 예외가 발생했을 때 처리하는 블록 |
| on | 특정 타입의 예외를 구분해서 처리할 때 사용 |
| finally | 예외 발생 여부와 관계없이 항상 실행되는 블록 |
| throw | 예외를 직접 발생시킬 때 사용 |
예외 처리는 프로그램의 안정성을 높이고, 예상치 못한 상황에 유연하게 대응하기 위해 필수적인 요소이다. Dart에서도 다양한 예외 처리 방법을 지원하므로 익숙해지는 것이 중요하다.
'앱 > Flutter&Dart' 카테고리의 다른 글
| [CLI RPG] 몬스터의 랜덤데미지가 처음에만 적용되던 버그 (0) | 2025.07.03 |
|---|---|
| CLI 쇼핑몰 구현 중 Cart list에 중복된 아이템 입력됨 트러블 슈팅 (2) | 2025.06.27 |
| 한눈에 보는 클래스와 메서드 요약 (0) | 2025.06.25 |
| 자주쓰는 메서드 체이닝 (0) | 2025.06.24 |
| Dart 간단 정리 - 컬렉션 고차 함수 (0) | 2025.06.24 |