예외(Exceptions)

코드를 실행했을 때 발생되는 에러 중 하나. 예상할 수 있고 자바에서 그 유형을 가지고 있다.

int a = 10;
int b = 0;
int c = a / b;

10은 0으로 나눌 수 없다.

그렇기 때문에 이런 에러가 발생한다.

에러를 처리하지 않으면 프로그램이 종료되거나 예기지 못한 방향으로 흘러갈 수 있다. 컴퓨터 시스템 자체에서 처리될 수 있도록 회피하거나 대체적인 동작, 혹은 에러메세지를 띄울 수 있도록 처리해야한다.

 

리스트를 통한 예외를 만들어보자.

ArrayList arrayList = new ArrayList(initialCapacity:3);
arrayList.get(10);

10이라는 값은 arrayList에 존재하지 않는다. 자료구조에서 범위를 벗어난 것을 참조할 때도 예외가 발생한다.

 

예외를 처리하기 위해서는 try와 catch 구문을 사용한다.

try는 예외가 발생할 것 같은 코드를 try 안에 넣는다. 어떤 예외를 잡아 판단할 것인지, 예외가 발생하면 대체 동작을 수행할 수 있도록 해주는 것이 catch이다.

try {
	arrayList.get(10);
} catch (Exception e) {
	e.printStackTrace();
    System.out.println("Exception 발생");
} finally {
    System.out.println("finally");
}

Exception은 가장 최상위에  e Exception이라는 객체가 있다. 모든 Exception은 여기에 포함된다. 그렇기 때문에 어떠한 에러가 발생하더라도 catch에 걸리게 된다. 그리고 중괄호 안에 메세지를 띄우거나 Sytem.out.println으로 콘솔에 에러발생이라고 띄울 수 있다.(그러나 웬만하면 catch 문 안에 Sytem.out.println을 쓰지 않는 것이 보안에 좋다.) printStackTrace는 에러와 관련된 내용을 띄워 확인 할 수 있다. 에러 메세지는 보안적으로 취약한 점이 드러날 수 있기 때문에 외부에 노출하는 것을 지양하는 것이 좋다.

finally는 위와 상관 없이 무조건 수행되는 소스를 가르킨다.

 

발생하는 에러 종류를 세분화해보자.

try {
    int a = 10;
    int b = 0;
    int c = a / b;
} catch (IndexOutOfBoundsException ioe) {
    System.out.println("IndexOutOfBoundsException 발생");
} catch (IllegalArgumentException iae) {
    System.out.println("IllegalArgumentException 발생");
} catch (Exception e) {
    System.out.println("Exception 발생");
} finally {
    System.out.println("finally");
}

catch는 다중으로 세팅할 수 있다. 예상되는 예외를 나열하고 가장 마지막에 최상위의 Exception 객체를 넣어야 처리되지 않는 예외 없이 모두 처리가 된다.

 

 

'Back-End > Java' 카테고리의 다른 글

HTTP 통신과 URL  (0) 2023.05.23
Web - 클라이언트와 서버  (0) 2023.05.22
객체지향 - 객체지향 프로그래밍  (0) 2023.05.18
회원가입 프로그램 실습 - 자바(Java) 편  (1) 2023.05.16
함수  (0) 2023.05.15

+ Recent posts