JShell 소개
Java 9는 REPL(Read-Evaluate-Print-Loop)이라 불리는 새로운 도구인 JShell을 도입했습니다. JShell은 완전한 프로그램을 작성하지 않고도 Java 코드를 즉시 실행하고 결과를 확인할 수 있는 명령줄(command-line) 프롬프트 도구입니다.
JShell에 코드나 내부 명령어를 입력하면 해당 내용은 현재 세션 동안에만 유지됩니다. JShell을 종료한 후 다시 실행하면 이전에 입력했던 모든 코드가 사라집니다. 이러한 문제를 해결하기 위해 입력한 코드 전체를 파일로 저장할 수 있는 내부 명령어인 "/save"가 제공됩니다.
/save 명령어 문법
/save [file-path] /save -all [file-path] /save -history [file-path] /save -start [file-path]
각 옵션별 설명
- /save [file-path]: 옵션 없이 사용하면 세션 중 입력된 유효한(active) 코드만 지정한 파일에 저장합니다. 오류가 발생한 코드와 내부 명령어는 파일에 저장되지 않습니다.
- /save -all [file-path]: 세션 중 입력된 유효한 코드뿐만 아니라 오류가 발생한 코드와 시작 시 로드된 코드까지 모두 파일에 저장합니다. 단, 내부 명령어는 기록되지 않습니다.
- /save -history [file-path]: 세션 중 입력된 모든 코드와 명령어를 파일에 저장합니다. 내부 명령어까지도 함께 저장됩니다.
- /save -start: JShell이 시작될 때 자동으로 실행되는 코드 전체를 파일에 저장합니다.
사용 예제
아래 코드 예제에서는 "/save" 명령어 뒤에 어떤 옵션을 붙이느냐에 따라 JShell에 입력한 코드가 서로 다른 파일로 저장됩니다. 저장되는 파일은 확장자가 ".jsh"인 디렉터리에 보관해야 합니다.
C:\Users\User>jshell
| Welcome to JShell -- Version 9.0.4
| For an introduction type: /help intro
jshell> int x = 20
x ==> 20
jshell> double y = 30
y ==> 30.0
jshell> public int sum(int a, int b) {
...> return a + b;
...> }
| created method sum(int,int)
jshell> String str = "TutorialsPoint"
str ==> "TutorialsPoint"
jshell> /list
1 : int x = 20;
2 : double y = 30;
3 : public int sum(int a, int b) {
return a + b;
}
4 : String str = "TutorialsPoint";
jshell> int var = "error"
| Error:
| incompatible types: java.lang.String cannot be converted to int
| int var = "error";
| ^-----^
jshell> /save C:\Users\User\save.jsh
jshell> /save -all C:\Users\User\saveAll.jsh
jshell> /save -history C:\Users\User\saveHistory.jsh
jshell> /save -start C:\Users\User\saveStart.jsh위 예제처럼 각 옵션을 활용하면 세션이 종료된 후에도 저장된 .jsh 파일을 다시 열어(/open 명령어 사용) 이전 작업을 그대로 복원할 수 있습니다. 반복적인 실험 작업이나 학습 과정에서 JShell 세션을 효율적으로 관리하는 데 유용합니다.