예외 처리

김민수·2025년 1월 13일

C++

목록 보기
58/68

예외(Exception)는 프로그램 실행 중에 발생할 수 있는 예기치 못한 오류비정상적인 상황을 의미한다. 예외 처리는 이러한 상황이 발생했을 때 프로그램이 비정상 종료되지 않도록 적절히 처리하는 방법을 제공하는 것이다.


1. 기본 구조

try-catch 블록을 사용하여 구현한다.

try {
    // 예외가 발생할 수 있는 코드
} catch (예외 타입 변수) {
    // 예외 처리 코드
}

예시

#include <iostream>
using namespace std;

int main() {
    int a = 10, b = 0;
    try {
        if (b == 0) {
            throw "0으로 나눌 수 없습니다."; // 예외 발생
        }
        cout << "결과: " << a / b << endl;
    } catch (const char* e) { // 예외 처리
        cout << "예외 발생: " << e << endl;
    }
    return 0;
}

출력 결과

예외 발생: 0으로 나눌 수 없습니다.
  • try 블록에서 예외가 발생할 수 있는 코드를 실행한다.
  • throw 키워드를 사용하여 예외를 넘긴다.
  • catch 블록에서 예외를 받아서 처리한다.

2. throw

  • throw는 예외를 발생한 것을 알려주는 역할을 한다.
  • 예외는 또는 객체로 넘길 수 있다.
throw;
throw 객체;

예시

throw 10;          // 정수 예외 던지기
throw "오류 발생"; // 문자열 예외 던지기
throw exception(); // 예외 객체 던지기

3. catch 블록

  • catch 블록은 예외를 받아서 처리한다.
  • 하나의 try 블록에 여러 개의 catch 블록을 사용할 수 있다.
  • catch 블록은 서로 다른 예외 타입을 처리할 수 있다.

예시

try {
    throw 10; // 정수 예외 발생
} catch (int e) {
    cout << "정수 예외 발생: " << e << endl;
} catch (const char* e) {
    cout << "문자열 예외 발생: " << e << endl;
}

4. 모든 예외 잡기

특정 타입의 예외뿐만 아니라 모든 예외를 처리하고 싶다면 catch(...)를 사용할 수 있다.

try {
    throw "예외 발생!";
} catch (...) { // 모든 예외 처리
    cout << "알 수 없는 예외 발생!" << endl;
}

5. 사용자 정의 예외 클래스

표준 예외 외에도 사용자 정의 예외 클래스를 만들어 사용할 수 있다.

예시

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

class MyException : public exception {
public:
    const char* what() const noexcept override {
        return "사용자 정의 예외 발생!";
    }
};

int main() {
    try {
        throw MyException(); // 사용자 정의 예외 던지기
    } catch (MyException& e) {
        cout << e.what() << endl;
    }
    return 0;
}

출력 결과

사용자 정의 예외 발생!

6. 표준 예외 클래스

C++ 표준 라이브러리에서는 다양한 예외 처리를 위해 표준 예외 클래스를 제공합니다.

예외 클래스설명
std::exception모든 표준 예외의 기본 클래스
std::invalid_argument잘못된 인자를 전달했을 때 발생하는 예외
std::out_of_range범위를 벗어난 경우 발생하는 예외
std::overflow_error산술 연산 오버플로우가 발생했을 때 발생하는 예외
std::underflow_error산술 연산 언더플로우가 발생했을 때 발생하는 예외
std::runtime_error런타임 오류가 발생했을 때 발생하는 예외

7. 예외 처리의 필요성

  • 프로그램의 비정상 종료 방지
    예외 처리를 통해 예기치 않은 상황이 발생하더라도 프로그램이 종료되지 않고 정상적으로 동작하도록 할 수 있다.

  • 오류 원인 파악 용이
    예외 처리를 사용하면 오류가 발생한 지점을 명확히 알 수 있어 디버깅이 용이하다.

  • 안정성 향상
    프로그램의 안정성을 높이고 사용자에게 올바른 오류 메시지를 제공할 수 있다.

profile
안녕하세요

0개의 댓글