■ 예외 처리
예외(Exception)의 개념
오류
- Error : 프로그램으로 처리할 수 없어 프로그램이 중단됨
- Exception : 프로그램 실행 중 발생할 수 있는 가벼운 사건, 프로그램적으로 얼마든 처리할 수 있는 오류
자바에서 예외가 발생하는 경우
- 정수를 0으로 나누는 경우 (ArithmeticException)
- 배열의 인덱스가 음수인 경우
- 배열의 인덱스가 배열의 길이를 넘어서는 경우 (ArrayIndexOutOfBoundsException)
- 부적절한 형변환이 발생하는 경우
- 입출력 시 Interrupt가 발생하는 경우
- 입출력을 위해 필요한 파일이 존재하지 않는 경우 (IOException)
예외 발생 시 처리 과정
- 프로그램 실행 중 예외 발생
- JVM은 해당 예외 상황의 해당 예외 객체를 생성하여 프로그램으로 throw
- 프로그램은 JVM이 throw한 예외객체를 catch하여 예외처리 로직 수행
- 프로그램 계속 진행
- 자바는 객체지향 언어이므로 예외도 객체로 처리
- 발생 가능성이 있는 모든 예외 상황을 미리 예측하여 다양한 예외 클래스를 제공함
예외 처리 로직을 구현하지 않은 경우
기본 예외 처리 핸들러가 에러메시지를 화면에 출력하고 실행을 중지시킴
예외 클래스
java.lang.Throwable : 예외 최상위 클래스
java.lang.Error : 처리할 수 없는 치명적인에러 처리
java.lang.Exception : 정상적인 프로그램 동작 시 만날 수 있는 오류 처리, 모든 예외 클래스의 부모 클래스
- java.lang.ClassNotFoundException
- java.lang.cloneNotSupportedException
- java.lang.InstantiationException
- java.io.IOException
- java.lang.RuntimeException
- java.lang.IllegalArgumentException
- java.lang.ArithmeticException
- java.lang.ArrayIndexOutOfBoundsException
RuntimeException : 실행 시에 발생하는 예외, 프로그램이 예외를 다루는 소스코드를 포함하지 않아도 컴파일러가 컴파일을 해줌
RuntimeException의 자식 클래스는 예외 처리를 포함하지 않아도 컴파일이 되는 예외 클래스
RuntimeException이 아닌 나머지 예외 클래스는 예외처리 로직이 없으면 컴파일 X
예외 클래스는 이름만으로 어떤 의미의 예외인지 알 수 있도록 작성됨.
예외 처리
- 예외 처리 기능은 자바 언어를 더욱 강하게 만드는 요인
- 예외가 발생한 메서드 내에서 직접 처리하는 방식 (try-catch, 다중 catch블록, 상속을 이용한 예외처리, finally)
- 해당 메서드를 호출한 곳으로 예외 처리를 넘기는 방식 (throws예약어)
try-catch / finally
try{
// 예외 발생 가능성이 있는 소스코드;
}catch(예외타입1 매개변수명1){
// 예외타입의 예외가 발생할 경우 수행될 소스코드
}catch(예외타입2 매개변수명2){
// 예외타입의 예외가 발생할 경우 수행될 소스코드
}catch(Exception e){
// 지정하지 않은 예외타입의 예외가 발생할 경우 수행될 소스코드
// 반드시 맨 catch구문의 맨 마지막에 위치해야함.
}finally{
// 필수 X, 프로그래머의 편의에 따라 사용함
// 예외발생 여부와 관계없이 무조건 수행 될 소스코드
}
try블록은 최소한 하나의 catch블록 필요
catch블록은 try블록 다음에 위치
catch블록의 매개변수는 예외 객체가 발생했을 때 참조하는 변수명으로, 반드시 java.lang.Throwable 클래스의 하위 클래스 타입으로 선언되어야 함
예외가 발생하면 try블록 내의 나머지 문장은 수행되지 않고 JVM이 해당 예외 객체를 발생시킴
발생한 예외 객체 타입에 해당하는 catch블록을 수행함
throws 예약어
- 예외가 발생한 메서드를 호출한 지점으로 예외를 전달하여 처리
[modifiers] returnType 메서드명([argType argName,...]) [throws exceptionName1, ...]
발생된 예외 객체가 RuntimeException의 자식 클래스인 경우 명시적으로 throw문을 작성하지 않아도 자동으로 throws 됨
메서드가 호출된 곳에 try-catch구문을 작성하여 메서드에서 예외가 발성하더라도 예외를 처리하는 로직을 수행할 수 있도록 함
■ 사용자 정의 예외
- 개발자가 예외를 직접 정의하는 것
- 최상위 예외 클래스인 java.lang.Exception 클래스를 상속받아 정의함
class 예외클래스명 extends Exception{}
- 지정한 예외 상황이 발생하면 throw new 예외클래스명(); 을 이용하여 예외를 발생시키고 try-catch구문을 이용하여 예외 처리를 해야함
[참고] : SWExpertAcademy
'Etc.. > SWExpertAcademy' 카테고리의 다른 글
[Java Programming] 객체지향 핵심 원리(7) (0) | 2021.07.22 |
---|---|
[Java Programming] 객체지향 핵심 원리(6) (0) | 2021.07.18 |
[Java Programming] 객체지향 핵심 원리(5) (0) | 2021.07.17 |
[Java Programming] 객체지향 핵심 원리(4) (0) | 2021.07.17 |
[Java Programming] 객체지향 핵심 원리(3) (0) | 2021.07.17 |