[자바의 정석] Ch 8 예외처리

Seri·2024년 7월 7일
1

* 이 글은 책 <자바의 정석 3판 - 남궁성>을 공부한 내용을 바탕으로 작성한 글입니다.

프로그램 오류

에러: 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
예외: 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류

예외 클래스의 계층 구조

  • Exception 클래스와 그 자손들: 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
  • RuntimeException클래스와 그 자손들: 프로그래머의 실수로 발생하는 예외

try-catch-finally문

try블럭 내에서 예외가 발생한 경우
1. 발생한 예외와 일치하는 catch블럭이 있는지 확인한다.
2. 일치하는 catch블럭을 찾게 되면 그 catch블럭 내의 문장들을 수행하고 전체 try-catch문을 빠져나가서 그 다음 문장을 계속해서 수행한다. 만일 일치하는 catch블럭을 찾지 못하면 예외는 처리되지 못한다.
try블럭 내에서 예외가 발생하지 않은 경우
1. catch블럭을 거치지 않고 전체 try-catch문을 빠져나가서 수행을 계속한다.
printStackTrace()
예외발생 당시의 호출스택(call stack)에 있었던 메서드의 정보와 예외 메시지를 화면에 출력한다.
getMessage()
발생한 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.

try-with-resource

try-with-resource를 사용하면 자동으로 close() 메서드가 호출됩니다.

try (리소스 선언) {
    // 리소스 사용 코드
} catch (Exception e) {
    // 예외 처리 코드
}
  1. 코드의 가독성과 간결성이 향상됩니다.
  2. 예외 처리가 더 쉬워집니다. try 블록 내에서 발생한 예외와 close() 메서드에서 발생한 예외를 모두 처리할 수 있습니다.
  3. 자원 누수 문제를 방지할 수 있습니다. close() 메서드를 호출하지 않는 실수를 방지할 수 있습니다.
  4. 다중 리소스 선언도 지원합니다. 여러 개의 리소스를 선언할 수 있으며, 이 경우 각 리소스는 세미콜론(;)으로 구분됩니다.

예외 발생시키기

  1. 먼저 연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든 다음
Exception e = new Exception("고의로 발생시켰음");
  1. 키워드 throw를 이용해서 예외를 발생시킨다
throw e;
profile
🎤 📷 ❄️ 🌊

0개의 댓글