[Flutter/Dart] try-catch문 사용법

Dart의 예외 처리란?

Dart에서 프로그램 실행 중 발생하는 오류를 예외(Exception)라고 합니다. 예외를 적절하게 처리하지 않으면 프로그램이 비정상적으로 종료될 수 있습니다. 이를 방지하기 위해 try-catch문을 사용하여 예외를 처리할 수 있습니다.

 

 

Dart에서 try-catch문의 기본 구조

Dart에서 try-catch문의 기본 구조는 다음과 같습니다:

void main() {
  try {
    // 예외가 발생할 가능성이 있는 코드
  } catch (e) {
    // 예외 발생 시 실행될 코드
  }
}

위 코드에서 try 블록 내부에 실행할 코드를 작성하고, catch 블록에서 예외를 처리합니다.

 

 

try-catch문 사용 예제

1. 기본적인 예외 처리

void main() {
  try {
    List<int> numbers = [1, 2, 3];
    print(numbers[5]); // 존재하지 않는 인덱스 접근
  } catch (e) {
    print("예외 발생: $e");
  }
}

실행 결과 :

예외 발생: RangeError (index): Index out of range: index should be less than 3: 5

위 코드에서 존재하지 않는 인덱스를 접근했을 때 'RangeError' 예외가 발생하여 catch 블록에서 예외를 처리합니다.

 

2. on 키워드를 사용한 특정 예외 처리

void main() {
  try {
    List<int> numbers = [1, 2, 3];
    print(numbers[5]); // 존재하지 않는 인덱스 접근
  } on RangeError {
    print("잘못된 인덱스 접근입니다.");
  }
}

실행 결과 :

잘못된 인덱스 접근입니다.

on 키워드를 사용하여 RangeError 예외를 특정하여 처리할 수 있습니다. 이렇게 하면 프로그램의 안정성을 높일 수 있습니다.

 

3. Stack trace를 포함한 예외 처리

void main() {
  try {
    List<int> numbers = [1, 2, 3];
    print(numbers[5]); // 존재하지 않는 인덱스 접근
  } catch (e, stackTrace) {
    print("예외 발생: \$e");
    print("Stack trace: \n\$stackTrace");
  }
}

실행 결과 :

예외 발생: RangeError (index): Index out of range: index should be less than 3: 5
Stack trace: 
$stackTrace

예외 발생 시 stackTrace를 활용하면 오류의 원인을 더 쉽게 찾을 수 있습니다.

 

4. finally 블록 사용

finally 블록은 예외 발생 여부와 관계없이 항상 실행되는 코드 블록입니다.

void main() {
  try {
    List<int> numbers = [1, 2, 3];
    print(numbers[5]); // 존재하지 않는 인덱스 접근
  } on RangeError {
    print("잘못된 인덱스 접근입니다.");
  } finally {
    print("프로그램이 종료되었습니다.");
  }
}

실행 결과 :

잘못된 인덱스 접근입니다.
프로그램이 종료되었습니다.

finally 블록은 리소스 해제로그 기록 등의 용도로 활용됩니다.

 

 

Dart의 예외 처리 Best Practice

  1. 일반적인 예외를 catch할 때 Exception을 사용하자
  2. 특정 예외를 on 키워드로 처리하자
  3. finally 블록을 활용하여 리소스 정리하기
  4. Stack trace를 활용하여 디버깅을 쉽게 하자

 

 

결론

Dart에서 예외 처리는 프로그램의 안정성을 높이는 중요한 요소입니다. try-catch문을 사용하면 프로그램이 예외 상황에서도 안전하게 실행될 수 있습니다. on 키워드로 특정 예외를 처리하면 더욱 정밀한 예외 처리가 가능하며, finally 블록을 활용하여 리소스를 정리하는 것이 좋은 습관입니다.