Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 9 JShell에서 예외(Exception)를 처리하는 방법

Java 9에서 도입된 JShell은 Java 언어의 다양한 기능과 방대한 표준 라이브러리를 빠르게 탐색하고, 실험하고, 학습할 수 있도록 도와주는 빠르고 친화적인 대화형 환경입니다.

JShell의 가장 큰 장점 중 하나는 예외 처리 코드를 직접 작성할 필요가 없다는 점입니다. JShell은 발생하는 모든 예외를 자동으로 포착(catch)하여 관련 정보를 화면에 출력한 뒤, 곧바로 다음 프롬프트를 표시하기 때문에 세션을 계속 이어갈 수 있습니다.

이 기능은 unchecked 예외에도 동일하게 적용됩니다. 즉, JShell은 checked 예외와 unchecked 예외를 모두 자동으로 처리하므로, checked 예외를 던지는 메서드도 try-catch 블록 없이 부담 없이 실험해 볼 수 있습니다.

예제 1: ArrayIndexOutOfBoundsException

아래 예제에서는 배열에 존재하지 않는 인덱스 values[4]에 접근했기 때문에 ArrayIndexOutOfBoundsException이 발생합니다.

jshell> int[] values = {10, 20, 30}
values ==> int[3] { 10, 20, 30 }

jshell> values[4]
|   java.lang.ArrayIndexOutOfBoundsException thrown: 4
|        at (#7:1)

예제 2: FileNotFoundException

아래 예제에서는 지정한 디렉터리에서 파일을 찾을 수 없기 때문에 FileNotFoundException(checked 예외)이 발생합니다. 일반적인 Java 프로그램이라면 이 예외를 반드시 처리해야 컴파일 오류가 나지 않지만, JShell에서는 자동으로 처리됩니다.

jshell> FileInputStream fis = new FileInputStream("data.txt")
| java.io.FileNotFoundException thrown: data.txt (The system cannot find the file specified)
|        at FileInputStream.open0 (Native Method)
|        at FileInputStream.open (FileInputStream.java:196)
|        at FileInputStream.<init> (FileInputStream.java:139)
|        at FileInputStream.<init> (FileInputStream.java:94)
|        at (#5:1)

예제 3: ArithmeticException

아래 예제에서는 값 "1/0"이 수학적으로 정의되지 않기(undefined) 때문에 unchecked 예외인 ArithmeticException이 발생합니다.

jshell> 1/0
|  java.lang.ArithmeticException thrown: / by zero
|         at (#4:1)

이처럼 JShell은 예외가 발생해도 프로그램이 종료되지 않고 스택 트레이스 정보를 보여준 뒤 바로 다음 입력을 받을 수 있으므로, 예외 상황을 빠르게 확인하고 학습하기에 매우 유용한 도구입니다.