컴파일 에러 : 컴파일 시에 발생하는 에러 런타임 에러 : 실행 시에 발생하는 에러 논리적 에러 : 실행은 되지만 의도와 다르게 동작하는 것
에러(error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 예외(exception) : 프로그램 코드에 의해 수습될 수 있는 다소 미약한 오류
Excetion클래스들 : 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외 RuntimeException클래스들 : 프로그래머의 실수로 발생하는 예외
package chap8;
public class ExceptionEx7 {
public static void main(String args[]) {
try {
int i = 1/0;
} catch (Exception e) {
} catch (ArithmeticException e) {
//"Unreachable catch block for ArithmeticException. It is already handled by the catch block for Exception"
}
}
}
printStackTrace()는 단순히 오류를 어딘가에 출력하는데 그치지만 Slf4j를 쓰면 출력을 할지 말지 부터 어디에 출력할지를 소스 수정없이 조절가능. 출력은 시스템 런타임 성능을 저하시키는 주요 요인
호출stack이 깊을 때 예외 상황을 우아하게 처리하기 위해. ‘예외를 마지막에 처리하는 쪽은 최초 call을 발생시킨 객체다’
Scanner scanner = null;
try {
scanner = new Scanner(new File("test.txt"));
while (scanner.hasNext()) {
System.out.println(scanner.nextLine());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (scanner != null) {
scanner.close();
}
}
try (Scanner scanner = new Scanner(new File("test.txt"))) {
while (scanner.hasNext()) {
System.out.println(scanner.nextLine());
}
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
}
필요에 따라 예외처리의 여부를 선택할 수 있는 ‘unchecked’예외가 강제적인 ‘checked예외’보다 더 환영받고 있다 👉 하지만 예외처리를 강제하기 위해서는 checked예외가 필요
여러가지 예외(원인과 결과)를 하나의 큰 분류의 예외로 묶어서 다루기 위해
exception-handling-for-rest-with-spring : tutorials/spring-boot-rest at master · eugenp/tutorials
Exception Handling in Spring MVC : https://github.com/paulc4/mvc-exceptions