JShell이란 무엇인가?
JShell은 Java 9에 새롭게 도입된 대화형 Java Shell 도구입니다. 코드를 한 줄씩 입력하면 즉시 실행 결과를 확인할 수 있어, 간단한 문법 테스트나 API 학습에 매우 유용합니다. JShell은 REPL(Read-Evaluate-Print-Loop), 즉 '읽기-평가-출력-반복' 방식으로 동작하며, 명령줄 프롬프트에서 바로 실행할 수 있습니다.
--startup 플래그로 시작 스크립트 지정하기
JShell은 실행 시점에 미리 정의된 스크립트를 자동으로 로드하는 기능을 제공합니다. --startup 플래그를 사용하면 파일명 또는 DEFAULT, JAVASE, PRINTING 중 하나를 지정할 수 있습니다. 또한 /list -start 명령어를 입력하면 시작 시 평가되는 모든 스니펫(코드 조각)을 확인할 수 있습니다.
- DEFAULT: 기본 동작을 로드합니다. 이 옵션을 아예 지정하지 않았을 때와 동일하게 작동합니다.
- JAVASE: Java SE의 모든 패키지를 기본적으로 임포트(import)합니다.
- PRINTING: print, println, printf 함수를 별도 선언 없이 바로 사용할 수 있도록 정의해 줍니다.
1. DEFAULT 시작 스크립트 예제
아래 코드에서는 DEFAULT를 시작 스크립트로 사용한 결과입니다. 자주 쓰이는 핵심 패키지들이 자동으로 임포트됩니다.
C:\Users\User>jshell --startup DEFAULT | Welcome to JShell -- Version 9.0.4 | For an introduction type: /help intro jshell> /list -start s1 : import java.io.*; s2 : import java.math.*; s3 : import java.net.*; s4 : import java.nio.file.*; s5 : import java.util.*; s6 : import java.util.concurrent.*; s7 : import java.util.function.*; s8 : import java.util.prefs.*; s9 : import java.util.regex.*; s10 : import java.util.stream.*;
2. JAVASE 시작 스크립트 예제
아래는 JAVASE를 시작 스크립트로 지정한 결과입니다. java.awt, javax.swing, javax.crypto 등 Java SE 전체 패키지(총 173개)가 일괄 임포트됩니다.
C:\Users\User>jshell --startup JAVASE | Welcome to JShell -- Version 9.0.4 | For an introduction type: /help intro jshell> /list -start s1 : import java.applet.*; s2 : import java.awt.*; s3 : import java.awt.color.*; s4 : import java.awt.datatransfer.*; s5 : import java.awt.desktop.*; s6 : import java.awt.dnd.*; s7 : import java.awt.event.*; s8 : import java.awt.font.*; s9 : import java.awt.geom.*; s10 : import java.awt.im.*; // ... (중략: java.beans, java.io, java.lang, java.net, // java.nio, java.rmi, java.security, java.sql, // java.time, java.util, javax.swing, javax.xml 등 // Java SE 전체 패키지가 순서대로 임포트됨) s171 : import org.xml.sax.*; s172 : import org.xml.sax.ext.*; s173 : import org.xml.sax.helpers.*;
3. PRINTING 시작 스크립트 예제
아래는 PRINTING을 시작 스크립트로 지정한 결과입니다. System.out.print()를 매번 길게 작성하지 않아도 되도록 print, println, printf 메서드가 오버로딩 형태로 미리 정의됩니다.
C:\Users\User>jshell --startup PRINTING
| Welcome to JShell -- Version 9.0.4
| For an introduction type: /help intro
jshell> /list -start
s1 : void print(boolean b) { System.out.print(b); }
s2 : void print(char c) { System.out.print(c); }
s3 : void print(int i) { System.out.print(i); }
s4 : void print(long l) { System.out.print(l); }
s5 : void print(float f) { System.out.print(f); }
s6 : void print(double d) { System.out.print(d); }
s7 : void print(char s[]) { System.out.print(s); }
s8 : void print(String s) { System.out.print(s); }
s9 : void print(Object obj) { System.out.print(obj); }
s10 : void println() { System.out.println(); }
s11 : void println(boolean b) { System.out.println(b); }
s12 : void println(char c) { System.out.println(c); }
s13 : void println(int i) { System.out.println(i); }
s14 : void println(long l) { System.out.println(l); }
s15 : void println(float f) { System.out.println(f); }
s16 : void println(double d) { System.out.println(d); }
s17 : void println(char s[]) { System.out.println(s); }
s18 : void println(String s) { System.out.println(s); }
s19 : void println(Object obj) { System.out.println(obj); }
s20 : void printf(java.util.Locale l, String format, Object... args) { System.out.printf(l, format, args); }
s21 : void printf(String format, Object... args) { System.out.printf(format, args); }
정리
세 가지 시작 스크립트의 용도를 요약하면 다음과 같습니다. 빠른 테스트에는 DEFAULT(또는 생략), GUI·네트워크 등 광범위한 API 실험에는 JAVASE, 출력 결과를 간결하게 확인하고 싶을 때는 PRINTING을 선택하면 됩니다. 필요하다면 직접 작성한 스크립트 파일을 --startup 플래그에 지정하여 나만의 초기 환경을 구성할 수도 있습니다.