2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

C++에서 기본 제공 예외 클래스는 무엇인가요?

_____
Q: C++에서 기본 제공 예외 클래스는 무엇인가요?
A: C++ 표준 라이브러리는 예외 처리를 위해 기본 제공되는 여러 예외 클래스들을 제공합니다. 이들은 모두 `` 헤더에 정의되어 있으며, 주요 클래스들은 std::exception을 기본 클래스로 하여 상속 구조를 형성합니다.

---

주요 기본 예외 클래스:

1. std::exception
- 모든 표준 예외 클래스의 최상위 기본 클래스입니다.
- `virtual const char* what() const noexcept;` 멤버 함수로 예외에 대한 설명을 문자열로 반환합니다.

2. std::bad_alloc
- 메모리 할당 실패 시 던져지는 예외입니다.
- new 연산자가 메모리를 할당하지 못할 경우 발생합니다.

3. std::bad_cast
- 잘못된 타입 캐스팅(dynamic_cast 실패)이 발생했을 때 던져집니다.
- 주로 RTTI(dynamic type identification) 관련 상황에서 발생합니다.

4. std::bad_typeid
- typeid 연산자를 잘못 사용했을 때 발생하는 예외입니다.
- 예를 들어 다형성 객체가 널 포인터인 경우.

5. std::bad_exception
- noexcept 함수 내에서 예상치 못한 예외가 던져질 때 표준 라이브러리가 던지는 예외입니다.

6. std::logic_error
- 논리적 오류를 나타내는 예외의 기반 클래스입니다. 프로그래머 실수로 인한 오류를 나타냅니다.
- 파생 클래스 예시:
- std::invalid_argument: 함수로 잘못된 인자가 전달되었을 때
- std::domain_error: 수학적 도메인 오류 발생 시
- std::length_error: 컨테이너 크기 초과 오류 등
- std::out_of_range: 유효하지 않은 인덱스 접근 등

7. std::runtime_error
- 실행 중 발생하는 오류를 나타내는 기본 클래스입니다.
- 파생 클래스 예시:
- std::range_error: 부동 소수점 범위 오류 등
- std::overflow_error: 산술 오버플로 발생 시
- std::underflow_error: 산술 언더플로 발생 시

---

참고 사항:
- 이들 예외 클래스는 모두 `std::exception`을 상속받아 `what()` 함수를 제공해 오류 메시지를 반환할 수 있습니다.
- 개발자는 이 기본 예외 클래스를 상속받아 자신만의 예외 클래스를 쉽게 만들 수도 있습니다.
- 표준 라이브러리 함수들은 적절한 상황에 맞는 기본 예외들을 활용하여 오류를 알립니다.

---

정리하면, C++의 기본 제공 예외 클래스는 `std::exception` 계층구조 내에 여러 구체적 예외 타입이 포함되어 있으며, 메모리 할당 실패, 잘못된 인자 전달, 범위 벗어남, 실행 중 오류 등 다양한 상황에서 표준화된 예외 처리를 제공합니다.
C++에서 예외 처리는 프로그램의 오류를 관리하고, 프로그램의 비정상적인 종료를 방지하는 중요한 메커니즘입니다.

C++ 표준 라이브러리는 다양한 예외 클래스들을 제공하여 개발자가 오류를 효과적으로 처리할 수 있도록 돕습니다.

이러한 예외 클래스는 `std::exception` 클래스를 기반으로 하며, 이를 통해 사용자 정의 예외를 만들거나 기존의 예외를 활용할 수 있습니다.

기본 제공 예외 클래스 C++에서 제공하는 기본 예외 클래스는 다음과 같습니다: 1. std::exception - 모든 예외 클래스의 기본 클래스입니다.

이 클래스는 `what()` 메서드를 제공하여 예외에 대한 설명을 문자열 형태로 반환합니다.

사용자 정의 예외 클래스는 이 클래스를 상속받아 구현할 수 있습니다.



2. std::logic_error - 프로그램의 논리적 오류를 나타내는 예외 클래스입니다.

이 클래스는 잘못된 인수, 잘못된 상태 등과 같은 오류를 처리하는 데 사용됩니다.

`std::logic_error`를 상속받는 주요 예외 클래스는 다음과 같습니다: - std::invalid_argument : 잘못된 인수가 전달되었을 때 발생합니다.

- std::domain_error : 함수의 도메인에 맞지 않는 값이 전달되었을 때 발생합니다.

- std::length_error : 컨테이너의 최대 크기를 초과하려고 할 때 발생합니다.

- std::out_of_range : 범위를 벗어난 접근이 시도되었을 때 발생합니다.



3. std::runtime_error - 실행 중에 발생하는 오류를 나타내는 예외 클래스입니다.

이 클래스는 프로그램의 실행 중에 발생할 수 있는 다양한 오류를 처리하는 데 사용됩니다.

`std::runtime_error`를 상속받는 주요 예외 클래스는 다음과 같습니다: - std::range_error : 범위 오류가 발생했을 때 사용됩니다.

- std::overflow_error : 산술 연산에서 오버플로우가 발생했을 때 사용됩니다.

- std::underflow_error : 산술 연산에서 언더플로우가 발생했을 때 사용됩니다.

- std::system_error : 시스템 관련 오류를 나타냅니다.



4. std::bad_alloc - 메모리 할당에 실패했을 때 발생하는 예외입니다.

`new` 연산자가 메모리를 할당할 수 없을 때 이 예외가 발생합니다.



5. std::bad_cast - 잘못된 타입 캐스팅이 시도되었을 때 발생하는 예외입니다.

주로 `dynamic_cast`를 사용할 때, 캐스팅이 실패하면 이 예외가 발생합니다.



6. std::bad_typeid - `typeid` 연산자가 사용되었을 때, 객체가 null 포인터일 경우 발생하는 예외입니다.

예외 처리 C++에서 예외 처리는 `try`, `catch`, `throw` 키워드를 사용하여 수행됩니다.

예외가 발생할 가능성이 있는 코드는 `try` 블록 내에 작성하고, 예외가 발생했을 때 처리할 코드는 `catch` 블록 내에 작성합니다.

예외를 발생시키고 싶을 때는 `throw` 키워드를 사용합니다.

```cpp include include void mayGoWrong() { bool errorOccurred = true; // 예시를 위한 플래그 if (errorOccurred) { throw std::runtime_error("Something went wrong!"); } } int main() { try { mayGoWrong(); } catch (const std::runtime_error& e) { std::cout << "Caught a runtime error: " << e.what() << std::endl; } catch (const std::exception& e) { std::cout << "Caught an exception: " << e.what() << std::endl; } return 0; } ``` 결론 C++의 기본 제공 예외 클래스는 프로그램의 오류를 효과적으로 처리하고, 코드의 안정성을 높이는 데 중요한 역할을 합니다.

개발자는 이러한 예외 클래스를 활용하여 프로그램의 오류를 관리하고, 사용자에게 더 나은 경험을 제공할 수 있습니다.

예외 처리를 적절히 구현함으로써, 프로그램의 예외 상황에 대한 대응력을 높이고, 유지보수성을 향상시킬 수 있습니다.

작성자: 정다현 [비회원] | 작성일자: 1년 전 2024-09-20 17:11:31
조회수: 136 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.