[TIL] Java 예외처리

YJin·2025년 2월 27일

Java 예외 처리

1. 예외 (Exception)

: 프로그램 실행 중 발생할 수 있는 의도하지 않은 상황. 프로그램의 비정상적인 동작 혹은 에러가 발생할 수 있으므로 적절히 처리하거나 회피하는 것이 필요하다.

  • 의도하지 않은 예외 : 프로그램이 의도한 대로 동작하지 않는 경우.
  • 의도적인 예외(throw) : 특정 조건에서 의도적으로 예외를 발생시킴.

✅예외와 에러의 차이

예외 : 프로그램 실행 중 발생할 수 있는 의도하지 않은 상황. 컴파일, 런타임에 일어날 수 있으며, 적절한 예외 처리를 통해 복구 가능하다. Ex) NullPointException
에러 : 런타임 에 발생하고 주로 시스템 리소스 부족으로 발생함. 발생 시 복구가 어려움. Ex) OutOfMemoryError


2. 예외의 종류

Unchecked Exception

: RuntimeException을 상속받는 모든 예외. 예외 처리를 컴파일러가 확인하지 않음. 따라서 런타임 에러가 발생. Ex) NullPointerException

*️⃣ Rollback 여부 : O

Checked Exception

: Exception 을 직접 상속받는 모든 예외. 예외처리를 컴파일러가 확인해 준다. Ex) IOException

*️⃣ Rollback 여부 : X / Commit이 됨


3. 예외 전파

: 메소드에서 발생한 예외가 다른 계층으로 전달될 때, 이전 예외를 원인으로 새로운 예외를 던지거나 처리하는 과정.


4. 예외 처리/예외 던지기

1) try-catch (-finally) 활용 (예외 처리)

try {
	// 실행할 코드
}
// 예외 종류
catch  (Exception e){
	// 예외 발생 시 처리하는 코드
}
finally {
	// 예외와 관게없이 무조건 실행되는 코드
}

try-(예외 발생 시)catch-(예외와 무관하게)finally 흐름으로 실행이 된다.

2) throw, throws (예외 던지기)

throw

: 개발자가 의도적으로 예외를 발생시키는 경우. 컴파일이나 런타임에는 문제가 없지만 개발자의 의도대로 프로그램이 실행되지 않을 경우 고의로 예외를 발생시킴.

if (age < 20) {
	throw new IllegalArgumentException("나이는 성인이어야 합니다.");
}

if (enrollment == false) {
	throw new IllegalStateException("등록 상태가 아닙니다.");
}

throws

: 메소드 내에서 예외처리를 하지 않고 해당 메소드를 호출한 곳에서 예외 처리를 하도록 예외를 상위로 던지는 것. '예외 전가' 라고도 함.

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

profile
백엔드 개발도 락이다

0개의 댓글