try 블록이 divide 호출을 감싸고, 이후 catch 후보를 순서대로 둡니다.
throw가 발생하면 스택을 접으며 맞는 catch를 찾는다
try 블록에서 예외 객체가 던져지면 현재 실행 흐름은 멈추고, 지역 객체 정리와 호출자 전파를 거쳐 타입이 맞는 catch를 만날 때까지 스택이 전개됩니다.
denominator가 0이면 정상 반환 대신 예외 객체를 던집니다.
현재 블록의 남은 문장은 실행되지 않고, 스택 전개가 시작됩니다.
타입 불일치
던진 객체 타입과 맞지 않으면 다음 catch 후보로 넘어갑니다.
처리 지점
예외 타입이 맞으면 해당 블록을 실행하고 try-catch 다음으로 이어집니다.
상위 전파
어디서도 잡히지 않으면 main 밖까지 전파되어 비정상 종료로 이어집니다.
예외 처리는 단순한 분기가 아니라 함수 호출 스택을 거슬러 올라가며 자원 정리와 타입 매칭을 함께 수행하는 제어 흐름입니다.
좁은 타입을 먼저 둔다
넓은 catch를 먼저 두면 더 구체적인 복구 코드가 도달하지 못할 수 있습니다.
자원 정리는 객체가 맡는다
파일, 메모리, 락은 소멸자로 정리되게 두면 예외 경로에서도 누수가 줄어듭니다.
잡고도 처리하지 못하면 다시 던진다
로그만 남기는 catch는 오류를 숨길 수 있으므로 호출자에게 전파할지 결정합니다.