Menu
Coddy logo textTech

예외 던지기

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

때로는 코드에서 직접 에러 조건을 만들어야 할 때가 있습니다. throw 키워드를 사용하면 프로그램이 계속 진행되어서는 안 되는 상황을 만났을 때 수동으로 예외를 발생시킬 수 있습니다.

throw를 사용하여 예외를 발생시킬 때, 본질적으로 "모든 것을 멈추세요 - 여기에 문제가 있습니다"라고 말하는 것과 같습니다. 이는 입력을 검증하거나 함수 내에서 규칙을 강제하는 데 유용합니다. 단순한 문자열 메시지를 던지거나 더 구체적인 예외 유형을 생성할 수 있습니다.

void checkAge(int age) {
  if (age < 0) {
    throw "Age cannot be negative!";
  }
  print("Age is valid: $age");
}

이 예제에서, 누군가 음수 나이를 전달하려고 하면 함수는 즉시 설명이 포함된 메시지와 함께 예외를 발생시킵니다. 이는 함수의 나머지 부분이 유효하지 않은 데이터로 실행되는 것을 방지하여, 코드를 더 신뢰할 수 있고 디버깅하기 쉽게 만듭니다.

예외를 던지는 것은 중요한 작업을 진행하기 전에 입력을 검증해야 하는 함수에서 특히 유용합니다.

challenge icon

챌린지

쉬움

잘못된 데이터가 감지될 때 예외를 던지는 사용자 정의 유효성 검사 함수를 구현하여 사용자 계정 정보를 검증하는 프로그램을 작성하세요. 프로그램은 여러 계정 필드를 확인하고 각 유효성 검사 실패에 대해 특정 오류 메시지를 던져야 합니다.

  1. 사용자 이름(username)을 나타내는 문자열 입력을 읽습니다.
  2. 이메일 주소(email address)를 나타내는 문자열 입력을 읽습니다.
  3. 나이(age)를 나타내는 문자열 입력을 읽습니다.
  4. 비밀번호(password)를 나타내는 문자열 입력을 읽습니다.
  5. 사용자 이름이 유효한지 확인하는 validateUsername 함수를 만듭니다:
    • 사용자 이름이 비어 있거나 3자 미만인 경우, 예외를 던집니다: "Username must be at least 3 characters long"
    • 사용자 이름에 공백이 포함된 경우, 예외를 던집니다: "Username cannot contain spaces"
    • 유효성 검사를 통과하면 다음을 출력합니다: "Username validation passed"
  6. 이메일이 유효한지 확인하는 validateEmail 함수를 만듭니다:
    • 이메일에 @ 기호가 포함되어 있지 않으면, 예외를 던집니다: "Email must contain @ symbol"
    • 이메일의 @ 기호 뒤에 점 .이 포함되어 있지 않으면, 예외를 던집니다: "Email must contain a valid domain"
    • 유효성 검사를 통과하면 다음을 출력합니다: "Email validation passed"
  7. 나이가 유효한지 확인하는 validateAge 함수를 만듭니다:
    • int.parse()를 사용하여 나이 문자열을 정수로 변환합니다.
    • 나이가 13세 미만이면, 예외를 던집니다: "Age must be at least 13 years old"
    • 나이가 120세보다 많으면, 예외를 던집니다: "Age must be realistic (under 120)"
    • 유효성 검사를 통과하면 다음을 출력합니다: "Age validation passed"
  8. 비밀번호가 유효한지 확인하는 validatePassword 함수를 만듭니다:
    • 비밀번호가 8자보다 짧으면, 예외를 던집니다: "Password must be at least 8 characters long"
    • 유효성 검사를 통과하면 다음을 출력합니다: "Password validation passed"
  9. 각 유효성 검사 함수를 순서대로 호출하고 발생하는 모든 예외를 처리합니다.
  10. 아래에 표시된 정확한 형식으로 결과를 표시합니다.

예를 들어, 입력값이 "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: 여기에 유효성 검사 함수를 작성하세요
quiz icon실력 점검

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

로직 & 흐름의 모든 레슨