JAVA를 잡아라!...
JAVA_14_예외 처리 본문
#1 예외 처리
▶ 에러(error)
- 해결할 수 없는 시스템에 에러가 발생해 프로그램이 종료된 경우
- 시스템에 비정상적인 상황이 생겼을 때 발생
- 개발자가 예측하거나 처리할 수 없는 영역
- < 종류 >
- OutOfMemoryError : 프로그램 실행 중 메모리 부족
- IOError : 입출력 에러
- StackOverFlowError : 가용 메모리 부족 현상, 재귀 호출 문제 시 발생
▶ 예외(exception)
- 프로그램 사용 중 발생한 오류를 개발자가 처리해 메시지가 출력된 경우
- 프로그램 구동 중에 예외가 발생했을 경우 프로그램의 갑작스러운 종료를 막고 정상 동작할 수 있도록 처리하는 과정
구분 | 체크 예외 | 비체크 예외 |
처리 여부 | 문법적으로 예외 처리를 강제함 반드시 처리 해야 함 |
문법적으로 강제하지 않음 개발자의 판단에 의해 처리 |
확인 시점 | 컴파일 단계 | 실행 단계 |
예외 클래스 | Runtime Exception을 제외한 모든 예외 IOException SQLException |
Runtime Exception의 자식 클래스 모두 포함 NullPointerException IndexOutOfBoundException ClassNotFoundException |
#2 예외 클래스
▶ NullPointerException
- 객체를 선언하면 인스턴스는 객체의 주소를 가지게 되고, 그것을 통해 객체에 접근해 값을 가져옴
- 객체는 정의되었는데 실제 메모리에 생성되지 않았을 경우 예외가 발생
▶ NumberFormatException
- 잘못된 문자열을 숫자로 형 변환할 때 발생
- ex) 숫자형태의 문자열은 정수 타입으로 변환oo, 문자가 포함되거나 실수 형태의 문자열은 변환xx
▶ ArrayIndexOutofBoundsException
- 배열에서 index 범위를 초과해 사용할 때 발생
#3 예외 처리 문법
▶ 예외 처리 과정
- 예외가 발생하면 시스템(JVM)에서 분석하여 예외 클래스 중 알맞은 것을 발생시키고 발생 지점으로 감
- 이를 처리하지 않으면 프로그램은 비정상 종료됨
- 그래서 넘어온 예외를 처리해 프로그램을 비정상 종료되지 않고, 구동할 수 있도록 해야함
▶ try-catch 구문
try {
// 예외가 발생할 가능성이 있는 코드
} catch(예외 클래스명 e) {
// 예외 처리 코드
}
- 코드 진행 → 오류! → JVM 예외 객체 발생 → catch 확인
- try {...} 안에 예외가 발생할 가능성이 있는 코드 작성
- catch메서드는 시스템으로부터 넘어오는 예외 클래스를 받아서 처리
- Exception
- 모든 예외 클래스의 최상위 객체이기 때문에 catch에서 사용하면 모든 예외 처리 가능
- 단, 다중 catch문 사용시, 상위 예외 클래스를 처리하는 코드는 catch문 맨 마지막에 작성
- 다중 catch : 예외별로 예외 처리 코드를 다르게 하여 다양한 예외 처리 가능
try {
// 예외가 발생할 가능성이 있는 코드1
// 예외가 발생할 가능성이 있는 코드2
} catch(예외 클래스1 e) {
} catch(예외 클래스2 e) {
}
▶ finally
- 예외 처리를 할 때, 예외와 상관없이 반드시 처리해야 하는 로직을 작성
- 보통 외부 연동이나 예외가 발생해도 정상 종료되어야 할 구문들에서 사용
#4 예외 던지기
▶ throws 키워드
- 메서드에서 발생하는 예외를 직접 처리하지 않고 호출된 곳에서 처리하도록 할 수 있음
- 메서드 뒤에 throws예외 클래스를 붙여서 처리
'JAVA > JAVA_멘토씨리즈' 카테고리의 다른 글
JAVA_16_컬렉션 프레임워크 (0) | 2024.01.14 |
---|---|
JAVA_15_기본 API 클래스 (0) | 2024.01.14 |
JAVA_13_내부 클래스 (0) | 2024.01.07 |
JAVA_12_추상 클래스 & 인터페이스 (0) | 2024.01.07 |
JAVA_11_다형성 & 타입 변환 (0) | 2024.01.07 |