//////
Search
🗒️

예외 처리

날짜
2022/09/28
작성자
우주완
서태건
이상훈
카테고리
회고

예외처리

예외(Exception)
단순한 문법 오류가 아닌 실행 중간에 발생하는 ‘정상적이지 않는 상황’ 을 뜻한다.
사용하는 이유
프로그램을 만들다 보면 수없이 많은 오류가 발생한다. 이러한 오류를 무시하고 싶을 때도 있고, 오류가 날 때 그에 맞는 적절한 처리를 하고 싶을 때도 있다. 이에 자바는 try ... catch, throw 구문을 이용해 오류를 처리 한다.

Exception과 Error의 차이

Exception(예외) : 개발자의 구현 실수나 사용자의 의해 발생되는 문제로 개발자가 미리 예측하여 방지 할 수있기에 상황에 맞는 예외 처리를 해야한다.
Error(오류) : 프로그램에 심각한 문제를 야기하여 실행중인 프로그램이 강제적으로 종료된다. 이러한 오류는 개발자가 미리 예측 처리할 수 있는 부분이 없다.
예외처리를 해야만 실행되는경우(CheckedException)
예외처리를 하지 않아도 실행되는 경우(UncheckedException)

예외 처리하기

1. try, catch 문의 기본 구조

try 문 안에 수행할 문장들이 예외가 발생하면 catch 문이 수행된다.
int c; try { c = 4 / 0; } catch(ArithmeticException e) { // 예외가 발생하여 이 문장이 수행된다. System.out.println("예외가 발생하여 이 문장이 수행된다."); }
Java
복사

finally

finally문은 사용하면 예외에 상관없이 무조건 수행된다.
int c; try { c = 4 / 0; } catch(ArithmeticException e) { // 예외가 발생하여 이 문장이 수행된다. System.out.println("예외가 발생하여 이 문장이 수행된다."); }finally { // 예외에 상관없이 무조건 수행된다. System.out.println("예외에 상관없이 무조건 수행된다.");
Java
복사

2. throw & throws

throw&throws

throw는 예외를 발생시킬수 있는 코드를 강제로 예외를 발생시킨 후 throws를 통해 예외를 모아 처리하거나 try&catch문을 통해 예외를 처리한다.

throw 예제

public class ExcepTest { public static void main(String[] args) { try { myException(); } catch (Exception e) { e.printStackTrace(); System.out.println("myclass에서 예외가 발생하였습니다."); } } static public void myException() { try { throw new Exception(); } catch(Exception e) { e.printStackTrace(); System.out.println("myException에서 예외가 발생하였습니다."); } } }
Plain Text
복사
출력
java.lang.Exceptionat ExcepTest.
myException(ExcepTest.java:22)at ExcepTest.main(ExcepTest.java:11)
myException에서 예외가 발생하였습니다.
==> main 메서드에서 myException메서드를 호출하고, 여기서 throw를 통해 Exception을 강제로 발생시키고 있다.때문에 catch 블럭으로 처리가 위임되고, 여기서 예외를 처리하고 있다.

throws 예제

public class ExcepTest { public static void main(String[] args) { try { myException(); } catch (Exception e) { e.printStackTrace(); System.out.println("myclass에서 예외가 발생하였습니다."); } } static public void myException() throws Exception{ throw new Exception(); } }
Plain Text
복사
출력
java.lang.Exceptionat ExcepTest.myException(ExcepTest.java:19)at
ExcepTest.main(ExcepTest.java:8)
myclass에서 예외가 발생하였습니다.
==>throw를 통해 예외를 발생시키고 throws는 이 예외를 상위클래스로 던져버리고 있다.

throws 예제2

==>
22줄에 throw e를 통해 예외를 발생시키면 throws에 의해 상위 메서드로 예외를 던지게 된다.

주의 할 점

try { c = 4 / 0; } catch (ArithmeticException e) { e.printStackTrace(); System.out.println(e.getMessage()); System.out.println("비정상 처리"); } catch (InputMismatchException e) { // catch 부분을 하나더 추가 시켜 InputMismatchException(문자열 에러) 를 추가킨다 System.out.println("정수만 입력가능합니다."); } catch (Exception e) { System.out.println("오류입니다. 숫자로 다시입력해주세요."); } finally { System.out.println("필수적으로 실행"); }
Java
복사
다양한 예외 구문이 있지만 각각에 예외 구문을 처리하고 싶을 때
Exception 이 제일 위 에있으면 컴파일 에러가 난다.
Exception이 제일 위에 있으면 아래 있는 게 적용이 되지 않기 때문이다.
많은 예외 처리 구문을 사용 할 때 가장 아래 놓아야 된다.
catch는 여러개 추가할 수 있다.
위의 코드에서 c = 4 / 0; 에서 오류가 발생하면 그 아래의 코드는 실행되지않는다.
반드시 실행되어야할 코드라면 finally에 작성해야한다.
취합
우주완
이상훈
서태건