Dart:
오류 처리

방법:

Dart는 컴파일 시간 오류와 실행 시간 오류라는 두 가지 유형의 오류를 지원합니다. 컴파일 시간 오류는 코드가 실행되기 전에 Dart 분석기에 의해 감지되며, 실행 시간 오류 또는 예외는 실행 중에 발생합니다. 다음은 Dart에서 예외를 처리하는 방법입니다:

Try-Catch

try-catch를 사용하여 예외를 캡처하고 애플리케이션이 충돌하는 것을 방지하세요:

try {
  var result = 100 ~/ 0; // 0으로 나누기 시도, 예외 발생
} catch (e) {
  print('예외를 캐치했습니다: $e'); // 예외 처리
}

샘플 출력: 예외를 캐치했습니다: IntegerDivisionByZeroException

특정 예외

특정 예외를 처리하려면 catch 뒤에 예외를 명시하세요:

try {
  var result = 100 ~/ 0;
} on IntegerDivisionByZeroException {
  print('0으로 나눌 수 없습니다.'); // 0으로 나누는 예외를 구체적으로 처리
}

샘플 출력: 0으로 나눌 수 없습니다.

스택 추적

디버깅을 위한 스택 추적을 얻으려면 catch 블록에서 두 번째 파라미터를 사용하세요:

try {
  var result = 100 ~/ 0;
} catch (e, s) {
  print('예외: $e');
  print('스택 추적: $s'); // 디버깅을 위한 스택 추적 출력
}

Finally

finally를 사용하여 try/catch 이후에 예외가 발생했는지 여부에 상관없이 코드를 실행하세요:

try {
  var result = 100 ~/ 0;
} catch (e) {
  print('예외를 캐치했습니다: $e');
} finally {
  print('이 코드는 항상 실행됩니다.'); // 정리 코드 또는 마지막 단계
}

샘플 출력:

예외를 캐치했습니다: IntegerDivisionByZeroException
이 코드는 항상 실행됩니다.

제3자 라이브러리

Dart의 핵심 라이브러리가 오류 처리에 강력하긴 하지만, EitherOption과 같은 개념을 도입하는 함수형 프로그래밍을 위해 dartz와 같은 제3자 패키지를 사용할 수도 있습니다. 다음은 dartz를 사용하여 오류 처리하는 예시입니다:

  1. 의존성 아래 pubspec.yaml 파일에 dartz를 추가하세요:
dependencies:
  dartz: ^0.10.0
  1. Dart 코드에서 오류를 우아하게 처리하기 위해 Either를 사용하세요:
import 'package:dartz/dartz.dart';

Either<String, int> divide(int dividend, int divisor) {
  if (divisor == 0) {
    return Left('0으로 나눌 수 없습니다.');
  } else {
    return Right(dividend ~/ divisor);
  }
}

void main() {
  final result = divide(100, 0);
  result.fold(
    (left) => print('오류: $left'), 
    (right) => print('결과: $right')
  );
}

샘플 출력: 오류: 0으로 나눌 수 없습니다.

Left 부분은 일반적으로 오류를 나타내며, Right 부분은 성공을 나타냅니다. 이 패턴은 오류 처리를 더 기능적인 방식으로 다룰 수 있게 해 줄뿐만 아니라 오류 관리를 통해 명확성과 제어를 제공합니다.