: 프로그램 실행 중 발생할 수 있는 의도하지 않은 상황. 프로그램의 비정상적인 동작 혹은 에러가 발생할 수 있으므로 적절히 처리하거나 회피하는 것이 필요하다.
throw) : 특정 조건에서 의도적으로 예외를 발생시킴.예외 : 프로그램 실행 중 발생할 수 있는 의도하지 않은 상황. 컴파일, 런타임에 일어날 수 있으며, 적절한 예외 처리를 통해 복구 가능하다. Ex) NullPointException
에러 : 런타임 에 발생하고 주로 시스템 리소스 부족으로 발생함. 발생 시 복구가 어려움. Ex) OutOfMemoryError

: RuntimeException을 상속받는 모든 예외. 예외 처리를 컴파일러가 확인하지 않음. 따라서 런타임 에러가 발생. Ex) NullPointerException
*️⃣ Rollback 여부 : O
: Exception 을 직접 상속받는 모든 예외. 예외처리를 컴파일러가 확인해 준다. Ex) IOException
*️⃣ Rollback 여부 : X / Commit이 됨
: 메소드에서 발생한 예외가 다른 계층으로 전달될 때, 이전 예외를 원인으로 새로운 예외를 던지거나 처리하는 과정.
try {
// 실행할 코드
}
// 예외 종류
catch (Exception e){
// 예외 발생 시 처리하는 코드
}
finally {
// 예외와 관게없이 무조건 실행되는 코드
}
try-(예외 발생 시)catch-(예외와 무관하게)finally 흐름으로 실행이 된다.
: 개발자가 의도적으로 예외를 발생시키는 경우. 컴파일이나 런타임에는 문제가 없지만 개발자의 의도대로 프로그램이 실행되지 않을 경우 고의로 예외를 발생시킴.
if (age < 20) {
throw new IllegalArgumentException("나이는 성인이어야 합니다.");
}
if (enrollment == false) {
throw new IllegalStateException("등록 상태가 아닙니다.");
}
: 메소드 내에서 예외처리를 하지 않고 해당 메소드를 호출한 곳에서 예외 처리를 하도록 예외를 상위로 던지는 것. '예외 전가' 라고도 함.
public static void main(String[] args) {
try {
divide(); // divide 함수를 호출
} catch (Exception e) { // divide 함수에서 발생한 예외를 main 함수에서 처리
System.out.println("잘못된 계산입니다.");
}
}
public static void divide() throws Exception{
int a = 10;
int b = 0;
int result = a/b; // 0 나누기 --> ArithmeticException 예외 발생
}
참고
https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%ACException-%EB%AC%B8%EB%B2%95-%EC%9D%91%EC%9A%A9-%EC%A0%95%EB%A6%AC
https://ittrue.tistory.com/140
https://gnuoyus.tistory.com/72
https://day0404.tistory.com/47