+/Java

예외 처리

writtenbyrla 2024. 4. 17. 16:55

✅ 발생 시점에 따른 에러 종류

1. 컴파일 에러

  • 컴파일 시점에 발생하는 에러로 소스 코드의 오타나 자료형, 잘못된 구문 등을 검사하여 문제가 있을 경우 에러를 발생 시킴
  • ex) int a = 5.5; import java.util.*.ArrayList;

 

2. 런타임 에러

  • 컴파일 후 실행 시에 발생하는 예측 불가능한 에러
  • Error와 Exception으로 나뉨

 

3. 논리적 에러: 실행은 되지만 의도와 다르게 동작하는 에러

 

 

 

 

 

 

✅ 예외 클래스의 계층 구도

1. 에러(error): 프로그램 코드에 의해서 수습될 수 없는 오류

  • 메모리 부족(OutOfMemoryError) 또는 스택오버플로우(StackOverflowError)

 

2. 예외(Exception): 프로그램 코드에 의해서 수습될 수 있는 오류

 

   1) Checked Exception

  • Exception 클래스의 하위 클래스로 컴파일 단계에서 발생하는 예외
  • 외부 리소스와의 상호작용 시에 발생하는 예외 등 예측 가능한 상황에 사용
  • try-catch나 throw로 예외 처리를 해야 하며, 컴파일 시점에 예외 처리 여부를 검사하기 때문에 안정성이 높음
  • ex) FileNotFoundException, ClassNotFoundException

 

   2) Unchecked Exception

  • RuntimeException 클래스의 하위 클래스로 실행 중에 발생할 수 있는 예외
  • 프로그래밍 오류나 런타임 환경의 문제 등 예측하기 어려운 상황에서 사용
  • Checked Exception과는 달리 예외 처리를 강제하지 않음
  • ex) ArrayIndexOutOfBoundsException, NullPointException

 

 

 

 

 

✅ 예외처리 방법

1. try-catch

try{
 		// 예외가 발생할 가능성이 있는 코드
 } catch(예외클래스 e){
 		// try 블록에서 예외가 발생할 때 -> catch 블록으로 이동하여 예외 처리 코드 실행
 } finally {
		// 예외 발생 여부와 상관없이 무조건 수행되어야 할 로직
		// 주로 자원을 반납하는 코드로 커넥션 풀 종료, 임시파일 삭제, 소켓 종료 등 close()
 }

 

 

2. throws(메서드에 예외 선언)

    상위 단계로 미루어 처리

[표현법] 
리턴타입 메서드명(매개변수, ...) throws 예외클래스1, 예외클래스2, ... {}

 

 

3. throw

   개발자가 의도적으로 예외 발생(컴파일에는 문제 없지만 비즈니스 로직에 맞지 않을 때)

private User checkUser(Long userId) {
	return userRepository.findById(userId)
			.orElseThrow(() -> new UserException(UserErrorCode.USER_NOT_EXIST));
}

'+ > Java' 카테고리의 다른 글

연산자  (0) 2023.12.08
keyboardInput 기능 - Scanner 클래스  (0) 2023.12.08
출력문 - print, println, printf 구분하기  (0) 2023.12.07
변수(Variable) - 2 (형 변환)  (2) 2023.11.21
변수(Variable) - 1  (0) 2023.11.10