[Programming]/[Language]

[Java] Ch13. 예외 처리 / 객체 지향 프로그래밍 중급 / K-Digital Credit Java / Summary

김파고띠 2022. 6. 1. 16:04

예외와 예외처리

| 오류란 무엇인가?

컴파일 오류 : 프로그램 코드 작성중 발생하는 문법적 오류

실행 오류 : 실행중인 프로그램이 의도하지 않은 동작을 하거나(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 키워드로 예외를 발생 시킴