21/06/22 JAVA <예외처리 >

yeoni·2021년 10월 26일

JAVA

목록 보기
17/18

실행 오류시 비정상 종료는 서비스 운영에 치명적

자바는 예외처리를 통하여 프로그램의 비정상 종료를 막고 log(흔적)를 남길 수 있다.

에러(error) : 개발자가 해결할 수 없는 치명적인 오류
예외(exception) : 개발자가 해결할 수 있는 오류

예외가 발생하면 비정상적인 종료를 막고 프로그램을 계속 진행할 수 있도록 우회 경로를 제공하는 것이 바람직

예외(exception)

실행 중 오동작이나 결과에 악영향을 미치는 상황 발생

실행 중 예외 발생하면 자바 플랫폼은 응용프로그램이 예외를 처리하도록 호출

예외 발생 경우 :배열의 크기보다 큰 인덱스로 배열의 요소에 접근하는 경우
정수를 읽는 코드가 실행될 때 사용자가 문자를 입력하는 경우(자료형이 맞지 않아서 생기는 오류)
정수를 0으로 나누는 경우,
클래스명에 able이 붙는 경우 대부분 인터페이스 일 가능성이 높다.

모든 예외 클래스의 최상위 클래는 Exception.

다양한 예외 클래스가 제공됨

RuntiomeException : 실행 오류 예외 처리
IOExcoption : 입출력 예외처리

실행 예외

런타임시 발생하며 컴파일러가 예외 처리 여부를 확인하지 않음

개발자가 예외처리 코드의 추가 여부를 결정

일반 예외

컴파일라는 오류가 발생할 가능성을 발견하면 컴파일 오류를 발생시킴

개발자는 예외 처리 코드를 반드시 추가해야 함

try - catch문

try{
	예외가 발생할 가능성이 있는 실행문(try블록)
}
catch(처리할 예외 타입 선언){
	예외처리문 catch 출력
}
public class ZeroDivideTest {

	public static void main(String[] args) {

		int[] num = { 1, 2, 3, 4, 5 };

		try { // 오류가 생길 가능성이 있는 코드는 try블록에 코딩
			for (int i = 0; i <= num.length; i++)
				System.out.println(num[i]);

		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println(e); //오류원인 출력
			System.out.println("예외 처리 부분");
		}
		System.out.println("프로그램 종료");

	}

}
 

try-catch-finally문

finally에서 프로그램 리소스를 정리함

try{}블럭이 실행되면 finally{}블록은 항상 실행됨

리소스를 정리하는 코드를 각 블록에서 처리하지않고 finally에서 처리함

try{
	예외가 발생할 수 있는 부분
}  catch(처리할 예외 타입 e){
	예외를 처리하는 부분
} finally{
	항상 수행되는 부분
}

try-with-resources문

리소스를 자동 해제 하도록 제공해주는 구문

close()를 명시적으로 호출하지 않아도 try{}블록에서 열린 리소스는 정상적인 경우, 예외 발생한 경우 모두 자동 해제됨.

조건 :

AutoCloseable 인터페이스

.
.

throws

예외 발생 시 예외 처리를 직접하지않고 호출한 곳으로 넘긴다.

(=예외 처리 미루기)

메소드를 호출하여 사용하는 곳, 즉 메소드명을 기재한 곳에서 예외처리한다는 뜻.

ex)
public void firsrMethod() throws Exception{
}
profile
24시간이 부족한 개발자

0개의 댓글