JShell은 Java 9에서 도입된 REPL(Read-Eval-Print Loop) 대화형 도구로, 변수 선언, 문장(statement), 표현식(expression) 등 간단한 자바 코드를 main() 메서드 없이도 실행하고 평가할 수 있게 해줍니다.
JShell의 스크래치 변수란?
JShell에서 스니펫(snippet)이 반환하는 값은 별도의 설정 없이 자동으로 스크래치 변수(scratch variable)에 저장됩니다. 이러한 스크래치 변수는 달러 기호($)로 표현됩니다.
표현식의 결과를 변수에 직접 할당하지 않으면, JShell이 자동으로 스크래치 변수를 생성합니다. 덕분에 나중에 해당 표현식의 출력 결과를 다시 활용할 수 있습니다.
스크래치 변수 생성 예제
아래 코드 스니펫에서는 여섯 개의 스크래치 변수($1 ~ $6)가 자동으로 생성되었습니다.
jshell> 3+7 $1 ==> 10 jshell> 9-2 $2 ==> 7 jshell> 4*4 $3 ==> 16 jshell> 12/4 $4 ==> 3 jshell> 19%5 $5 ==> 4 jshell> String.valueOf($2) $6 ==> "7"
위 예제에서 주목할 점은 마지막 줄입니다. 이미 생성된 스크래치 변수 $2를 참조하여 새로운 값("7")을 얻고, 그 결과가 다시 $6이라는 스크래치 변수에 저장되었습니다.
일반 변수와 스크래치 변수의 차이
아래 코드에서는 nonScratch라는 변수를 생성했습니다. 이름에서 알 수 있듯이 이 변수는 사용자가 명시적으로 선언했기 때문에 $ 기호로 표현되지 않으며, 따라서 스크래치 변수가 아닙니다.
jshell> String nonScratch = "Tutorialspoint" nonScratch ==> "Tutorialspoint"
/vars 명령어로 변수 확인하기
JShell 세션에서 /vars 명령어를 실행하면, 현재 세션에 존재하는 모든 변수를 확인할 수 있습니다. 스크래치 변수와 일반 변수(논스크래치 변수)가 함께 출력됩니다.
jshell> /vars | int $1 = 10 | int $2 = 7 | int $3 = 16 | int $4 = 3 | int $5 = 4 | String $6 = "7" | String nonScratch = "Tutorialspoint"
정리
- JShell은 표현식의 결과를 자동으로 $1, $2처럼 번호가 매겨진 스크래치 변수에 저장합니다.
- 스크래치 변수는 나중에 다른 표현식에서 재사용할 수 있습니다.
- 사용자가 직접 선언한 변수는 $ 기호 없이 저장됩니다.
- /vars 명령어로 세션 내 모든 변수 목록을 확인할 수 있습니다.