66. 예외 처리 기본: 나누기 연산에서 예외 처리하기
문제
나누기 연산을 수행할 때 0으로 나누는 경우 발생하는 예외를 처리해야 합니다.
답
Dart에서는 try-catch 문을 사용하여 예외를 처리할 수 있습니다. try 블록에서 예외가 발생할 수 있는 코드를 작성하고, catch 블록에서 예외를 처리합니다.
예제
void main() {
try {
int a = 10;
int b = 0;
int result = a ~/ b; // 정수 나누기 연산
print('Result: $result');
} catch (e) {
print('An error occurred: $e');
}
}
설명
위 코드에서 ~/ 연산자는 정수 나누기 연산자입니다. b가 0일 경우 ArithmeticException이 발생합니다.
catch 블록에서는 예외를 잡아 An error occurred 메시지와 함께 예외 내용을 출력합니다.
67. 사용자 입력 예외 처리: 사용자 입력에서 발생할 수 있는 예외 처리하기
문제
사용자에게 숫자를 입력받아 정수로 변환할 때 예외가 발생할 수 있습니다.
예를 들어, 사용자가 숫자가 아닌 값을 입력할 때를 처리해야 합니다.
답
int.parse 메서드를 사용할 때 입력값이 정수가 아닐 경우 FormatException이 발생할 수 있습니다.
예제
import 'dart:io';
void main() {
print('Enter a number:');
String? input = stdin.readLineSync();
try {
int number = int.parse(input!);
print('You entered: $number');
} catch (e) {
print('Invalid input: $e');
}
}
설명
위 코드에서 사용자가 입력한 값이 정수가 아닐 경우 int.parse에서 FormatException이 발생합니다. catch 블록에서 이 예외를 잡아 적절한 오류 메시지를 출력합니다.
68. 예외 던지기: 예외를 명시적으로 던지는 방법
문제
특정 조건에서 예외를 강제로 발생시키고 처리하는 방법을 알아야 합니다.
답
Dart에서는 throw 키워드를 사용하여 명시적으로 예외를 던질 수 있습니다.
예제
void checkAge(int age) {
if (age < 0) {
throw ArgumentError('Age cannot be negative.');
} else {
print('Age is valid.');
}
}
void main() {
try {
checkAge(-5);
} catch (e) {
print('Error: $e');
}
}
설명
checkAge 함수에서 나이(age)가 0보다 작은 경우 ArgumentError를 던집니다. main 함수에서 이 예외를 잡아 오류 메시지를 출력합니다.
69. 사용자 정의 예외: 사용자 정의 예외 클래스 정의하기
문제
자신만의 예외 클래스를 정의하고 이를 사용하여 예외를 처리해야 합니다.
답
Dart에서는 Exception 클래스를 상속하여 사용자 정의 예외를 만들 수 있습니다.
예제
class NegativeAgeException implements Exception {
String cause;
NegativeAgeException(this.cause);
@override
String toString() => 'NegativeAgeException: $cause';
}
void checkAge(int age) {
if (age < 0) {
throw NegativeAgeException('Age cannot be negative.');
} else {
print('Age is valid.');
}
}
void main() {
try {
checkAge(-5);
} catch (e) {
print(e);
}
}
설명
NegativeAgeException 클래스를 정의하여 예외를 구현합니다. checkAge 함수에서 이 예외를 던지고, main 함수에서 이를 잡아 처리합니다.
70. 예외 체인: 예외 체인을 사용하여 원래 예외 추적하기
문제
예외 처리 과정에서 원래 발생한 예외를 추적해야 합니다.
답
Dart에서는 예외 체인을 사용하여 예외가 발생한 원인을 추적할 수 있습니다. throw 구문에 원래 예외를 함께 던져서 체인할 수 있습니다.
예제
void main() {
try {
try {
throw FormatException('Original format exception');
} catch (e) {
throw Exception('Wrapper exception caused by: $e');
}
} catch (e) {
print('Caught an exception: $e');
}
}
설명
내부 try 블록에서 발생한 FormatException을 외부 catch 블록에서 잡아 Exception을 던지면서 원래 예외를 함께 포함시킵니다.
최종적으로 main 함수에서 예외를 처리하면서 원래의 예외 원인을 확인할 수 있습니다.
Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.
'Dart > Dart 100제' 카테고리의 다른 글
Dart 100제 81 ~ 85 (기타) (0) | 2024.08.26 |
---|---|
Dart 100제 71 ~ 75 (라이브러리와 패키지) (0) | 2024.08.11 |
Dart 100제 61 ~ 65 (문자열과 정규 표현식) (0) | 2024.08.09 |
Dart 100제 51 ~ 60 (보충 문제) (0) | 2024.08.09 |
Dart 100제 46 ~ 50 (고급 주제) (0) | 2024.08.07 |