JShell 사용법을 열정적으로 강의하고 있는 선생님

Java JShell 사용법 완벽 가이드: JShell이 IntelliJ보다 편한 4가지 케이스

“이 코드 한 줄만 돌려보고 싶은데…”

Java 개발자라면 누구나 위와 같은 생각을 해봤을 텐데요. String.substring()의 인덱스가 헷갈리거나, Stream API의 동작 방식을 확인하고 싶을 때. 혹은 인터넷이나 AI에서 찾은 코드 조각이 정말 내 상황에 맞는지 테스트하고 싶을 때. 이런 간단한 확인을 위해 무거운 IntelliJ를 켜고, 새 프로젝트를 만들거나 새 파일을 생성해서 public static void main(String[] args)를 작성한 뒤 결과를 출력하는 과정은 너무 번거롭습니다.

이런 문제를 해결하기 위해 Java 9에서 새롭게 등장한 도구가 바로 JShell입니다. JShell은 코드 테스트를 빠르고 간편하게 만들어주는 도구로, 개발 생산성을 한 단계 끌어올려 줍니다. 이 글에서는 JShell이 어떤 도구인지 알아보고, JShell 사용법, 필수 명령어, 그리고 IntelliJ보다 유리한 상황까지 모두 알아보겠습니다.

JShell 사용법을 열정적으로 강의하고 있는 선생님

JShell이란?

JShell은 Java에 REPL(Read-Eval-Print Loop) 환경을 도입한 공식 도구입니다. 코드를 입력하면 JShell이 읽고(Read), 실행(Eval) 하고, 결과를 출력(Print) 한 뒤, 다시 입력을 기다리는 반복(Loop) 과정으로 동작합니다. 크롬 브라우저의 콘솔 창에서 JavaScript 코드를 한 줄씩 실행해 보는 것처럼 main 메서드나 클래스 선언 없이도 코드를 즉시 실행할 수 있습니다.

JShell 사용법

JDK 9 이상이 설치되어 있다면, 터미널이나 명령 프롬프트 창에서 간단한 명령어만 입력하면 됩니다. 안 되면 JAVA_HOME 환경 변수를 설정해 주셔야 합니다.

jshell

JShell이 실행되면 바로 코드를 입력해 볼 수 있습니다.

jshell> String message = "Hello, JShell"
message ==> "Hello, JShell"

jshell> System.out.println(message)
Hello, JShell

jshell> message.length()
$3 ==> 13

변수 선언, 메서드 호출, 결과 확인이 즉시 이루어집니다. $3 같은 임시 변수는 JShell이 이전 결과를 저장한 값입니다.

꼭 알아야 할 JShell 필수 명령어

명령어설명
/list입력한 코드 목록 조회
/vars선언된 변수 목록 조회
/methods정의된 메서드 목록 조회
/edit [id]메서드나 변수 또는 표현식 편집
※ 표현식은 /list 명령어로 조회 시 나오는 번호로 선택 가능
/drop [id]메서드나 변수 또는 표현식 삭제
※ 표현식은 /list 명령어로 조회 시 나오는 번호로 선택 가능
/save [파일명]파일로 저장
※ 현재 명령 프롬프트나 터미널이 열린 경로에 저장됨. 권한 문제로 안될 경우 관리자 권한으로 실행 필요
/open [파일명]JShell에서 저장된 파일 열기
※ 현재 명령 프롬프트나 터미널이 열린 경로에 있는 파일만 열 수 있음.
/exitJShell 종료
/help모든 명령어 도움말 표시

자주 쓰는 JShell 단축키

위/아래 화살표와 Tab 키가 어떤 역할을 하는지만 외우면 되고, 나머지 단축키는 몰라도 큰 지장은 없습니다.

단축키설명
↑ / ↓이전에 입력한 명령어 탐색
Tab코드 자동 완성
Ctrl + A커서를 줄 맨 앞으로 이동
Ctrl + E커서를 줄 맨 뒤로 이동
Ctrl + R이전 명령어 검색
Alt + B단어 단위로 왼쪽 이동
Alt + F단어 단위로 오른쪽 이동
Ctrl + K커서부터 줄 끝까지 삭제
Ctrl + Y최근 삭제한 텍스트 복원
Ctrl + L모두 삭제(히스토리는 유지)

JShell IntelliJ 비교(JShell이 IntelliJ보다 편한 4가지 케이스)

대부분 상황에서는 당연히 IntelliJ로 하는 게 훨씬 편리하지만 몇몇 상황에서는 JShell로 테스트하는 게 더 편리한 경우도 있습니다.

케이스 1. Java를 처음 배우는 사람에게 Java를 가르쳐 줄 때

  • 문제 : Hello world를 화면에 출력해 봅시다.
  • IntelliJ : IntelliJ 설치 -> 클래스 생성 -> main 메서드 생성 -> System.out.println(‘Hello world”); 입력 -> main 메서드 실행 -> 몇 초 후 결과 출력
  • JShell : 명령 프롬프트 실행 -> JShell 입력 -> System.out.println(‘Hello world”); 입력 -> 즉시 결과 출력
jshell

jshell> System.out.println("Hello")
Hello world

Java를 처음 배우면 Java 설치하는 것부터 어려울 텐데 IDE까지 설치하고, main 메서드까지 만들고, 실행하는 과정이 굉장히 스트레스받는 일일 것입니다. JShell로 시작하면 일단 바로 한 줄씩 명령어를 입력하고, 결과를 확인해 볼 수 있기 때문에 IDE부터 설치하는 것보다 좋은 방법일 수 있습니다.

제가 JShell을 알게 된 계기도 아래에 링크한 Udemy Java 강좌 때문입니다.

https://www.udemy.com/course/best-java-programming

JShell을 이용해서 Java 기초 문법에 대한 스터디를 한참 진행한 후에 IDE를 설치하는데 이런 강의 스타일이 저는 굉장히 좋아 보였습니다. 저도 누군가에게 Java를 알려줘야 하는 상황이 생기면 JShell로 학습을 시작하도록 안내할 생각입니다.

케이스 2. 간단한 Java 문법 및 API 확인

  • 문제 : 정수형인 숫자와 문자열인 숫자를 더하면 어떻게 될까?
  • IntelliJ : 클래스 생성 -> main 메서드 생성 -> System.out.println(1 + “1”); 입력 -> main 메서드 실행 -> 몇 초 후 결과 출력
  • JShell : 1 + “1” 입력 -> 즉시 결과 출력
jshell> 1 + "1"
$1 ==> "11"

위와 같이 간단한 Java 문법이 생각나지 않거나 API의 결과가 확인하고 싶은 경우 JShell이 유용합니다. Javascript 같은 경우 F12 눌러서 개발자 도구 열고 Console 창에서 바로 이것저것 해볼 수 있는데 Java 같은 경우는 로그를 찍어 보거나 디버깅하면서 Expression에 써보는 수밖에 없어서 아쉬웠는데 JShell을 사용하면 이런 불편함이 어느 정도 상쇄됩니다.

케이스 3. 간단한 코드 검증 및 프로토타이핑

  • 문제 : Stream API 코드가 내가 원하는 결과를 반환하는지 테스트하고 싶을 때
jshell> List list = List.of(1, 2, 3, 4, 5); list.stream().filter(i -> i > 3).forEach(System.out::println);
4
5

케이스 4. 동작 방식을 눈으로 확인하며 배우고 싶을 때

jshell> PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
pq ==> []

jshell> pq.add(5); pq
$11 ==> true
pq ==> [5]

jshell> pq.add(3); pq
$13 ==> true
pq ==> [3, 5]

jshell> pq.add(4); pq
$15 ==> true
pq ==> [3, 5, 4]

jshell> pq.add(9); pq
$17 ==> true
pq ==> [3, 5, 4, 9]

jshell> pq.poll(); pq
$19 ==> 3
pq ==> [4, 5, 9]

jshell> pq.poll(); pq
$21 ==> 4
pq ==> [5, 9]

JShell FAQ

Java 9 이전 버전에서도 사용 가능하나요?

불가능합니다.

Jshell을 스크립트 파일을 실행하는 용도로 사용할 수 있나요?

가능합니다. 스크립트를 작성해서 jsh파일로 저장 후 jshell 파일명.jsh를 입력하면 스크립트가 실행됩니다.

결론: JShell 분명 유용한 순간이 있다.

IntelliJ에서 다 할 수 있는 일들이지만 몇몇 순간에는 분명 JShell로 훨씬 편하게 할 수 있습니다. 특히 Java를 처음 배우는 사람에게는 아주 유용할 것이라고 생각합니다. 개발자마다 호불호가 많이 갈릴만한 도구이고, 실제로 현업에서 많이 사용하고 있지도 않지만 분명 빛을 볼 순간이 있는 도구입니다. 여러분의 사용 후기나 의견도 댓글로 공유해 주세요.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다