예외 던지기
Coddy Dart 여정의 로직 & 흐름 섹션에 포함된 레슨 — 65개 중 42번째.
때로는 코드에서 직접 에러 조건을 만들어야 할 때가 있습니다. throw 키워드를 사용하면 프로그램이 계속 진행되어서는 안 되는 상황을 만났을 때 수동으로 예외를 발생시킬 수 있습니다.
throw를 사용하여 예외를 발생시킬 때, 본질적으로 "모든 것을 멈추세요 - 여기에 문제가 있습니다"라고 말하는 것과 같습니다. 이는 입력을 검증하거나 함수 내에서 규칙을 강제하는 데 유용합니다. 단순한 문자열 메시지를 던지거나 더 구체적인 예외 유형을 생성할 수 있습니다.
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
print("Age is valid: $age");
}이 예제에서, 누군가 음수 나이를 전달하려고 하면 함수는 즉시 설명이 포함된 메시지와 함께 예외를 발생시킵니다. 이는 함수의 나머지 부분이 유효하지 않은 데이터로 실행되는 것을 방지하여, 코드를 더 신뢰할 수 있고 디버깅하기 쉽게 만듭니다.
예외를 던지는 것은 중요한 작업을 진행하기 전에 입력을 검증해야 하는 함수에서 특히 유용합니다.
챌린지
쉬움잘못된 데이터가 감지될 때 예외를 던지는 사용자 정의 유효성 검사 함수를 구현하여 사용자 계정 정보를 검증하는 프로그램을 작성하세요. 프로그램은 여러 계정 필드를 확인하고 각 유효성 검사 실패에 대해 특정 오류 메시지를 던져야 합니다.
- 사용자 이름(username)을 나타내는 문자열 입력을 읽습니다.
- 이메일 주소(email address)를 나타내는 문자열 입력을 읽습니다.
- 나이(age)를 나타내는 문자열 입력을 읽습니다.
- 비밀번호(password)를 나타내는 문자열 입력을 읽습니다.
- 사용자 이름이 유효한지 확인하는
validateUsername함수를 만듭니다: - 사용자 이름이 비어 있거나 3자 미만인 경우, 예외를 던집니다:
"Username must be at least 3 characters long" - 사용자 이름에 공백이 포함된 경우, 예외를 던집니다:
"Username cannot contain spaces" - 유효성 검사를 통과하면 다음을 출력합니다:
"Username validation passed" - 이메일이 유효한지 확인하는
validateEmail함수를 만듭니다: - 이메일에
@기호가 포함되어 있지 않으면, 예외를 던집니다:"Email must contain @ symbol" - 이메일의
@기호 뒤에 점.이 포함되어 있지 않으면, 예외를 던집니다:"Email must contain a valid domain" - 유효성 검사를 통과하면 다음을 출력합니다:
"Email validation passed" - 나이가 유효한지 확인하는
validateAge함수를 만듭니다: int.parse()를 사용하여 나이 문자열을 정수로 변환합니다.- 나이가 13세 미만이면, 예외를 던집니다:
"Age must be at least 13 years old" - 나이가 120세보다 많으면, 예외를 던집니다:
"Age must be realistic (under 120)" - 유효성 검사를 통과하면 다음을 출력합니다:
"Age validation passed" - 비밀번호가 유효한지 확인하는
validatePassword함수를 만듭니다: - 비밀번호가 8자보다 짧으면, 예외를 던집니다:
"Password must be at least 8 characters long" - 유효성 검사를 통과하면 다음을 출력합니다:
"Password validation passed" - 각 유효성 검사 함수를 순서대로 호출하고 발생하는 모든 예외를 처리합니다.
- 아래에 표시된 정확한 형식으로 결과를 표시합니다.
예를 들어, 입력값이 "john", "john@email.com", "25", "password123"인 경우 프로그램은 다음과 같이 출력해야 합니다:
Account Validation System
=========================
Validating username: john
Username validation passed
Validating email: john@email.com
Email validation passed
Validating age: 25
Age validation passed
Validating password: password123
Password validation passed
=========================
All validations passed successfully!
Account created for user: john입력값이 "jo", "john@email.com", "25", "password123"인 경우 프로그램은 다음과 같이 출력해야 합니다:
Account Validation System
=========================
Validating username: jo
Validation Error: Username must be at least 3 characters long
Account creation failed due to validation errors입력값이 "john doe", "johnemail.com", "12", "pass"인 경우 프로그램은 다음과 같이 출력해야 합니다:
Account Validation System
=========================
Validating username: john doe
Validation Error: Username cannot contain spaces
Account creation failed due to validation errors프로그램은 반드시 사용자 이름, 이메일, 나이, 비밀번호의 정확한 순서대로 각 유효성 검사 함수를 호출해야 합니다. 유효성 검사가 실패하는 즉시 검사를 중단하고 오류 메시지를 표시하십시오. throw 키워드를 사용하여 위에 표시된 특정 오류 메시지와 함께 예외를 수동으로 발생시키십시오. 각 유효성 검사 함수는 해당 필드를 확인하고 유효성 검사에 실패하면 예외를 던지거나, 통과하면 성공 메시지를 출력해야 합니다.
치트 시트
throw 키워드를 사용하면 프로그램이 유효하지 않은 조건을 만났을 때 수동으로 예외를 발생시킬 수 있습니다:
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
print("Age is valid: $age");
}throw를 사용하여 예외를 발생시키면 프로그램은 그 지점에서 실행을 중단합니다. 이는 입력을 검증하고 함수 내의 규칙을 강제하는 데 유용하며, 코드를 더 신뢰할 수 있고 디버깅하기 쉽게 만들어 줍니다.
단순한 문자열 메시지를 던지거나 더 구체적인 예외 유형을 생성할 수 있습니다. 예외를 던지는 것은 중요한 작업을 진행하기 전에 입력을 확인해야 하는 검증 함수에서 특히 유용합니다.
직접 해보기
import 'dart:io';
void main() {
// 입력 읽기
String? username = stdin.readLineSync();
String? email = stdin.readLineSync();
String? age = stdin.readLineSync();
String? password = stdin.readLineSync();
print("Account Validation System");
print("=========================");
try {
// TODO: validateUsername 함수를 생성하고 여기서 호출하세요
print("Validating username: $username");
// TODO: validateEmail 함수를 생성하고 여기서 호출하세요
print("Validating email: $email");
// TODO: validateAge 함수를 생성하고 여기서 호출하세요
print("Validating age: $age");
// TODO: validatePassword 함수를 생성하고 여기서 호출하세요
print("Validating password: $password");
// TODO: 모든 유효성 검사가 통과되면, 성공 메시지를 출력하세요
print("=========================");
print("All validations passed successfully!");
print("Account created for user: $username");
} catch (e) {
// TODO: 예외를 처리하고 오류 메시지를 출력하세요
print("Validation Error: $e");
print("Account creation failed due to validation errors");
}
}
// TODO: 여기에 유효성 검사 함수를 작성하세요이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 & 흐름의 모든 레슨
1고급 리스트 조작
리스트 속성: first 및 last리스트 상태: isEmpty 및 isNotEmpty리스트 뒤집기리스트에 추가: insert리스트 요소 제거: removeWhere리스트에서 찾기: indexOf리스트 정렬리스트 섞기요약 - 리스트 정리 도구