JShell이란 무엇인가?
JShell은 Java 9에서 새롭게 도입된 도구로, Java 언어의 다양한 기능과 방대한 라이브러리를 빠르고 편리하게 탐색, 발견, 실험할 수 있는 환경을 제공합니다. 별도의 클래스 파일 작성이나 컴파일 과정 없이 대화형으로 코드를 실행할 수 있어 학습과 프로토타이핑에 매우 유용합니다.
JShell의 내부 동작 원리
사용자가 JShell 콘솔에 코드를 입력하면, 먼저 JLine이라는 자바 라이브러리가 콘솔 입력을 처리합니다. JLine은 콘솔 환경에서 사용자 입력을 캡처하고 줄 편집 기능을 지원하는 역할을 담당합니다.
코드가 입력되면 이어서 JShell 파서(Parser)가 해당 코드를 분석하여 그 유형(메서드, 변수, 표현식 등)을 판별합니다.
JShell 파서의 래핑 규칙
JShell 파서는 내부적으로 하나의 클래스로 코드를 감싸며, 다음과 같은 규칙을 따릅니다:
- 모든 import 문은 이 클래스의 최상단에 배치됩니다.
- 변수, 메서드, 클래스 선언은 이 클래스의 static 멤버로 변환됩니다.
- 표현식(expression)과 선언문은 이 클래스 내부의 메서드 안에 감싸집니다.
이러한 변환 단계를 거친 후, 생성된 소스 코드는 Java 컴파일러에 의해 분석되고 바이트코드(Bytecode)로 컴파일됩니다. 이후 바이트코드는 JVM이 구동 중인 별도의 프로세스로 전달되어 로드 및 실행됩니다. 덕분에 JShell은 실제 JVM 환경에서 코드를 검증할 수 있습니다.
JShell 실행 방법
아래와 같이 명령 프롬프트에 간단히 "jshell"을 입력하면 JShell 도구를 실행할 수 있습니다.
C:\Users\User>jshell | Welcome to JShell -- Version 9.0.4 | For an introduction type: /help intro jshell>
JShell이 시작되면 입력을 기다리는 명령 프롬프트가 나타납니다. 여기에 입력할 수 있는 명령은 두 가지 유형입니다:
- JShell 내부 명령어: 슬래시("/")로 시작하는 명령어
- Java 코드: 일반적인 자바 구문 및 표현식
내부 명령어와 Java 코드 실행 예시
아래 예시에서는 JShell 내부 명령어인 "/list"와 Java 코드인 System.out.println()을 함께 사용하는 모습을 확인할 수 있습니다.
jshell> System.out.println("Tutorialspoint")
Tutorialspoint
jshell> /list
1 : System.out.println("Tutorialspoint")/list 명령어를 실행하면 지금까지 세션에서 입력한 모든 유효한 코드 조각(snippet) 목록이 번호와 함께 출력됩니다. 이처럼 JShell은 REPL(Read-Eval-Print Loop) 방식으로 즉각적인 피드백을 제공하여 Java 개발과 학습 과정을 한층 효율적으로 만들어 줍니다.