Menu
Coddy logo textTech

'throw' 키워드

Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨 — 56개 중 50번째.

때로는 다른 함수에서 발생한 예외를 단순히 포착하는 대신, 자신의 코드에서 오류가 발생했음을 알려야 할 때가 있습니다. throw 키워드를 사용하면 프로그램이 문제를 감지했을 때 수동으로 예외를 발생시킬 수 있습니다.

정수, 문자열 또는 사용자 정의 객체와 같은 다양한 유형의 값을 예외로 던질 수 있습니다. 기본 구문은 다음과 같습니다:

if (someErrorCondition) {
    throw "Error message";  // 문자열 리터럴을 던집니다
}

throw를 사용하면, 프로그램은 즉시 현재 함수의 실행을 중단하고 던져진 값을 처리할 수 있는 catch 블록을 찾습니다. 이는 특히 입력을 검증하거나 정상적인 프로그램 실행 중에 발생해서는 안 되는 조건을 확인하는 데 유용합니다.

잘못된 입력을 감지했을 때 예외를 던지는 실용적인 예제입니다:

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

throw 키워드는 프로그램에서 오류가 보고되는 시점과 방법을 제어할 수 있게 해주며, 유효하지 않은 조건을 처리할 때 함수를 더 견고하고 예측 가능하게 만듭니다.

challenge icon

챌린지

쉬움

부적절한 조건이 감지되었을 때 throw 키워드를 사용하여 수동으로 예외를 발생시키는 입력 유효성 검사 프로그램을 작성하세요. 이 챌린지는 사용자 정의 함수에서 오류를 알리기 위해 throw를 사용하는 방법을 이해하고 있는지 테스트합니다.

다음과 같은 입력이 제공됩니다:

  • 사용자가 선택한 사용자 이름을 나타내는 문자열 username
  • 사용자의 나이를 나타내는 정수 age

프로그램의 요구 사항은 다음과 같습니다:

  1. 문자열과 정수를 매개변수로 받는 validateUser라는 이름의 함수를 생성합니다.
  2. 함수 내부에서 사용자 이름이 비어 있는지(길이가 0인지) 확인합니다.
  3. 사용자 이름이 비어 있으면, 문자열 "Username cannot be empty"throw 합니다.
  4. 나이가 13세 미만인지 확인합니다.
  5. 나이가 13세 미만이면, 문자열 "Age must be at least 13"throw 합니다.
  6. 두 유효성 검사를 모두 통과하면, "User validation successful"을 출력합니다.
  7. 메인 함수에서 입력받은 값으로 validateUser를 호출합니다.
  8. try 블록을 사용하여 함수를 호출하고, catch 블록을 사용하여 던져진 문자열 예외를 처리합니다.

다음과 같은 정확한 출력 형식을 사용하세요:

유효성 검사에 성공한 경우:

User validation successful

유효성 검사 오류가 발생한 경우:

Validation error: [error_message]

throw를 사용하면 프로그램은 즉시 현재 함수의 실행을 중단하고 일치하는 catch 블록을 찾는다는 점을 기억하세요. catch 블록은 던져진 문자열 리터럴을 처리하기 위해 const char* 타입을 지정해야 합니다. 첫 번째 유효성 검사가 실패하면 함수는 예외를 던지고 두 번째 조건을 확인하지 않습니다.

치트 시트

throw 키워드를 사용하면 프로그램에서 문제를 감지했을 때 수동으로 예외를 발생시킬 수 있습니다:

if (someErrorCondition) {
    throw "Error message";  // 문자열 리터럴을 던집니다
}

throw를 사용하면 프로그램은 즉시 현재 함수의 실행을 중단하고, 던져진 값을 처리할 수 있는 catch 블록을 찾습니다.

입력 유효성 검사를 위해 예외를 던지는 예시:

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

정수, 문자열 또는 사용자 정의 객체와 같은 다양한 유형의 값을 예외로 던질 수 있습니다. 던져진 문자열 리터럴을 처리하려면 catch 블록에서 const char*를 사용하세요.

직접 해보기

#include <iostream>
#include <string>
using namespace std;

int main() {
    // 입력 읽기
    string username;
    int age;
    cin >> username;
    cin >> age;
    
    // TODO: 여기에 코드를 작성하세요
    // validateUser 함수를 생성하고 유효성 검사 로직을 구현하세요
    // 예외 처리를 위해 try-catch 블록을 사용하세요
    
    return 0;
}
quiz icon실력 점검

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

로직과 흐름의 모든 레슨