Menu
CoddyTech

'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;
}

호출자는 try 블록 안에 호출을 감쌉니다. 던져진 문자열 리터럴의 타입은 const char*이므로, catch 블록에는 해당 타입을 지정하며, 매개변수에는 메시지가 담깁니다:

try {
    checkAge(-5);
} catch (const char* message) {
    std::cout << "Error: " << message << std::endl;
}
// 출력: Error: Age cannot be negative!

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. main 함수에서 입력값을 사용해 validateUser를 호출합니다.
  8. 함수를 호출하는 try 블록과 발생한 문자열 예외를 처리하는 catch 블록을 사용합니다.

다음의 정확한 출력 형식을 사용하세요.

검증에 성공한 경우:

User validation successful

검증 오류가 발생한 경우:

Validation error: [error_message]

throw를 사용하면 프로그램은 현재 함수의 실행을 즉시 중단하고 일치하는 catch 블록을 찾습니다. 발생한 문자열 리터럴을 처리하려면 catch 블록에서 const char* 형식을 지정해야 합니다. 첫 번째 검증이 실패하면 함수는 예외를 발생시키며 두 번째 조건을 계속 확인하지 않습니다.

직접 해보기

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

// TODO: 여기 main 위에 validateUser 함수를 작성하세요
// string 타입의 username과 int 타입의 age를 받아, 검사에 실패하면 문자열 리터럴을 던집니다

int main() {
    // 입력 읽기
    string username;
    int age;
    getline(cin, username);
    cin >> age;
    
    // TODO: try 블록 안에서 validateUser를 호출하세요
    // 그리고 catch (const char* error)로 던져진 메시지를 받으세요
    
    return 0;
}
quiz icon실력 점검

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

로직과 흐름의 모든 레슨

직접 연습해 보세요: 온라인 C++ 컴파일러