[c++] C++ 예외 처리 패턴

C++에서 예외 처리는 프로그램에서 발생하는 예외 상황을 처리하는 중요한 부분입니다. 이 글에서는 C++에서 예외를 처리하는 일반적인 패턴과 관련된 내용을 다룰 것입니다.

예외 클래스 정의

C++에서 예외를 처리하려면 사용자 정의 예외 클래스를 정의해야 합니다. 이 예외 클래스는 특정 예외 상황을 식별하고, 예외 정보를 포함하도록 설계되어야 합니다. 예를 들어, 파일을 열 때 발생하는 예외를 처리하려면 FileOpenException과 같은 예외 클래스를 정의할 수 있습니다.

class FileOpenException : public std::exception {
public:
    FileOpenException(const std::string& message) : m_message(message) {}
    const char* what() const noexcept override { return m_message.c_str(); }
private:
    std::string m_message;
};

예외 던지기

예외 상황이 발생할 때마다 해당 예외 객체를 생성하고 이를 던질 수 있습니다. 이를 통해 예외 처리 블록으로 예외 상황을 전파할 수 있습니다.

void openFile(const std::string& filename) {
    if (!fileExists(filename)) {
        throw FileOpenException("File does not exist");
    }
    // 파일 열기 로직
}

예외 처리

예외를 처리하는 데에는 try-catch 블록을 사용합니다. 예외가 발생할 수 있는 코드를 try 블록 안에 넣고, 해당 예외를 처리하는 코드를 catch 블록에 작성합니다.

try {
    openFile("example.txt");
} catch (const FileOpenException& ex) {
    std::cerr << "File open failed: " << ex.what() << std::endl;
}

리소스 정리

예외가 발생했을 때 리소스 누수를 방지하기 위해 RAII(Resource Acquisition Is Initialization) 패턴을 사용하는 것이 좋습니다. RAII를 통해 예외가 발생해도 자원을 안전하게 정리할 수 있습니다.

참고 자료:

C++에서 예외를 정의하고 처리하는 방법은 프로그램 안정성을 높이고 예외 상황을 명확히 처리할 수 있도록 도와줍니다. 위에서 다룬 패턴과 관련된 사항을 참고하여 효율적인 예외 처리를 적용해보세요.