예외와 예외처리
| 오류란 무엇인가?
컴파일 오류 : 프로그램 코드 작성중 발생하는 문법적 오류
실행 오류 : 실행중인 프로그램이 의도하지 않은 동작을 하거나(Bug)
프로그램이 중지되는 오류 (Runtime Error)
자바는 예외 처리를 통하여 프로그램의 비정상 종료를 막고 log를 남길 수 있다+INFO
Log : 모든 행위와 이벤트 정보를 시간의 경과에 따라 기록한 데이터
| 오류와 예외 클래스
시스템 오류(Error) : 가상 머신에서 발생, 프로그래머가 처리할 수 없음
동적 메모리를 다 사용한 경우, Stack over flow등
예외(Exception) : 프로그램에서 제어 할 수 있는 오류
읽으려는 파일이 없는 경우, 네트워크나 소켓 연결 오류등
자바 프로그램에서는 예외에 대한 처리를 수행함
| 예외 클래스
모든 예외 클래스의 최상위 클래스는 Exception 클래스
| try-catch문으로 예외 처리하기
try{
예외가 발생할 수 있는 코드 부분
} catch(처리할 예외 타입 e){
try블록 안에서 예외가 발생했을 때 수행되는 부분
}
| try-catch-finally문으로 예외 처리하기
try{
예외가 발생할 수 있는 코드 부분
} catch(처리할 예외 타입 e){
try블록 안에서 예외가 발생했을 때 수행되는 부분
} finally {
예외 발생 여부와 상관 없이 항상 수행되는 부분
리소스를 정리하는 코드를 주로 씀
}
| 코드 예시
package exception; public class ArrayExceptionTest { public static void main(String[] args){ int[] arr = new int[5]; try { for(int i=0; i<=5; i++){ System.out.println(arr[i]); } } catch (ArrayIndexOutOfBoundsException e) { System.out.println(e); System.out.println("예외 처리"); } System.out.println("프로그램 종료"); } }
| try-with-resources문
리소스를 자동으로 해제하도록 제공해주는 구문
해당 리소스가 AutoCloseable을 구현한 경우 close()를 명시적으로 호출하지 않아도
try{} 블록에서 오픈된 리소스는 정상적인 경우나 예외가 발생한 경우
모두 자동으로 close()가 호출됨
자바 7부터 제공됨
FileInputStream의 경우 AutoCloseable을 구현 하고 있음
| AutoCloseable 인터페이스 사용하기
AutoCloseable 인터페이스를 구현한 클래스를 만들고 close()가 잘 호출되는지 확인해본다
다양한 예외처리
| 예외 처리 미루기
throws를 사용하여 예외 처리 미루기
try{} 블록으로 예외를 처리하지 않고, 메서드 선언부에 throws를 추가
예외가 발생한 메서드에서 예외 처리를 하지 않고
이 메서드를 호출한 곳에서 예외 처리를 한다는 의미
main()에서 throws를 사용하면 가상머신에서 처리됨
| 다중 예외 미루기
하나의 try{} 블록에서 여러 예외가 발생하는 경우
catch{} 블록 한 곳에서 처리하거나
여러 catch{} 블록으로 나누어 처리할 수 있음
가장 최상위 클래스인 Exception 클래스는 가장 마지막 블록에 위치해야 함
| 사용자 정의 예외
JDK에서 제공되는 예외 클래스 외에
사용자가 필요에 의해 예외 클래스를 정의하여 사용
기존 JDK 클래스에서 상속받아 예외 클래스 만듬
throw 키워드로 예외를 발생 시킴
'[Programming] > [Language]' 카테고리의 다른 글
[Python] 나도코딩_활용편1 / Finished 22.08.17 (0) | 2022.07.18 |
---|---|
[Python] 나도코딩_기본편 / Finished 22.07.18 (0) | 2022.06.03 |
[Java] Ch12. 내부 클래스, 람다식, 스트림 / 객체 지향 프로그래밍 중급 / K-Digital Credit Java / Summary (0) | 2022.05.29 |
[Java] Ch11. 컬렉션 프레임 워크 / 객체 지향 프로그래밍 중급 / K-Digital Credit Java / Summary (0) | 2022.05.25 |
[Java] 디폴트 메서드 (Default Method) (1) | 2022.05.02 |