본문 바로가기
프로그래밍/C++

[C++] 10. C++의 "예외 처리"

by iwbap 2024. 6. 17.
728x90

C++ 학습: 예외 처리

예외 처리는 프로그램 실행 중에 발생할 수 있는 오류를 처리하는 방법입니다. 이를 통해 프로그램이 예기치 않게 종료되는 것을 방지하고, 오류를 적절히 처리할 수 있습니다. 이번 글에서는 예외의 개념, 예외 처리 블록(try, catch, throw), 그리고 표준 예외 클래스에 대해 알아보겠습니다.


1. 예외의 개념: 예외의 기본 개념

예외(exception)는 프로그램 실행 중에 발생하는 예기치 않은 상황이나 오류를 의미합니다. 예외 처리를 통해 이러한 상황을 감지하고, 프로그램이 적절히 대응하도록 할 수 있습니다. 예외 처리는 코드의 정상적인 흐름을 방해하지 않고, 오류를 안전하게 처리하는 데 중요한 역할을 합니다.

 

예외가 발생하는 일반적인 상황

  • 잘못된 입력
  • 파일을 열 수 없음
  • 메모리 할당 실패
  • 계산 오류(예: 0으로 나누기)

예외 처리를 사용하면 프로그램이 이러한 오류를 감지하고, 적절한 조치를 취할 수 있습니다.


2. try, catch, throw: 예외 처리 블록

C++에서는 예외 처리를 위해 try, catch, throw 키워드를 사용합니다.

  • try 블록 : 예외가 발생할 가능성이 있는 코드를 감싸는 블록입니다.
  • catch 블록 : try 블록에서 발생한 예외를 처리하는 블록입니다.
  • throw 키워드 : 예외를 발생시키는 데 사용됩니다.

 

- 예외 처리 블록 예제

[cpp]
 
#include <iostream>
using namespace std;

int divide(int a, int b) {
    if (b == 0) {
        throw runtime_error("Division by zero"); // 예외 발생
    }
    return a / b;
}

int main() {
    int x = 10;
    int y = 0;

    try {
        int result = divide(x, y);
        cout << "Result: " << result << endl;
    } catch (const runtime_error& e) {
        cout << "Caught an exception: " << e.what() << endl; // 예외 처리
    }

    return 0;
}
 

위의 예제에서 divide 함수는 두 숫자를 나누고, 분모가 0일 경우 runtime_error 예외를 발생시킵니다. main 함수에서 try 블록을 사용하여 divide 함수를 호출하고, 예외가 발생하면 catch 블록에서 이를 처리합니다.


3. 표준 예외 클래스: 표준 라이브러리의 예외 클래스

C++ 표준 라이브러리는 다양한 예외 처리를 위한 표준 예외 클래스를 제공합니다. 이러한 클래스는 <stdexcept> 헤더 파일에 정의되어 있습니다. 주요 표준 예외 클래스는 다음과 같습니다:

  • std::exception : 모든 표준 예외 클래스의 기본 클래스입니다.
  • std::runtime_error : 실행 중 발생하는 예외를 나타냅니다.
  • std::logic_error : 논리적 오류를 나타냅니다.
  • std::out_of_range : 범위를 벗어나는 접근을 나타냅니다.
  • std::invalid_argument : 유효하지 않은 인수를 나타냅니다.

 

- 표준 예외 클래스 사용 예제

[cpp]
 
#include <iostream>
#include <stdexcept>
#include <vector>
using namespace std;

int main() {
    vector<int> vec = {1, 2, 3};

    try {
        // 범위를 벗어난 접근
        cout << vec.at(5) << endl;
    } catch (const out_of_range& e) {
        cout << "Caught an exception: " << e.what() << endl;
    }

    try {
        // 유효하지 않은 인수
        throw invalid_argument("Invalid argument provided");
    } catch (const invalid_argument& e) {
        cout << "Caught an exception: " << e.what() << endl;
    }

    return 0;
}
 

위의 예제에서 out_of_range 예외와 invalid_argument 예외를 발생시키고, 각각의 catch 블록에서 이를 처리합니다. 표준 예외 클래스는 what 멤버 함수를 통해 예외에 대한 설명을 제공합니다.


이번 글에서는 C++의 예외 처리에 대해 알아보았습니다. 예외의 기본 개념, 예외 처리 블록(try, catch, throw), 그리고 표준 예외 클래스를 이해하고 활용하면 프로그램의 안정성과 신뢰성을 높일 수 있습니다. Happy Coding!

728x90