Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

JShell 도구는 Java 9에서 내부적으로 어떻게 작동할까?

JShell이란 무엇인가?

JShellJava 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 개발과 학습 과정을 한층 효율적으로 만들어 줍니다.