try-catch 구문의 기본 구조
try-catch 구문은 C++에서 예외를 처리하는 핵심 메커니즘입니다.
기본 구조는 다음과 같습니다.
각 부분의 역할
try
블록 : 예외가 발생할 수 있는 코드를 포함합니다.
catch
블록 : 특정 타입의 예외를 처리합니다.
catch (...)
: 모든 타입의 예외를 처리하는 catch-all 핸들러입니다.
예외 발생 및 포착
예외는 throw
키워드를 사용하여 발생시킬 수 있습니다.
발생한 예외는 적절한 catch
블록에서 포착됩니다.
이 예제에서 divide(10, 0)
은 예외를 발생시키고, 이는 catch
블록에서 포착됩니다.
다중 catch 블록
여러 타입의 예외를 처리하기 위해 다중 catch
블록을 사용할 수 있습니다.
catch 블록의 순서는 중요합니다. 더 구체적인 예외 타입을 먼저 처리해야 합니다.
예외 객체
catch 블록에서 예외 객체를 참조로 받아 처리할 수 있습니다.
이를 통해 예외에 대한 추가 정보를 얻을 수 있습니다.
예외 재전파
catch 블록에서 예외를 다시 throw할 수 있습니다.
이를 통해 부분적인 처리 후 상위 호출자에게 예외를 전달할 수 있습니다.
중첩된 try-catch
try-catch 블록은 중첩될 수 있습니다.
내부 블록에서 처리되지 않은 예외는 외부 블록으로 전파됩니다.
함수 try 블록
생성자의 초기화 리스트에서 발생하는 예외를 잡기 위해 함수 try 블록을 사용할 수 있습니다.
noexcept 지정자
함수가 예외를 던지지 않음을 명시하기 위해 noexcept
지정자를 사용할 수 있습니다.
실습 : 은행 계좌 시스템
다음 요구사항을 만족하는 간단한 은행 계좌 시스템을 구현해보세요.
InsufficientFundsException
과 InvalidAmountException
예외 클래스 정의
BankAccount
클래스 구현 (입금, 출금, 잔액 조회 기능)
- 잔액 부족 시
InsufficientFundsException
발생
- 음수 금액 입력 시
InvalidAmountException
발생
연습 문제
- 템플릿 함수를 사용하여 배열에서 특정 값을 검색하는 함수를 구현하세요. 값을 찾지 못했을 때 예외를 던지도록 합니다.
noexcept
지정자를 사용하여 예외를 던지지 않는 함수를 선언하고, 이 함수 내에서 예외가 발생할 수 있는 다른 함수를 호출할 때 어떻게 처리해야 할지 구현해보세요.
참고자료