C++에서 예외 처리는 프로그램 실행 중에 발생할 수 있는 예상치 못한 상황에 대비하는 중요한 기술입니다.
예외 처리는 프로그램의 안정성과 신뢰성을 높이는 데 도움이 되며,
오류를 효율적으로 관리하고 처리할 수 있도록 합니다.
이러한 예외 처리는 'try', 'catch', 'throw' 키워드를 사용하여 구현됩니다.
예외 발생과 처리
예외는 프로그램 실행 중에 발생할 수 있는 문제를 나타냅니다.
이 문제는 런타임 중에 예상되지 않은 동작이거나 오류 상황일 수 있습니다.
예를 들어, 배열의 인덱스가 범위를 벗어나거나 파일을 열 때 파일이 존재하지 않는 경우 등이 있습니다.
'try', 'catch' 블록
C++에서 예외를 처리하기 위해 'try', 'catch' 블록을 사용합니다.
'try' 블록 내에서 예외가 발생할 수 있는 코드를 작성하고,
이에 대한 예외 처리를 'catch' 블록에서 수행합니다.
만약 'try' 블록 내에서 예외가 발생하면,
해당 블록을 빠져나와 가장 가까운 'catch' 블록으로 이동하여 예외를 처리합니다.
'throw' 문
'throw' 문은 예외를 발생시키는 데 사용됩니다.
예외를 발생시키면 프로그램의 흐름이 'try' 블록을 빠져나와 가장 가까운 'catch' 블록으로 이동하게 됩니다.
예외를 발생시키는 방법은 사용자가 직접 정의한 예외 클래스를 던질 수도 있고,
기본적으로 제공되는 예외 클래스 중 하나를 던질 수도 있습니다.
표준 예외 클래스
C++ 표준 라이브러리는 다양한 종류의 예외를 나타내는 클래스를 제공합니다.
예를 들어, 'std::runtime_error', 'std::logic_error', 'std::out_of_range' 등이 있습니다.
이러한 클래스들은 다양한 예외 상황에 대응하기 위해 사용됩니다.
사용자 정의 예외 클래스
때로는 프로그래머가 직접 예외 클래스를 정의하여 특정 예외 상황을 나타내기도 합니다.
이는 프로그램의 요구사항에 따라 유연하게 대응하기 위함입니다.
사용자 정의 예외 클래스를 정의하려면 일반적으로 C++의 클래스 기능을 사용합니다.
예외 안전성
예외 안전성은 예외가 발생했을 때 프로그램이 일관된 상태를 유지하는 데 중요한 요소입니다.
예외 안전성을 보장하기 위해서는 메모리 누수를 방지하고 자원을 올바르게 관리하는 등의 작업이 필요합니다.
예외 처리의 주의사항
예외 처리를 사용할 때 주의할 점도 있습니다.
너무 세밀하게 예외를 처리하면 코드의 가독성이 떨어질 수 있고,
불필요한 예외 처리로 인해 성능 저하가 발생할 수 있습니다.
따라서 적절한 수준에서 예외를 처리하는 것이 중요합니다.
예제
#include <iostream>
#include <stdexcept> // 예외 클래스를 사용하기 위해 include
int main() {
try {
int arr[5] = {1, 2, 3, 4, 5};
int index;
std::cout << "배열의 인덱스를 입력하세요: ";
std::cin >> index;
if (index < 0 || index >= 5) {
throw std::out_of_range("유효하지 않은 인덱스입니다."); // 예외 발생
}
std::cout << "인덱스 " << index << "의 값: " << arr[index] << std::endl;
} catch (const std::out_of_range& e) {
std::cerr << "예외 발생: " << e.what() << std::endl;
}
return 0;
}
이 예제는 사용자로부터 배열의 인덱스를 입력받고,
해당 인덱스에 해당하는 값을 출력합니다.
그러나 입력된 인덱스가 배열의 범위를 벗어나는 경우에는 'std::out_of_range' 예외를 발생시킵니다.
이 예외는 'catch' 블록에서 잡혀서 처리됩니다.
마무리
C++에서의 예외 처리는 프로그램의 안정성을 높이고 예기치 못한 상황에 대응하는 데 중요한 역할을 합니다.
적절한 예외 처리를 통해 프로그램의 신뢰성을 향상시킬 수 있습니다.
제 글이 도움이 되셨다면 댓글 & 공감 부탁드려요 😀
'Application > 기초' 카테고리의 다른 글
| [기초] C++ 유니언 (UNION) (0) | 2024.04.23 |
|---|---|
| [기초] C++ 인라인 함수 (Inline Function) (0) | 2024.04.22 |
| [기초] C++ 가상 함수와 다형성 (0) | 2024.04.12 |
| [기초] C++ 생성자와 소멸자 (new, delete) (0) | 2024.04.10 |
| [기초] C++ 접근 지정자 (private , protected, public) (0) | 2024.04.08 |