프로그래밍 언어/Dart

Dart 예외 처리 try-catch 구문. 사용자 정의 예외와 finally 블록 사용하기 - Dart 기초 #19

eco7T 2024. 6. 25. 07:51
반응형

이 글은 Dart 프로그래밍 입문자를 위해 예외 처리 방법을 설명합니다. 예외 처리는 프로그램 실행 중 발생할 수 있는 오류를 안전하게 관리하여 프로그램의 안정성을 높이는 중요한 방법입니다. 예외 처리의 개념과 try-catch 구문, 여러 종류의 예외 처리, finally 블록, 사용자 정의 예외 등을 실습 예제를 통해 익힐 수 있도록 설명합니다.

Dart 예외 처리 try-catch 구문
Dart 예외 처리 try-catch 구문

 

Dart 예외 처리

예외는 프로그램이 실행되는 동안 발생하는 예상치 못한 상황이나 오류를 말합니다. 예를 들어, 0으로 숫자를 나누려고 하거나, 존재하지 않는 파일을 열려고 할 때 예외가 발생할 수 있습니다.

    try-catch 구문

Dart에서는 'try-catch' 구문을 사용하여 예외를 처리합니다.

기본 형태는 다음과 같습니다:

try { // 예외가 발생할 수 있는 코드 } catch (e) { // 예외가 발생했을 때 실행되는 코드 }

예시를 통해 살펴보겠습니다:

void main() { try { int result = 10 ~/ 0; // 0으로 나누기 시도 print('결과: $result'); // 이 줄은 실행되지 않습니다 } catch (e) { print('오류 발생: $e'); } }

이 코드를 실행하면 다음과 같은 결과가 나옵니다:

오류 발생: IntegerDivisionByZeroException

'10 ~/ 0'에서 0으로 나누려고 시도하여 예외가 발생했지만, catch 블록에서 이를 잡아 오류 메시지를 출력했습니다.

    여러 종류의 예외 처리하기

때로는 여러 종류의 예외를 다르게 처리해야 할 수 있습니다. 이럴 때는 여러 개의 catch 블록을 사용합니다:

void main() { try { // 예외가 발생할 수 있는 코드 List<int> numbers = [1, 2, 3]; print(numbers[10]); // 존재하지 않는 인덱스 접근 } on RangeError { print('리스트의 범위를 벗어났습니다.'); } on Exception catch (e) { print('다른 종류의 예외가 발생했습니다: $e'); } catch (e) { print('알 수 없는 오류가 발생했습니다: $e'); } }

이 코드를 실행하면 다음과 같은 결과가 나옵니다:

리스트의 범위를 벗어났습니다.
반응형

    finally 블록 사용하기

finally 블록은 예외 발생 여부와 관계없이 항상 실행되는 코드 블록입니다. 주로 자원을 해제하거나 정리 작업을 수행할 때 사용합니다.

void main() { try { print('파일을 열고 작업을 시작합니다.'); // 파일 작업 수행 throw Exception('파일 처리 중 오류 발생'); // 의도적으로 예외 발생 } catch (e) { print('오류 발생: $e'); } finally { print('파일을 닫고 자원을 정리합니다.'); } }

실행 결과:

파일을 열고 작업을 시작합니다. 오류 발생: Exception: 파일 처리 중 오류 발생 파일을 닫고 자원을 정리합니다.

 

    사용자 정의 예외 만들기

때로는 프로그램의 특정 상황에 맞는 예외를 직접 만들어 사용하고 싶을 수 있습니다. Dart에서는 Exception 클래스를 상속받아 사용자 정의 예외를 만들 수 있습니다.

class InsufficientBalanceException implements Exception { final double balance; final double withdrawAmount; InsufficientBalanceException(this.balance, this.withdrawAmount); String toString() { return '잔액 부족: 현재 잔액 $balance, 출금 시도액 $withdrawAmount'; } } class BankAccount { double _balance = 0; void deposit(double amount) { _balance += amount; } void withdraw(double amount) { if (_balance < amount) { throw InsufficientBalanceException(_balance, amount); } _balance -= amount; } } void main() { BankAccount account = BankAccount(); account.deposit(1000); try { account.withdraw(1500); } on InsufficientBalanceException catch (e) { print('출금 실패: $e'); } }

실행 결과:

출금 실패: 잔액 부족: 현재 잔액 1000.0, 출금 시도액 1500.0

이 예제에서는 은행 계좌의 출금 기능을 구현하면서, 잔액이 부족할 경우 사용자 정의 예외를 발생시키고 있습니다.

 

Dart 예외 처리 요약

  1. 예외는 프로그램 실행 중 발생하는 예상치 못한 상황입니다.
  2. try-catch 구문을 사용하여 예외를 처리합니다.
  3. 여러 종류의 예외를 다르게 처리할 수 있습니다.
  4. finally 블록은 예외 발생 여부와 관계없이 항상 실행됩니다.
  5. 필요한 경우 사용자 정의 예외를 만들어 사용할 수 있습니다.

예외 처리를 잘 활용하면 프로그램의 안정성을 높이고, 오류 상황을 더 잘 관리할 수 있습니다. 

반응형