✅ 발생 시점에 따른 에러 종류
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 |