alt
Home 자바의정석 - 08장 예외처리
Post
Cancel

자바의정석 - 08장 예외처리


exception_hierarchy

Error

  • 심각한 오류이다. 시스템적인 문제이고, try... catch와 같은 예외처리로는 복구가 불가능하다.

    e.g) OutOfMemory, StackOverflow


Exception과의 차이

  • 스택오버플로우와 같은 Error는 일단 발생하면 복구할 수 없다.(서버 재실행 등 필요) 그러나, Exception은 발생하더라도 복구가 가능하다. 따라서, 개발자가 개발 단계에서 에러처리에 신경써야 하는 것은 Exception이다.
    • Checked Exception 발생 시 더 특정상황에서의 unchecked exception을 발생시켜 에러메시지를 명확히 전달


Exception

  • try... catch: 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하고자 예외처리.

    • 예외를 처리하지 못하면, 처리되지 못한 예외(Uncaught exception) 발생으로 JVM의 예외처리기가 받아서 예외의 원인을 화면에 출력
  • printStackTrace(): 콜스택의 메서드 정보와 예외 메시지 띄우기

  • getMessage(): 예외클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.

  • 프로그래머가 throw 할 수 있다. 만약 Exception을 throw했는데 catch가 없으면 컴파일이 되지 않는다. RuntimeException은 throw하면 컴파일은 되고, 런타임에 에러가 발생한다.

  • java API 문서를 보면, 각 API가 어떤 exception을 throw할 수 있는지 명시해놓았으니, 문서를 보고 적절히 예외처리를 하면 된다.

  • try-with-resources: try의 괄호 안에 객체 생성 문장을 넣으면, try를 벗어나는 순간 자동적으로 객체 close가 발생한다. 이 경우 finally로 명시적으로 close해줄 필요가 없어진다.

    1
    2
    3
    4
    
    try (FileInputStream fis = new FileInputStream("score.dat");
        DataInputStream dis = new DataInputStream(fis)) {
      // ...
    }
    


Exception클래스들 - Checked Exception

  • 컴파일 단계에서 걸린다. - 코드 흐름상 발생 할 수 있는 에러
  • 반드시 예외처리 해야한다.
  • 예외 발생시 롤백 하지 않음
    • 복구가 가능하기 때문(현실적으로는 많지 않음 -> SQL Exception의 경우)
  • FIleNotFoundException, ClassNotFoundException 등


RuntimeException 클래스들 - Unchecked Exception

  • 런타임 시점에 발견된다.
  • 프로그래머의 실수에 의해 발생한다.
  • 반드시 에러 처리해야 하는 것은 아니다.
  • 예외 발생시 롤백해야함
  • NullPointException, IllegalArgumentException, ClassCastException, ArithmeticException(divide by zero, 오버플로우) 등



Reference)

자바의 정석 3판

https://subhashprogrammingclasses.in/exception-handling-in-java/

https://madplay.github.io/post/java-checked-unchecked-exceptions

https://cheese10yun.github.io/checked-exception/

This post is licensed under CC BY 4.0 by the author.

자바의정석 - 11장 컬렉션 프레임워크 5. Properties, Collections

객체지향 개론 1. 메시지