throw 키워드의 기본 사용법
C++에서 throw
키워드는 예외를 발생시키는 데 사용됩니다.
기본 구문은 다음과 같습니다.
여기서 exception_object
는 예외 객체입니다.
이는 내장 타입이나 사용자 정의 클래스의 객체일 수 있습니다.
이 예제에서 validateAge
함수는 나이가 유효하지 않을 때 예외를 던집니다.
다양한 타입의 예외 던지기
C++에서는 다양한 타입의 객체를 예외로 던질 수 있습니다.
내장 타입 던지기
표준 예외 클래스 사용
사용자 정의 예외 클래스
함수에서 예외 던지기
함수에서 예외를 던지면, 해당 함수의 실행이 즉시 중단되고 제어가 예외 처리 블록으로 이동합니다.
생성자에서 예외 던지기
생성자에서 예외를 던지면 객체의 생성이 중단되고, 이미 생성된 멤버 객체들의 소멸자가 호출됩니다.
소멸자에서의 예외 처리
소멸자에서는 예외를 던지지 않아야 합니다.
그러나 예외가 발생할 수 있는 작업을 수행해야 한다면, 예외를 내부에서 처리해야 합니다.
예외 명세 (Exception Specification)
C++ 11 이전에는 함수가 던질 수 있는 예외를 명시하는 예외 명세를 사용했지만, 현재는 noexcept
지정자를 사용하여 함수가 예외를 던지지 않음을 나타냅니다.
중첩 예외 (Nested Exceptions)
C++ 11부터는 std::nested_exception
을 사용하여 중첩된 예외를 처리할 수 있습니다.
실습 : 은행 계좌 시스템
다음 요구사항을 만족하는 간단한 은행 계좌 시스템을 구현해보세요.
InsufficientFundsException
과 InvalidAmountException
예외 클래스 정의
BankAccount
클래스 구현 (입금, 출금, 잔액 조회 기능)
- 잔액 부족 시
InsufficientFundsException
발생
- 음수 금액 입력 시
InvalidAmountException
발생
연습 문제
- 다중
catch
블록과 예외 재전파를 사용하여 여러 단계의 함수 호출에서 예외를 처리하는 예제를 작성하세요.
- 중첩 예외를 사용하여 여러 단계의 함수 호출에서 발생한 예외 정보를 모두 캡처하고 출력하는 프로그램을 작성하세요.
참고자료