Java 프로그램 내에서 예상치 못한 상황이 발생됐을 때를 대비하여 예외처리가 필요하다.
* 컴파일 오류 : 코드에 문제가 있어 프로그램이 실행되지 않는 경우
* 런타임 오류 : 컴파일은 작동되나 실행과정에서 오류가 발생되는 경우
런타임 오류는 크게 에러 error 와 예외 exception 이 있다.
에러 : 작성한 소스코드를 통해 수습할 수 없는 사례(메모리, 스택오버플로우 등)
예외 : 소스코드를 통해 수습할 수 있는 사례(지정 경로가 잘못된 경우, 호출한 객체가 없는 경우 등)
예를 들어 3/0을 실행하면 숫자를 0으로 나눌 수 없으므로 오류가 발생된다.
위의 try catch 구문을 통해 작성하게 되면 실제 3/0은 실행되지 않았지만 catch 구문으로 오류를 출력하였으므로 "프로그램 정상 종료" 구문 까지 코드가 진행되는 것을 확인할 수 있다.
또한 e.printStackTrace()를 활용하면 어떤 위치에서 해당 오류가 발생되었는지도 확인 할 수 있다.
이번에는 3개의 값을 가지는 int [3] 크기의 배열을 생성하고, arr[5] 인덱스 값에 100을 입력해보았다.
이 구문을 실행하게 되면 ArrayIndexOutOfBoundsException 즉 인덱스의 범위가 잘못되었다는 오류를 출력하는 것을 볼 수 있다.
이번에는 "test"라는 문자열을 가지는 Object를 생성하고 해당 값을 int로 변환하여 출력하도록 시도해보았다.
문자열 값을 정수로 전환할 수 없으므로 ClassCastException 오류가 발생되는 것을 확인할 수 있다.
이번에는 Catch 구문에 대해 좀 더 자세히 살펴보자.
try{
}catch (Exception e){
}
try catch 구문은 위와 같은 형태로 선언된다.
위 예제에서는 Catch 구문을 Exception 하나로만 작성하였다.
여기서 Exception은 다른 모든 예외처리의 조상이라고 생각할 수 있다.
하지만 어떠한 예외가 생겼을 때 해당 예외사항을 처리하는 방법은 여러가지가 될 수 도 있다.
첫번째 예제) 3/0 을 실행하면 ArithmeticException 오류가 발생되었다.
해당 오류에 대하여 Catch 구문을 별도로 작성하면 아래와 같다.
위 코드를 실행하면 ArithmeticException 오류가 발생되어 해당 Catch 구문이 실행되며, 이후의 Catch 구문은 실행되지 않는 것을 볼 수 있다.
이번에는 ArrayIndexOutOfBoundsException 예외 시 catch 구문을 추가해보자.
ClassCastException 예외 처리 구문을 추가해보자.
만약 지정된 오류케이스가 아닌 경우에는 Exception 을 통해 예외처리가 가능하다.
만약 두개의 에러 유형에 대해서 동일한 예외처리를 실행하고 싶다면 | 를 통해 추가할 수 있다.
try{
} catch(ArithmeticException | ArrayIndexOutOfBoundsException e){
}
프로그램이 실행되는 과정에서 원하지 않는 결과를 임의로 발생하고 싶은 경우 위와 같이 throw를 활용하여 예외를 생성할 수 있다.
'Spec UP - Backend > 나도코딩의 자바기본편' 카테고리의 다른 글
chap_11. 사용자 정의 예외 (0) | 2023.07.10 |
---|---|
chap_11. Finally 구문 / Try With Resources (0) | 2023.07.10 |
chap_10. Stream (0) | 2023.07.06 |
chap_10. 람다식과 함수형 인터페이스 (0) | 2023.07.04 |
chap_10. 익명클래스(AnonymousClass) (0) | 2023.07.04 |
댓글