'throw' 키워드
Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨. 56개 중 50번째.
때로는 다른 함수가 발생시킨 예외를 단순히 포착하는 대신, 자신의 코드에서 오류가 발생했음을 알릴 필요가 있습니다. throw 키워드를 사용하면 프로그램이 문제를 감지했을 때 예외를 수동으로 발생시킬 수 있습니다.
예외로 정수, 문자열 또는 사용자 지정 객체와 같은 다양한 유형의 값을 throw할 수 있습니다. 기본 구문은 다음과 같습니다.
if (someErrorCondition) {
throw "Error message"; // 문자열 리터럴을 던집니다
}throw를 사용하면 프로그램은 현재 함수의 실행을 즉시 중지하고, throw된 값을 처리할 수 있는 catch 블록을 찾습니다. 이는 특히 input을 validation하거나 정상적인 프로그램 실행 중에는 발생해서는 안 되는 조건을 확인할 때 유용합니다.
다음은 잘못된 input을 감지했을 때 예외를 발생시키는 실용적인 예입니다:
void checkAge(int age) {
if (age < 0) {
throw "Age cannot be negative!";
}
std::cout << "Age is valid: " << age << std::endl;
}throw 키워드를 사용하면 프로그램에서 오류가 보고되는 시점과 방식을 제어할 수 있어, 잘못된 조건을 처리할 때 함수가 더 견고하고 예측 가능해집니다.
챌린지
쉬움throw 키워드를 사용하여 잘못된 조건이 감지될 때 예외를 수동으로 발생시키는 input validation을 구현하는 프로그램을 작성하세요. 이 challenge에서는 자신만의 function에서 오류를 알리기 위해 throw를 사용하는 방법에 대한 이해도를 테스트합니다.
다음 input이 제공됩니다:
- 사용자가 선택한 사용자 이름을 나타내는
usernamestring(이 줄은 비어 있을 수 있음) - 사용자의 나이를 나타내는 정수
age
프로그램은 다음을 수행해야 합니다:
- 문자열과 정수를 매개변수로 받는
validateUser라는 이름의function을 Create하세요 function내부에서 username이 비어 있는지(length가 0인지) 확인하세요- username이 비어 있으면
"Username cannot be empty"string을throw하세요 - age가 13보다 작은지 확인하세요
- age가 13보다 작으면
"Age must be at least 13"string을throw하세요 - 두 validation이 모두 통과하면
"User validation successful"을 출력하세요 - main function에서 input 값을 사용하여
validateUser를 호출하세요 try블록을 사용하여 function을 호출하고,catch블록을 사용하여 발생한 모든 string exceptions을 handle하세요
다음의 정확한 출력 형식을 사용하세요:
성공적인 validation의 경우:
User validation successfulvalidation 오류의 경우:
Validation error: [error_message]throw를 사용하면 프로그램이 현재 function의 실행을 즉시 중지하고 일치하는 catch 블록을 찾는다는 점을 기억하세요. catch 블록은 발생한 string literal을 handle할 수 있도록 const char* type을 지정해야 합니다. 첫 번째 validation이 실패하면 function은 exception을 throw하고 두 번째 조건을 계속 확인하지 않습니다.
직접 해보기
#include <iostream>
#include <string>
using namespace std;
int main() {
// 입력 읽기
string username;
int age;
getline(cin, username);
cin >> age;
// TODO: 여기에 코드를 작성하세요
// validateUser 함수를 만들고 유효성 검사 로직을 구현하세요
// 예외 처리를 위해 try-catch 블록을 사용하세요
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직과 흐름의 모든 레슨
직접 연습해 보세요: 온라인 C++ 컴파일러