Menu
Coddy logo textTech

'try'와 'catch' 블록

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

trycatch 블록은 함께 작동하여 코드의 안전망을 만듭니다. 잠재적으로 위험한 코드를 try 블록 안에 배치하면, 예외가 발생할 경우 프로그램이 해당 catch 블록으로 이동하여 오류를 원활하게 처리합니다.

기본적인 구문 구조는 다음과 같습니다:

try {
    // 예외가 발생할 수 있는 코드
} catch (exception_type e) {
    // 예외를 처리하는 코드
}

실용적인 예시로 std::stoi를 사용하여 문자열을 숫자로 변환하는 과정이 있습니다. 문자열에 숫자가 아닌 문자가 포함되어 있으면 std::invalid_argument 예외가 발생할 수 있습니다:

try {
    std::string input = "abc";
    int number = std::stoi(input);  // 여기서 예외가 발생합니다
    std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
    std::cout << "Invalid input! Please enter a valid number." << std::endl;
}

try 블록에서 예외가 발생하면, 프로그램은 즉시 해당 블록의 나머지 코드 실행을 중단하고 catch 블록으로 건너뜁니다. 이는 프로그램이 비정상적으로 종료되는 것을 방지하며, 문제가 발생했을 때 사용자에게 유의미한 피드백을 제공할 수 있게 해줍니다.

challenge icon

챌린지

쉬움

trycatch 블록을 사용하여 안전한 문자열-숫자 변환을 보여주는 프로그램을 작성하세요. 이 챌린지는 사용자 입력을 문자열에서 정수로 변환할 때 발생하는 예외를 처리하는 방법에 대한 이해도를 테스트합니다.

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

  • 유효한 정수일 수도 있고 아닐 수도 있는 문자열 userInput

프로그램은 다음을 수행해야 합니다:

  1. std::stoi를 사용하여 문자열-정수 변환을 try 블록 안에 배치합니다.
  2. 변환에 성공하면 성공 메시지와 함께 변환된 숫자를 출력합니다.
  3. 문자열에 숫자가 아닌 문자가 포함되어 있을 때 발생하는 std::invalid_argument 예외를 처리하기 위해 catch 블록을 사용합니다.
  4. catch 블록에서 입력이 유효하지 않음을 나타내는 에러 메시지를 출력합니다.

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

성공적인 변환의 경우:

Valid number: [converted_number]

예외를 발생시키는 유효하지 않은 입력의 경우:

Error: Invalid input

std::stoi는 정수로 변환할 수 없는 문자열을 만났을 때 std::invalid_argument 예외를 발생시킨다는 점을 기억하세요. try 블록은 변환 시도를 포함해야 하며, catch 블록은 이 특정 에러를 처리하기 위해 예외 타입을 std::invalid_argument&로 지정해야 합니다. 예외가 발생하면 프로그램은 즉시 try 블록에서 일치하는 catch 블록으로 점프하여 프로그램이 비정상 종료되는 것을 방지합니다.

치트 시트

예외를 안전하게 처리하려면 trycatch 블록을 사용하세요:

try {
    // 예외가 발생할 수 있는 코드
} catch (exception_type e) {
    // 예외를 처리하는 코드
}

std::stoi 문자열-정수 변환을 사용한 예시입니다:

try {
    std::string input = "abc";
    int number = std::stoi(input);  // 여기서 예외가 발생합니다
    std::cout << "Number: " << number << std::endl;
} catch (std::invalid_argument& e) {
    std::cout << "Invalid input! Please enter a valid number." << std::endl;
}

try 블록에서 예외가 발생하면 프로그램은 즉시 해당 catch 블록으로 이동하여, 충돌을 방지하고 원활한 오류 처리를 가능하게 합니다.

직접 해보기

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

int main() {
    // 입력 읽기
    string userInput;
    cin >> userInput;
    
    // TODO: 아래에 코드를 작성하세요
    // 문자열을 변환하려면 std::stoi와 함께 try-catch 블록을 사용하세요
    
    return 0;
}
quiz icon실력 점검

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

로직과 흐름의 모든 레슨