Menu
Coddy logo textTech

'on'을 사용한 예외 처리

Coddy Dart 여정의 로직 & 흐름 섹션에 포함된 레슨 — 65개 중 40번째.

기본적인 try-catch 블록은 발생하는 모든 예외를 포착하지만, 때로는 서로 다른 유형의 예외를 서로 다른 방식으로 처리해야 할 때가 있습니다. on 키워드를 사용하면 특정 예외 유형을 포착하고 각각에 대해 맞춤형 응답을 제공할 수 있습니다.

일반적인 catch를 사용하여 모든 예외를 포착하는 대신, on 뒤에 예외 유형을 지정하여 특정 예외를 대상으로 할 수 있습니다. 이를 통해 프로그램이 다양한 오류 상황에 대응하는 방식을 더 세밀하게 제어할 수 있습니다.

try {
  int number = int.parse("abc");
} on FormatException {
  print("Please enter a valid number");
}

이 예제에서 코드는 유효하지 않은 텍스트를 숫자로 파싱하려고 할 때 발생하는 FormatException을 구체적으로 캡처합니다. 이를 통해 사용자를 혼란스럽게 할 수 있는 일반적인 오류 메시지를 표시하는 대신, 문제를 직접적으로 해결하는 명확하고 사용자 친화적인 메시지를 제공할 수 있습니다.

여러 개의 on 블록을 결합하여 서로 다른 예외 유형을 적절한 응답으로 처리함으로써, 에러 처리를 정확하고 사용자 친화적으로 만들 수 있습니다.

challenge icon

챌린지

쉬움

on 키워드를 사용하여 특정 예외를 포착하는 방법을 보여주는 프로그램을 작성하세요. 프로그램은 다양한 유형의 사용자 입력을 처리하고 맞춤형 오류 메시지와 함께 특정 예외 유형을 처리합니다.

  1. 수학적 표현식 유형("parse", "divide", 또는 "access")을 나타내는 문자열 입력을 읽습니다.
  2. 첫 번째 값을 나타내는 문자열 입력을 읽습니다.
  3. 두 번째 값을 나타내는 문자열 입력을 읽습니다(해당하는 경우).
  4. 표현식 유형에 따라 특정 예외 처리를 사용하여 해당 작업을 수행합니다:
    • "parse"의 경우: int.parse()를 사용하여 첫 번째 값을 정수로 변환하고 특히 FormatException을 포착합니다.
    • "divide"의 경우: 두 값을 모두 정수로 파싱하여 나눗셈을 수행하고, 파싱 오류에 대해 FormatException을 포착합니다.
    • "access"의 경우: 첫 번째 값을 포함하는 리스트를 생성하고 두 번째 값으로 지정된 인덱스에 접근하며, 잘못된 인덱스에 대해 RangeError를 포착합니다.
  5. 결과 또는 특정 오류 메시지를 아래에 표시된 정확한 형식으로 출력합니다.

예를 들어, 입력이 "parse", "42", "unused"인 경우 프로그램은 다음과 같이 출력해야 합니다:

Operation: parse
Input: 42
Parsing successful!
Result: 42

입력이 "parse", "xyz", "unused"인 경우 프로그램은 다음과 같이 출력해야 합니다:

Operation: parse
Input: xyz
FormatException caught: Invalid number format
Please provide a valid integer

입력이 "divide", "10", "2"인 경우 프로그램은 다음과 같이 출력해야 합니다:

Operation: divide
Values: 10, 2
Division successful!
Result: 5

입력이 "divide", "10", "abc"인 경우 프로그램은 다음과 같이 출력해야 합니다:

Operation: divide
Values: 10, abc
FormatException caught: Invalid number format
Cannot perform division with invalid numbers

입력이 "access", "hello", "1"인 경우 프로그램은 다음과 같이 출력해야 합니다:

Operation: access
List: [hello]
Index: 1
RangeError caught: Index out of range
Valid indices are 0 to 0

프로그램은 on 키워드와 함께 별도의 try-catch 블록을 사용하여 FormatExceptionRangeError를 구체적으로 포착해야 합니다. 각 예외 유형에는 무엇이 잘못되었는지 명확하게 설명하는 고유한 맞춤형 오류 메시지가 있어야 합니다. "access" 작업의 경우, 첫 번째 입력 값만 포함하는 리스트를 생성하고 두 번째 입력 값으로 지정된 인덱스에 접근을 시도하세요.

치트 시트

일반적인 catch 블록을 사용하는 대신 on 키워드를 사용하여 특정 예외 유형을 포착하세요:

try {
  int number = int.parse("abc");
} on FormatException {
  print("Please enter a valid number");
}

여러 개의 on 블록을 결합하여 각기 다른 예외 유형을 적절한 응답으로 처리할 수 있습니다:

try {
  // 서로 다른 예외를 발생시킬 수 있는 일부 코드
} on FormatException {
  print("Invalid format error");
} on RangeError {
  print("Index out of range error");
}

이 방식은 각 특정 예외 유형에 맞는 맞춤형 응답을 가능하게 함으로써 에러 처리에 대해 더 많은 제어권을 제공합니다.

직접 해보기

import 'dart:io';

void main() {
  // 입력 읽기
  String? operation = stdin.readLineSync();
  String? firstValue = stdin.readLineSync();
  String? secondValue = stdin.readLineSync();
  
  // 연산 정보 표시
  print('Operation: $operation');
  
  // TODO: 아래에 코드를 작성하세요
  // 특정 예외를 처리하기 위해 'on' 키워드와 함께 try-catch 블록을 사용하세요
  // parse 및 divide 연산에 대한 FormatException을 처리하세요
  // access 연산에 대한 RangeError를 처리하세요
  
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 & 흐름의 모든 레슨