'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 키워드는 프로그램에서 오류가 보고되는 시점과 방법을 제어할 수 있게 해주며, 유효하지 않은 조건을 처리할 때 함수를 더 견고하고 예측 가능하게 만듭니다.
챌린지
쉬움부적절한 조건이 감지되었을 때 throw 키워드를 사용하여 수동으로 예외를 발생시키는 입력 유효성 검사 프로그램을 작성하세요. 이 챌린지는 사용자 정의 함수에서 오류를 알리기 위해 throw를 사용하는 방법을 이해하고 있는지 테스트합니다.
다음과 같은 입력이 제공됩니다:
- 사용자가 선택한 사용자 이름을 나타내는 문자열
username - 사용자의 나이를 나타내는 정수
age
프로그램의 요구 사항은 다음과 같습니다:
- 문자열과 정수를 매개변수로 받는
validateUser라는 이름의 함수를 생성합니다. - 함수 내부에서 사용자 이름이 비어 있는지(길이가 0인지) 확인합니다.
- 사용자 이름이 비어 있으면, 문자열
"Username cannot be empty"를throw합니다. - 나이가 13세 미만인지 확인합니다.
- 나이가 13세 미만이면, 문자열
"Age must be at least 13"을throw합니다. - 두 유효성 검사를 모두 통과하면,
"User validation successful"을 출력합니다. - 메인 함수에서 입력받은 값으로
validateUser를 호출합니다. 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;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.