본문 바로가기
Spec UP - Backend/나도코딩의 자바기본편

chap_11. 예외처리 (Try Catch) / 예외발생시키기(Throw)

by TIS_Ha 2023. 7. 10.
반응형

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를 활용하여 예외를 생성할 수 있다.

반응형

댓글