Error Handling

하요·2024년 7월 3일
0
post-thumbnail

Dart에서 예외 처리를 통한 안정성 향상: Error Handling

에러 핸들링은 프로그램의 안정성과 신뢰성을 높이는 중요한 기능입니다. Dart에서는 try, catch, on, finally 블록과 커스텀 예외를 정의하여 사용할 수 있습니다.

주요 개념

  • 예외(Exception): 일반적으로 프로그래머가 예측하고 처리할 수 있는 비정상적인 상황을 나타냅니다.
  • 오류(Error): 시스템 수준의 심각한 문제로, 프로그램을 중단시켜야 하는 경우가 많습니다.
  • try 블록: 예외가 발생할 수 있는 코드를 포함합니다.
  • catch 블록: try 블록에서 예외가 발생하면 실행됩니다.
  • on 블록: 특정 예외 타입에 대해서만 처리할 때 사용합니다.
  • finally 블록: 예외 발생 여부와 상관없이 항상 실행됩니다. 리소스를 해제하거나 정리 작업을 할 때 유용합니다.
  • 커스텀 예외: 프로그래머가 정의하는 사용자 정의 예외입니다.

예시

예시 1: 기본 에러 핸들링

void main() {
  try {
    var result = 10 ~/ 0;
  } on IntegerDivisionByZeroException {
    print('0으로 나눌 수 없습니다.');
  } catch (e) {
    print('기타 예외 발생: $e');
  } finally {
    print('이 코드는 항상 실행됩니다.');
  }
}

위의 예제에서는 0으로 나눌 때 발생하는 예외를 try, on, catch, finally 블록을 통해 처리합니다.

예시 2: 예외 던지기

void checkNumber(int number) {
  if (number < 0) {
    throw FormatException('음수는 허용되지 않습니다.');
  }
}

void main() {
  try {
    checkNumber(-1);
  } catch (e) {
    print('예외 발생: $e');
  }
}

위의 예제에서는 throw 키워드를 사용하여 음수일 때 예외를 던집니다.

예시 3: 사용자 정의 예외

class CustomException implements Exception {
  final String message;
  CustomException(this.message);

  
  String toString() => 'CustomException: $message';
}

void doSomething(int value) {
  if (value < 0) {
    throw CustomException('값이 음수일 수 없습니다.');
  }
}

void main() {
  try {
    doSomething(-5);
  } catch (e) {
    print('예외 발생: $e');
  }
}

위의 예제에서는 CustomException 클래스를 정의하고 이를 사용하여 예외를 던지고 처리합니다.

예시 4: assert 사용

assert는 주로 디버그 모드에서 사용되는 조건 검증 도구입니다. 조건이 false일 경우 프로그램을 중단시키고 오류 메시지를 출력합니다.

void main() {
  var number = 5;
  assert(number > 0, 'number는 0보다 커야 합니다.');
  print('number는 양수입니다.');
}

위의 예제에서는 assert를 사용하여 조건을 검증합니다.

주요 활용도

  • 리소스 관리: finally 블록을 통해 파일, 소켓, 데이터베이스 연결 등 리소스를 반드시 해제합니다.
  • 예외 처리: try, catch, on 블록을 통해 다양한 예외 상황을 처리합니다.
  • 커스텀 예외: 사용자 정의 예외를 통해 더 구체적인 에러 처리를 할 수 있습니다.
  • 디버깅: assert를 사용하여 디버그 모드에서 조건을 검증합니다.

추가 팁

  • 예외 로깅: 예외 발생 시 로그를 남겨 문제를 추적할 수 있도록 합니다.
  • 적절한 예외 사용: 예외를 남용하지 않도록 하며, 필요한 경우에만 사용합니다.
  • 커스텀 예외 정의: 구체적인 상황에 맞는 예외를 정의하여 사용합니다.

관련 자료

profile
flutter 개발자(진)

0개의 댓글