"안녕, 아미고!"

"안녕, 엘리! 생활은 어때?"

"좋아요, 감사합니다. 잘 지내세요?"

"좋아요, 오늘 아침에 많은 새로운 것들이 저에게 설명되었습니다."

"글쎄, 대단해. 피곤하지 않니?"

"그래, 그거 있어. 조금 피곤해."

"그럼 운이 좋으셨군요. 오늘은 크고 복잡한 주제를 다루고 싶었는데, 마지막 순간에 마음을 바꿔 작고 쉬운 주제를 다루기로 했습니다."

"작고 쉬운가요? 준비가 되었습니다."

"오늘은 예외 항목에 대해 자세히 살펴보겠습니다 ."

"오류 처리에 대해 말씀하시는 겁니까?"

"예외를 오류로 생각해서는 안 됩니다. 예외는 '예기치 않은 일이 발생했다'는 보고서에 가깝습니다. 이러한 보고서를 기반으로 대안 조치를 제안할 수 있습니다."

"메소드에 관한 모든 것입니다.  메소드를 호출하면 호출된 작업을 수행할 것을 약속합니다. "

"메소드가 어떤 이유로든 호출된 작업을 수행할 수 없는 경우 호출자에게 알려야 합니다."

"즉, 일어날 수 있는 최악의 상황은 방법이 작동하지 않고 아무에게도 말하지 않는 것입니다. 그보다 더 나쁜 것은 없을 것입니다. 그런 일이 발생하면 상황을 통제할 수 없게 됩니다. "

"당신이 새로운 프로그래머일 때, 당신이 메소드를 호출하기만 하면 메소드는 당신이 요청한 대로 확실히 수행하는 것처럼 보입니다."

"당신이 숙련된 프로그래머라면 메소드가 작업을 수행하는 능력에 영향을 미치는 수십 가지 요인이 있을 수 있으며 메소드가 작업을 완료하지 못하게 할 수 있는 많은 경우가 있다는 것을 알고 있습니다."

"프로그래머의 관점에서 볼 때, 프로그램에 오류가 발생하고 나서 사용자가 무슨 일이 일어났는지 깨닫지 못한 채 (잘못된) 작업을 계속하는 것보다 오류가 발생했을 때 프로그램이 종료되는 것이 천 배 더 낫습니다."

"그러면 뭔가 잘못된 것을 보여주는 프로그램이 프로그램이 닫혀서 모든 데이터가 손실되는 것보다 더 나쁠 수 있습니까?"

"프로그램이 단순히 무언가를 잘못 표시하고 있다고 생각한 이유는 무엇입니까? 프로그램에 많은 버그가 있고 모든 데이터가 돌이킬 수 없을 정도로 손실될 수 있습니다. 3시간 동안 텍스트를 입력했지만 그 중 어느 것도 저장되지 않을 것입니다. 불과 2분 만에 오류가 발생했습니다."

"초보 프로그래머가 예외를 만나면 좌절합니다."

"하지만 현실에서 예외는 그가 예견했어야 했지만 그러지 못한 모든 가능한 시나리오를 드러냅니다."

"당신은 예외를 처리하지 않기로 선택할 수 있고 그것은 당신을 나쁜 프로그래머로 만들 것입니다. 그러나 당신의 방법이 예외를 던지지 않는다면 당신은 전혀 프로그래머가 아닙니다. 왜냐하면 당신은 이 간단한 진실을 이해하지 못했기 때문입니다."

"메소드는 작성된 대로 수행하거나 예외를 throw합니다. 세 번째 옵션은 없습니다!"

"알았어, 난 너를 믿어. 예외를 사용하겠다고 약속할게."

"좋습니다. 그럼 예외의 계층 구조에 대해 말씀드리겠습니다."

예외 계층, 오류 - 1

"예외 계층 구조는 네 가지 클래스를 기반으로 합니다."

"가장 낮은 기본 클래스는 Throwable 입니다 ."

" 오류예외 클래스가 상속합니다."

" RuntimeException 은 Exception 을 상속합니다 ."

" 오류 클래스는 StackOverFlow , OutOfMemory 등과 같은 JVM 오류의 기본 클래스입니다 ."

"프로그램은 일반적으로 이러한 오류에서 복구할 수 없으므로 종료됩니다."

"사실, 프로그램이 정상적으로 계속 실행되기에 충분한 메모리가 없거나 스택 오버플로가 발생한 경우 어떻게 할 수 있습니까?"

" 예외는 프로그램에 의해 발생한 모든 일반 예외의 기본 클래스입니다.  RuntimeException은 약간 다른 규칙을 가진 특별한 종류의 예외 입니다."

"그들은 무엇인가?"

"그게 바로 내가 지금 설명하려는 것입니다."

"기억하시겠지만 예외는 두 가지 범주로 나뉩니다: checkedunchecked ."

"메서드가 확인된 예외를 throw하는 경우 이를 호출하는 메서드는 try-catch 블록에서 호출을 래핑해야 합니다. 음, 메서드 시그니처에 throw를 명확하게 표시하여 예외를 (호출자에게) 다시 throw합니다."

"이러한 규칙/제한 사항은 확인되지 않은 예외에는 적용되지 않습니다."

"따라서 Exception을 상속하는 모든 예외는 확인된 것으로 간주됩니다. RuntimeException을 상속하는 예외는 확인되지 않은 것으로 간주됩니다."

"어허. 저번에 그런 얘기를 했던 기억이 나네요."

"아미고! 그들은 모든 인터뷰에서 예외 계층 구조 에 대해 묻습니다 . 다시 말하겠습니다. 모든 인터뷰 . 이 주제를 완벽하게 알아야 합니다."

"알았어. 다시 읽어보고 알아낼게. 도와줘서 고마워, 엘리."