JShell이란?
JShell은 Java 언어를 학습하고 코드 프로토타입을 빠르게 만들어 볼 수 있도록 Java 9부터 제공되는 대화형(인터랙티브) 도구입니다. JShell은 사용자가 입력한 명령을 즉시 평가하여 결과를 보여주는 방식으로 동작하며, 이는 REPL(Read-Evaluate-Print-Loop), 즉 읽고-평가하고-출력하는 반복 구조를 기반으로 합니다.
기본 임포트된 패키지 확인하기
JShell 세션이 시작되면 기본적으로 몇 가지 유용한 Java 패키지들이 자동으로 임포트됩니다. /imports 명령을 입력하면 현재 임포트된 모든 패키지 목록을 확인할 수 있습니다.
jshell> /imports
| import java.io.*
| import java.math.*
| import java.net.*
| import java.nio.file.*
| import java.util.*
| import java.util.concurrent.*
| import java.util.function.*
| import java.util.prefs.*
| import java.util.regex.*
| import java.util.stream.*
| import javax.mail.internet.InternetAddress
외부 라이브러리 임포트 시 발생하는 문제
JShell에서도 외부 라이브러리를 사용할 수 있습니다. 예를 들어 javax.mail.internet 패키지에 속한 InternetAddress 객체를 생성하고 싶다면, 먼저 해당 패키지를 임포트해야 합니다.
jshell> import javax.mail.internet.InternetAddress
| Error:
| package javax.mail.internet does not exist
| import javax.mail.internet.InternetAddress;
| ^---------------------------------^
그러나 위와 같이 단순히 클래스를 임포트하는 것만으로는 동작하지 않습니다. 그 이유는 해당 패키지가 클래스패스(classpath)에 존재하지 않아 JShell이 인식할 수 없기 때문입니다.
/env --class-path로 외부 JAR 추가하기
이 문제를 해결하려면 /env --class-path <jars, class files> 명령을 사용하여 필요한 JAR 파일이나 클래스 파일을 클래스패스에 추가해야 합니다.
jshell> /env --class-path \Users\user\mail-1.4.7.jar
| Setting new options and restoring state.
jshell> import javax.mail.internet.InternetAddress
클래스패스에 JAR 파일이 등록되면 새로운 옵션 설정과 함께 기존 세션 상태가 복원되며, 이후에는 오류 없이 정상적으로 패키지를 임포트할 수 있습니다.
객체 생성 및 실행 결과 확인
이제 클래스패스 설정이 완료되었으므로, 아래와 같이 InternetAddress 객체를 자유롭게 생성하고 사용할 수 있습니다.
jshell> InternetAddress from = new InternetAddress("a@a")
from ==> a@a정리
JShell에서 외부 라이브러리를 사용하는 절차를 요약하면 다음과 같습니다.
1. /env --class-path 명령으로 필요한 JAR 파일을 클래스패스에 추가한다.
2. import 문으로 해당 패키지나 클래스를 임포트한다.
3. 임포트된 클래스를 사용하여 객체를 생성하고 코드를 테스트한다.
이 과정을 통해 JShell을 활용하면 외부 라이브러리 기반의 Java 코드도 손쉽게 실험하고 학습할 수 있습니다.