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/