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의 핵심 라이브러리가 오류 처리에 강력하긴 하지만, Either
와 Option
과 같은 개념을 도입하는 함수형 프로그래밍을 위해 dartz
와 같은 제3자 패키지를 사용할 수도 있습니다. 다음은 dartz
를 사용하여 오류 처리하는 예시입니다:
- 의존성 아래
pubspec.yaml
파일에dartz
를 추가하세요:
dependencies:
dartz: ^0.10.0
- 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
부분은 성공을 나타냅니다. 이 패턴은 오류 처리를 더 기능적인 방식으로 다룰 수 있게 해 줄뿐만 아니라 오류 관리를 통해 명확성과 제어를 제공합니다.