본문 바로가기
Dart/Dart 100제

Dart 100제 66 ~ 70 (예외 처리)

by Maccrey Coding 2024. 8. 11.
반응형

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.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

반응형