[Java] : Error, Checked Exception, Unchecked Exception

dohyoungK·2024년 3월 20일
0

면접 스크립트

목록 보기
19/25

[Java] : Error, Checked Exception, Unchecked Exception


Error

에러란 시스템에 비정상적인 상황이 생겼을 때 발생하며 메모리 부족(OutOfMemoryError)이나 스택오버플로우(StackOverflowError) 같은 에러가 존재한다. 개발자가 미리 예측할 수 없는 문제이다.

Exception

예외는 사용자의 잘못된 조작이나 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류이다. 예외는 예외처리를 통해 프로그램이 종료되지 않고 정상적으로 작동되게 만들 수 있다.

Checked Exception

RuntimeException의 하위 클래스가 아니면서 Exception 클래스의 하위 클래스로 파일이나 클래스명을 잘못 입력했을 때의 FileNotFoundException, ClassNotFoundException 등이 있다.

  • 명시적으로 예외 처리를 강제하며, 예외 처리 하지 않으면 컴파일 시 IDE에 에러가 발생한다.
  • try/catch, throw 등을 사용해 예외 처리한다.

Unchecked Exception

RuntimeException의 하위 클래스를 의미하며, 실행 중에 발생할 수 있는 예외를 의미한다. 배열의 범위를 벗어나거나, 값이 null인 참조변수를 참조할 때 ArrayIndexOutOfBoundsException, NullPointerException 등이 있다.

  • 명시적으로 예외 처리를 강제하지 않으며, 예외 처리 하지 않아도 IDE에 에러가 발생하지 않는다.

ErrorChecked ExceptionUnchecked Exception
확인 시점실행시컴파일시실행시
발생 이유시스템의 비정상적인 상황 발생주로 외부의 영향으로 발생주로 개발자의 실수에 의해 발생
처리 여부불가능명시적 처리 강제명시적 처리 강제 X
기본 트랜젝션 여부RollbackNon-RollbackRollback

Spring @Transactional과 Exception

Spring @Transactional은 기본적으로 Checked Exception을 Non-Rollback한다. 하지만 Checked Exception이라고 무조건 Non-Rollback이 아니라 Rollback을 발생시킬 수 있다.

Checked Exception Rollback

  • @Transactional의 rollbackFor 옵션
// FileNotFoundException은 rollback
@Transactional(rollbackFor = FileNotFoundException.class)

// 여러개의 예외를 rollback 한다.
@Transactional(rollbackFor = {FileNotFoundException.class, ClassNotFoundException.class})
  • throw를 사용해 UnChecked Exception으로 처리
try{
	// 로직
} catch(FileNotFoundException e) {
	throw new RuntimeException("UnChecked Exception");
}

0개의 댓글