예외는 다양한 상황에서 유용합니다.
첫째, 전제 조건을 계산하는 비용이 너무 높기 때문에 계산을 수행하고 전제 조건이 충족되지 않은 경우 예외를두고 중단하는 것이 더 좋은 기능이 있습니다. 예를 들어, 특이 행렬을 반전 할 수는 없지만, 특이 행렬을 계산하려면 매우 비용이 많이 드는 행렬식을 계산해야합니다. 어쨌든 함수 내에서 수행해야 할 수도 있으므로 행렬을 반전하고보고 할 때 "시도해보십시오". 예외를 던져서 할 수없는 경우 오류. 이것은 기본적 으로 부정적인 전제 조건 사용 으로 예외 입니다.
그런 다음 코드가 이미 복잡하고 오류 정보를 콜 체인으로 전달하기 어려운 다른 경우가 있습니다. 이것은 부분적으로 C와 C ++가 손상된 데이터 구조 모델을 가지고 있기 때문입니다. 다른 더 나은 방법이 있지만 C ++는이를 지원하지 않습니다 (예 : Haskell에서 모나드 사용). 이 사용은 기본적으로 나는 그것을 옳게하는 것을 귀찮게 할 수 없기 때문에 예외를 던질 것입니다 . 올바른 방법은 아니지만 실용적입니다.
그런 다음 예외의 주요 용도가 있습니다. 메모리 나 디스크 공간과 같은 충분한 리소스와 같은 외부 전제 조건이나 불변성을보고하는 것입니다. 이 경우 일반적으로 프로그램 또는 주요 하위 섹션을 종료하며 예외는 문제에 대한 정보를 전송하는 좋은 방법입니다. C ++ 예외는 프로그램이 계속되는 것을 방해하는 오류를보고하도록 설계되었습니다 .
C ++를 포함하여 대부분의 현대 언어에서 사용되는 예외 처리 모델은 고장난 것으로 알려져 있습니다. 너무 강력합니다. 이론가들은 이제 완전히 개방 된 "무엇이든 던지십시오"및 "아마도 잡을 수없는"모델보다 더 나은 모델을 개발했습니다. 또한 유형 정보를 사용하여 예외를 분류하는 것은 그리 좋은 생각이 아닙니다.
당신이 할 수있는 가장 좋은 방법입니다 그래서 드물게 던져 예외를 할 때 거기에 실제 오류, 그리고 그것을 다루는 다른 방법이 없을 때 와 가능한 한 던져 지점에 가까이 캐치 예외 .