Menu
Coddy logo textTech

사용자 정의 예외 사용하기

Coddy PHP 여정의 논리 & 흐름 섹션에 포함된 레슨 — 68개 중 57번째.

이제 자신만의 사용자 정의 예외 클래스를 만들었으므로, 이를 실제로 활용해 볼 차례입니다. 사용자 정의 예외를 사용하는 데는 두 가지 주요 단계가 포함됩니다. 문제가 발생했을 때 특정 예외 유형을 던지고(throwing), 해당 예외 유형을 적절하게 처리하기 위해 잡는(catching) 것입니다.

사용자 정의 예외를 발생시킬 때, 동일한 throw 키워드를 사용하지만 일반적인 Exception 클래스 대신 사용자 정의 클래스의 인스턴스를 생성합니다. 이를 통해 오류 처리를 더욱 정밀하고 의미 있게 만들 수 있습니다.

<?php
class InvalidEmailException extends Exception {}

function validateEmail($email) {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        throw new InvalidEmailException("Invalid email format: " . $email);
    }
    echo "Email is valid!";
}
?>

사용자 정의 예외를 잡을 때 진정한 힘이 발휘됩니다. 일반적인 Exception을 잡는 대신, 구체적인 InvalidEmailException을 잡을 수 있습니다. 이를 통해 다양한 유형의 오류를 서로 다른 방식으로 처리할 수 있어, 오류 처리가 더욱 정교해지고 유용한 정보를 제공하게 됩니다.

<?php
try {
    validateEmail("invalid-email");
} catch (InvalidEmailException $e) {
    echo "Email error: " . $e->getMessage();
}
?>

이 방식은 에러 처리에 대한 정밀한 제어권을 제공하여, 애플리케이션의 다양한 유형의 문제에 대해 서로 다르게 대응할 수 있게 해줍니다.

quiz icon실력 점검

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

quiz icon실력 점검

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

quiz icon실력 점검

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

challenge icon

챌린지

쉬움

사용자 이름 문자열, 비밀번호 문자열, 그리고 최소 비밀번호 길이 숫자의 세 가지 입력을 받게 됩니다. 사용자 이름은 비어 있어서는 안 되며, 비밀번호는 최소 길이 요구 사항을 충족해야 합니다.

기본 Exception 클래스를 상속받는 InvalidCredentialsException이라는 사용자 정의 예외 클래스를 생성하세요.

사용자 이름, 비밀번호, 최소 길이의 세 가지 매개변수를 받는 validateCredentials라는 함수를 생성하세요. 이 함수 내부에서 다음을 수행합니다:

  • 사용자 이름이 비어 있는 경우(빈 문자열), "Username cannot be empty"라는 메시지와 함께 InvalidCredentialsException을 던집니다.
  • 비밀번호 길이가 최소 길이보다 짧은 경우, "Password must be at least X characters long" (여기서 X는 최소 길이 값)이라는 메시지와 함께 InvalidCredentialsException을 던집니다.
  • 두 유효성 검사를 모두 통과하면, "Credentials are valid"를 출력합니다.

try...catch 블록을 사용하여 제공된 입력값으로 함수를 호출하세요. catch 블록에서는 InvalidCredentialsException을 구체적으로 잡아서 "Validation error: "를 출력한 뒤, getMessage() 메서드를 사용하여 예외 메시지를 이어서 출력하세요.

입력 형식:

  • 첫 번째 줄: 사용자 이름을 나타내는 문자열 (예: john_doe 또는 빈 문자열)
  • 두 번째 줄: 비밀번호를 나타내는 문자열 (예: pass123)
  • 세 번째 줄: 최소 비밀번호 길이를 나타내는 정수 (예: 8)

예상 출력:

  • 자격 증명이 유효한 경우: Credentials are valid
  • 사용자 이름이 비어 있는 경우: Validation error: Username cannot be empty
  • 비밀번호가 너무 짧은 경우: Validation error: Password must be at least X characters long (여기서 X는 최소 길이)

치트 시트

사용자 정의 예외를 사용하려면, 사용자 정의 클래스의 인스턴스를 throw하고 해당 특정 예외 유형을 catch하세요:

<?php
class InvalidEmailException extends Exception {}

function validateEmail($email) {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        throw new InvalidEmailException("Invalid email format: " . $email);
    }
    echo "Email is valid!";
}

try {
    validateEmail("invalid-email");
} catch (InvalidEmailException $e) {
    echo "Email error: " . $e->getMessage();
}
?>

이를 통해 일반적인 Exception 객체 대신 특정 예외 유형을 catch하여 정밀한 오류 처리가 가능해집니다.

직접 해보기

<?php
// 입력 읽기
$username = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
$minLength = intval(fgets(STDIN));

// TODO: 아래에 코드를 작성하세요
// 1. InvalidCredentialsException 클래스 생성
// 2. validateCredentials 함수 생성
// 3. try...catch 블록을 사용하여 함수를 호출하고 예외를 처리하세요

?>
quiz icon실력 점검

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

논리 & 흐름의 모든 레슨