본문 바로가기
Dart/Dart Programming language

[중급] Dart예외 처리 및 디버깅/ 커스텀 예외 생성 및 활용법

by Maccrey Coding 2024. 9. 6.
반응형

 

프로그래밍을 하다 보면 표준 예외 클래스만으로는 부족한 경우가 있습니다.

이럴 때 커스텀 예외(Custom Exception)를 만들어 특정 상황에 맞게 예외를 처리할 수 있습니다.

Dart에서는 간단하게 커스텀 예외를 생성하고 활용할 수 있습니다. 이 글에서는 커스텀 예외의 필요성과 구현 방법, 활용법을 소개하겠습니다.

1. 커스텀 예외란?

커스텀 예외(Custom Exception)는 개발자가 특정 요구사항에 맞게 정의한 예외 클래스입니다.

기본적으로 Dart는 Exception 클래스와 이를 상속받은 다양한 표준 예외 클래스를 제공합니다.

하지만, 특정 도메인 로직이나 비즈니스 규칙에 맞는 예외가 필요할 때 커스텀 예외를 사용하면 코드를 더욱 명확하고 직관적으로 만들 수 있습니다.

2. 커스텀 예외 생성 방법

Dart에서 커스텀 예외를 생성하려면 Exception 클래스를 상속받아 새로운 클래스를 정의하면 됩니다.

2.1 기본 커스텀 예외 생성

아래는 간단한 커스텀 예외 클래스의 예시입니다.

class InvalidUserAgeException implements Exception {
  final String message;

  InvalidUserAgeException([this.message = "Invalid user age"]);

  @override
  String toString() => "InvalidUserAgeException: $message";
}

이 예제에서는 InvalidUserAgeException이라는 커스텀 예외를 생성했습니다.

이 예외는 사용자의 나이가 유효하지 않을 때 발생하도록 설계되었습니다.

Exception 클래스를 상속받지 않고, implements Exception을 사용하여 Dart의 표준 예외 구조를 따릅니다.

2.2 커스텀 예외의 메시지 처리

커스텀 예외 클래스에는 예외 메시지를 전달할 수 있도록 생성자를 정의할 수 있습니다. 기본 메시지를 설정하거나, 필요에 따라 커스텀 메시지를 사용할 수 있습니다.

class InsufficientBalanceException implements Exception {
  final String message;

  InsufficientBalanceException([this.message = "Insufficient balance"]);

  @override
  String toString() => "InsufficientBalanceException: $message";
}

이 클래스는 잔액이 부족할 때 발생하는 예외를 나타냅니다. 예외가 발생할 때마다 의미 있는 메시지를 전달할 수 있습니다.

3. 커스텀 예외 사용 예제

이제 커스텀 예외를 활용하는 방법을 살펴보겠습니다. 예를 들어, 사용자의 나이를 검증하는 코드에서 커스텀 예외를 사용할 수 있습니다.

void checkUserAge(int age) {
  if (age < 18) {
    throw InvalidUserAgeException("User must be at least 18 years old.");
  }
}

void main() {
  try {
    checkUserAge(15);
  } catch (e) {
    print(e);  // InvalidUserAgeException: User must be at least 18 years old.
  }
}

위 코드에서는 checkUserAge 함수가 18세 미만의 사용자에 대해 InvalidUserAgeException을 던지며, main 함수의 try-catch 블록에서 이를 처리합니다.

4. 여러 커스텀 예외 처리

프로그램 내에서 여러 종류의 커스텀 예외를 사용할 수도 있습니다. 각 예외에 대한 별도의 catch 블록을 작성하여 예외를 세분화하여 처리할 수 있습니다.

void withdrawAmount(double balance, double amount) {
  if (amount > balance) {
    throw InsufficientBalanceException("Requested amount exceeds the balance.");
  }
}

void main() {
  try {
    checkUserAge(15);
    withdrawAmount(100.0, 150.0);
  } on InvalidUserAgeException catch (e) {
    print("User age error: $e");
  } on InsufficientBalanceException catch (e) {
    print("Balance error: $e");
  } catch (e) {
    print("General error: $e");
  }
}

이 예제에서는 사용자의 나이를 검증한 뒤, 잔액을 확인하여 예외를 던집니다. 각각의 커스텀 예외에 대해 다른 catch 블록을 사용하여 예외를 구분하여 처리합니다.

5. 커스텀 예외 활용 시 고려사항

  • 명확한 이름: 커스텀 예외 클래스의 이름은 예외의 의미를 명확하게 전달해야 합니다.
  • 의미 있는 메시지: 예외가 발생했을 때 유용한 정보를 제공하는 메시지를 설정하여 디버깅을 쉽게 할 수 있도록 합니다.
  • 적절한 사용: 모든 상황에 커스텀 예외를 남발하지 않고, 필요한 경우에만 사용합니다. 잘못 사용하면 코드가 불필요하게 복잡해질 수 있습니다.

 

커스텀 예외를 활용하면 코드의 가독성과 유지 보수성을 크게 향상시킬 수 있습니다.

Dart에서 커스텀 예외를 생성하고 사용하는 방법을 잘 이해하고, 필요에 맞게 응용해 보세요. 예외 처리를 잘 활용하면 더 안전하고 신뢰성 있는 애플리케이션을 개발할 수 있습니다.

 

구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.

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

 

 

반응형